glEnableClientState и glDisableClientState из OpenGL - PullRequest
15 голосов
/ 14 июня 2011

Что означает glEnableClientState и glDisableClientState в OpenGL? До сих пор я обнаружил, что эти функции предназначены для включения или отключения некоторых возможностей на стороне клиента.

Ну, что именно клиент или сервер здесь? Я запускаю свою программу OpenGL на ПК, так к чему это относится? Почему нам даже нужно отключить определенные возможности? ... и что еще интереснее, речь идет о вещах, связанных с массивами?

Вся картина очень серая для меня.

Ответы [ 4 ]

13 голосов
/ 14 июня 2011

Первоначальная терминология основана на нотации X11, где сервером является действительная система графического отображения:

  • Серверная программа, предоставляющая доступ к какому-либо устройству отображения

и

  • Клиенты, подключающиеся к серверу для рисования на отображаемом им устройстве отображения

glEnableClientState и glDisableClientState устанавливают состояние клиентской части.Раньше массивы вершин располагались в памяти процесса клиента, поэтому рисование с использованием массивов вершин было локальным процессом клиента.

Сегодня у нас есть объекты буфера, которые помещают данные в память сервера, предоставляя всю терминологию на стороне клиента:массивы вершин нелогичны.Было бы целесообразно отбрасывать состояния клиентов и включать / отключать массивы вершин с помощью обычных функций glEnable / glDisable, как мы делаем с объектами и текстурами кадрового буфера.

7 голосов
/ 14 июня 2011

Если вы рисуете свою графику, передавая буферы в OpenGL (glVertexPointer () и т. Д.) Вместо прямых вызовов (glVertex3f ()), вам нужно указать OpenGL, какие буферы использовать.

Поэтому вместо вызоваglVertex и glNormal, вы будете создавать буферы, связывать их и использовать glVertexPointer и glNormalPointer, чтобы указывать OpenGL на ваши данные.После этого вызов glDrawElements (или тому подобное) будет использовать эти буферы для рисования.Тем не менее, еще один обязательный шаг - сообщить драйверу OpenGL, какие буферы вы на самом деле хотите использовать, и в него входит glEnableClientState ().

Это все очень волнисто.Вы должны прочитать об объектах буфера вершин и попробовать их.

4 голосов
/ 14 июня 2011

В терминологии OpenGL клиент - это ваше приложение, а сервер - это видеокарта (или драйвер), я думаю. Единственными возможностями на стороне клиента являются вершинные массивы, поскольку они хранятся в памяти процессора и, следовательно, на стороне клиента или, более конкретно, они контролируются (выделяются и освобождаются) вашим приложением, а не драйвером.

Буферные объекты Vertex - это отдельная история. Они могут использоваться как массивы вершин, но управляются драйвером, поэтому слово «состояние клиента» больше не имеет особого смысла при работе с буферами.

2 голосов
/ 14 июня 2011

glEnableClientState и glDisableClientState в основном используются для управления массивами вершин и объектами буфера вершин .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...