GlEnableClientState и glDisableClientState OpenGL
В чем смысл glEnableClientState
и glDisableClientState
в OpenGL?
До сих пор я обнаружил, что эти функции включают или отключают некоторые возможности клиентской стороны.
Хорошо, что здесь представляет собой клиент или сервер?
Я запускаю свою программу OpenGL на ПК, так что это значит?
Почему нам даже нужно отключать определенные возможности?... и более интригует его о какой-то связанной с массивом вещи?
Вся картина очень серая для меня.
Ответы
Ответ 1
Исходная терминология проистекает из нотации X11, где сервер является фактической системой отображения графики:
- Серверная программа, обеспечивающая доступ к некоторому экранному устройству
и
- Клиенты, подключающиеся к серверу для рисования на отображаемом устройстве,
glEnableClientState
и glDisableClientState
установить состояние части клиента. Вершинные массивы раньше располагались в памяти клиентского процесса, поэтому рисование с использованием вершинных массивов было локальным процессом клиента.
Сегодня у нас есть Buffer Objects, которые помещают данные в память сервера, делая континентность всей клиентской терминологии вершинных массивов. Было бы разумно отбрасывать состояния клиента и включать/отключать массивы вершин с помощью обычных функций glEnable
/glDisable
, например, с объектами фреймбуфера и текстурами.
Ответ 2
Если вы рисуете свою графику, передавая буферы в OpenGL (glVertexPointer() и т.д.) вместо прямых вызовов (glVertex3f()), вам нужно указать OpenGL, какие буферы использовать.
Поэтому вместо вызова glVertex и glNormal вы создадите буферы, привяжите их и используйте glVertexPointer и glNormalPointer, чтобы указать OpenGL на ваши данные. Впоследствии вызов glDrawElements (или тому подобного) будет использовать эти буферы для рисования. Тем не менее, еще один требуемый шаг - сообщить драйверу OpenGL, который буферисты вы действительно хотите использовать, в котором находится glEnableClientState().
Это все очень волнистые руки. Вам нужно прочитать объекты вершинного буфера и попробовать их.
Ответ 3
В терминологии OpenGL клиент - это ваше приложение, а сервер - графическая карта (или драйвер), я думаю. Единственными возможностями на стороне клиента являются массивы вершин, поскольку они хранятся в памяти ЦП и, следовательно, на стороне клиента или, более конкретно, они управляются (распределяются и освобождаются) вашим приложением, а не драйвером.
Объекты буфера Vertex - это другая история. Они могут использоваться как массивы вершин, но контролируются драйвером, поэтому слово "состояние клиента" больше не имеет большого смысла при работе с буферами.
Ответ 4
glEnableClientState
и glDisableClientState
в основном используются для управления Vertex Arrays и Объекты буфера вершин.