glEnableClientState и glDisableClientState из OpenGL

16
задан Caterpillar 31 July 2014 в 15:09
поделиться

2 ответа

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

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

и

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

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

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

13
ответ дан datenwolf 31 July 2014 в 15:09
поделиться

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

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

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

7
ответ дан Chris Mennie 31 July 2014 в 15:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: