2015-01-27 3 views
0

Сегодня я сделал интересное, если запутанное открытие.glPolygonMode (GL_FRONT_AND_BACK, GL_LINE) против glDraw * (GL_LINE_STRIP ...)

До сих пор я получил штраф, используя glDraw*(GL_LINE_STRIP...) (или связанные режимы рисования GL_LINE*). Конечно, это всегда требует некоторого переупорядочения вершин, чтобы сделать одинаковые данные вершин без перебоев между GL_TRIANGLES и GL_LINE_STRIP, но все в порядке.

Тогда сегодня я снова представил старый код, который у меня был, и нашел среди него glPolygonMode(GL_FRONT_AND_BACK, GL_LINE). Я просмотрел его, и люди говорили, что, хотя GL_BACK и GL_FRONT устарели в контексте с 3,3 ядрами, glPolygonMode не рассматривается, хотя поддерживается только GL_FRONT_AND_BACK в качестве первого аргумента. Поэтому я попробовал его с GL_LINE в качестве второго аргумента, а также glDraw*(GL_TRIANGLES...), и он не только отлично работал, но и не требовал явного переупорядочения вершин, необходимых для соответствия GL_LINE_STRIP. (Я вернулся к более ранней конфигурации, чтобы проверить это).

Вопросы:

  1. Что я должен использовать, в 3.3 ядра контексте? Является ли метод ОК? Причина, по которой я спрашиваю, заключается в том, что мне интересно, действительно ли строка glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); дает мне основной профиль, поскольку в конце концов это всего лишь намек на GLFW.

  2. Какой подход рекомендуется? Возникают ли последствия для работы? Конечно, это намного удобнее.

  3. Почему есть glDraw*(GL_LINE*...), если это можно сделать через glPolygonMode?

+1

1: Оба метода в профиле основного профиля. 3: Потому что вы также можете рисовать линии, которые не образуют треугольников, например, прямую линию или круг и т. Д. – BDL

+0

@BDL Спасибо! Позаботьтесь об этом в ответ? Я не возражаю против пункта 2; эти, о которых вы упоминали, достаточны. –

+1

Что касается точки 2, 'glPolygonMode (...)' * (как используется в вашем вопросе) * создает линии на краях многоугольников, сохраняя при этом примитивный тип треугольником. Это имеет тонкие последствия для растеризации, отсечения, отображения текстур и других вещей, которые отличаются между примитивами треугольника и строки. Можно действительно спросить, почему даже «glPolygonMode (...)», когда вы можете делать то же самое с геометрией и шейдером фрагментов в наши дни, это удобство. –

ответ

1

Объявление 1: Оба метода отлично подходят в профиле OpenGL Core.

Объявление 2: Я не уверен в этом, но, я думаю, не будет большой разницы в производительности.

Объявление 3: Эти методы существуют, потому что также можно рисовать объекты линии, которые не состоят из треугольников. Примерами этого являются круги или даже прямые линии.