что происходит за glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)? [Дубликат]

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

9
задан Pierluigi 28 July 2015 в 07:13
поделиться

2 ответа

GL_COLOR_BUFFER_BIT и GL_DEPTH_BUFFER_BIT не являются функциями, они являются константами. Вы используете их, чтобы сообщить glClear(), какие буферы вы хотите очистить, - в вашем примере, буфер глубины и «буферы, которые в настоящее время включены для цветной записи». Вы также можете передать GL_ACCUM_BUFFER_BIT, чтобы очистить буфер накопления и / или GL_STENCIL_BUFFER_BIT, чтобы очистить буфер трафарета.

Фактические значения констант не должны иметь значения для вас при использовании библиотеки - важного детальность реализации заключается в том, что двоичные представления для каждой константы не перекрываются друг с другом. Это та характеристика, которая позволяет передавать побитовое ИЛИ из нескольких констант одному вызову glClear().

Подробнее см. glClear() documention .

10
ответ дан Matthew 17 August 2018 в 20:02
поделиться
  • 1
    Я спрашиваю об этих константах, почему мы используем их, я хочу больше информации о них, пожалуйста! – Mohamed Amged 30 March 2011 в 00:08
  • 2
    в документах мне сообщается GL_COLOR_BUFFER_BIT Указывает, что буферы в настоящее время включены для цветной записи. GL_DEPTH_BUFFER_BIT Указывает буфер глубины. – Mohamed Amged 30 March 2011 в 00:12
  • 3
    Больше информации о них нет ... Думаю, вы могли бы посмотреть в gl.h. На моей машине GL_COLOR_BUFFER_BIT есть 0x00004000, а GL_DEPTH_BUFFER_BIT - 0x00000100. О чем еще можно узнать? – Carl Norum 30 March 2011 в 00:19
  • 4
    @Carl Norum: числовые значения этих токенов OpenGL (константы) записаны в спецификации. @Mohamed Amged: значение, переданное glClear, оценивается внутри драйвера OpenGL некоторым кодом, подобным этому: glClearOfTheDriver (GLbitfield mask) {if (mask & amp; GL_COLOR_BUFFER_BIT) clear_the_color_buffer; if (mask & amp; GL_DEPTH_BUFFER_BIT) clear_the_depth_buffer; ...}; в этом нет ничего более. Эти токены, проходящие до glClear, являются ортогональными (битовыми) векторами (посмотрите на ортогональные векторы в Википедии, чтобы понять, что это означает). – datenwolf 30 March 2011 в 08:18
  • 5
    @CarlNorum, здесь есть префикс. Приветствия. Почему мы очищаем GL_DEPTH_BUFFER_BIT – 2am 20 October 2013 в 11:37

Вызов glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) очищает буферы цвета и глубины OpenGL (или любой другой буфер или комбинацию буферов). OpenGL - это конечный автомат, рекомендуется начинать каждый кадр с чистого листа.

0
ответ дан LastBlow 17 August 2018 в 20:02
поделиться
Другие вопросы по тегам:

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