Я работаю над рендерером OpenGL 3 для инструментария GUI под названием Gwen . У меня почти все работает, но у меня есть некоторые проблемы, заставляющие все смешиваться правильно. Я отсортировал треугольники по текстуре, которую они используют, и упаковал их в VBO, поэтому в модульном тесте он в основном сводится к 3 слоям: заполненные прямоугольники без текстуры, текст, окна, кнопки и т. Д., Использующие текстура кожи.
Заполненные прямоугольники обычно рисуются поверх всего остального и смешиваются, но фоном для всего этого также является заполненный прямоугольник, поэтому я не могу на это рассчитывать. Существует конфликт Z-значений, если вы рисуете их последними (например, окна имеют текстурированную тень по краям, которая становится черной, потому что фон не проходит проверку глубины), и конфликт смешивания / z-значений, если вы рисуете их первым (например, : некоторые из выделенных участков рисуются поверх, а не смешиваются, как они и должны).
Я не могу рассчитывать на то, что смогу идентифицировать какой-либо конкретный слой, кроме заполненных прямоугольников. Различные слои имеют смесь значений z, поэтому я не могу просто нарисовать их в определенном порядке, чтобы все заработало. Во время написания этой статьи я подумал о простом методе рисования треугольников, отсортированных назад, вперед, но это может означать множество небольших вызовов отрисовки, которых я надеюсь избежать. Есть ли какой-нибудь метод, который включает в себя какое-то волшебное смешение вуду, которое позволило бы мне сохранить мои большие партии треугольников?