В настоящее время я работаю над 2D-графикой, и, насколько я могу судить, каждая вершина в конечном итоге обрабатывается как 4D-точка в однородном пространстве. Поэтому я говорю себе: какая пустая трата ресурсов! Я понимаю, что аппаратное обеспечение в основном предназначено для обработки 3D-сцен и, как таковое, может быть жестко запрограммировано на 4d-линейную алгебру. Тем не менее, есть ли способ написать шейдеры (или включить набор параметров), чтобы в жесткой памяти использовались только оригинальные 2d-координаты? Я знаю, что можно было встроить две матрицы 2x2 в матрицу 4x4, но переменная gl_Position
, являющаяся vec4
, кажется, заканчивает здесь трек. Я не ищу какого-то «обходного» взлома вроде этого, а скорее канонического способа сделать OpenGL, как определенный режим/состояние.Открывает ли OpenGL3 + определенное состояние для рендеринга 2D-графики?
Мне не удалось найти образец кода или даже просто упомянуть об этом факте в сети, поэтому я собираю его просто невозможно/не желательно, например, по соображениям производительности. Это так?
Waaaaiitt ... Вы работаете над 2D-графикой, которая по существу использует меньше ресурсов. Это очень похоже на преждевременную оптимизацию. И я думаю, что ответ будет «нет» в любом случае из-за того, как создается растеризатор. –
@Bartek Я думаю, что это все еще правильный вопрос. Даже в традиционном 3D-приложении вы делаете некоторые вещи, такие как HUD, которые полностью 2D, поэтому стоит обсудить наиболее эффективный способ сделать это в OpenGL. –
@NathanMonteleone Не стоит обсуждать это, если а) это не настоящая проблема. Б) предлагаемое решение улучшило бы его с помощью такой крошечной разницы. –