glDrawBuffers - вказує список колірних буферів у які буде відбуватись малювання.
C-специфікація
void glDrawBuffers (GLsizei n, const GLenum *bufs) ;
Параметри
n вказує кількість буферів у масиві bufs.
bufs передає вказівник на масив символічних констант, які позначають буфери у які будуть записуватись фрагментні кольори або значення даних.
Опис
Функція glDrawBuffers визначає масив буферів у які буде виконуватися запис фрагментних кольорів або фрагментні дані. Якщо активні жодні фрмагментні шейдери, операцію малювання генеруватимуть тільки один фрагментний колір на фрагмент і він уде записаний у кожен з буферів вказаних у масиві bufs. Якщо фрагментні шейдери являються активними і записують значення у змінну виводу gl_FragColor, тоді це значення буде записане у кожен з буферів вказаних у параметрі bufs. Якщо фрагментний шейдер являється активним і записує значення у одне або декілька елементів масиву виводу gl_FragData[], тоді значення елементу gl_FragData[0] буде записано у перший буфер вказаний у параметрі bufs, значення gl_FragData[1] буде записано у другий буфер вказаний у bufs, і так далі аж до gl_FragData[n-1]. Буфер малювання, який використовується для gl_FragData[n] і далі неявно встановлюються у GL_NONE.
Параметр-масив bufs може містити значення наступних символічних констант:
- GL_NONE. Фрагментні значення для колірьору або даних не записуються у будь-який колірний буфер.
- GL_FRONT_LEFT. Фрагментні значення для кольору або даних записуються у передній лівий колірний буфер.
- GL_FRONT_RIGHT. Фрагментні значення кольорів або даних записуються у передній правий колірний буфер.
- GL_BACK_LEFT. Фрагментні значення кольору або даних записуються у задній лівий колірний буфер.
- GL_BACK_RIGHT. Фрагментні значення кольору або даних записуються у задній правий колірний буфер.
- GL_AUXi. Фрагментні значення кольору або даних записуються у допоміжний буфер за індексом i.
За вийнятком GL_NONE, вказані символічні константи можуть з'являтися у масиві bufs тільки один раз. Максимальна кількість підтримуваних буферів для малювання залежить від реалізації і може визначатися за допомогою виклику функції glGet з аргументом GL_MAX_DRAW_BUFFERS. Кількість допоміжних буферів може опитуватися за допомогою виклику функції glGet з аргументом GL_AUX_BUFFERS.
Нотатки
Функція glDrawBuffers доступна у системі OpenGL версії 2.0 або вище.
Завжди справджується рівняння GL_AUXi = GL_AUX0 + i.
Не дозволяється використовувати символічні константи GL_FRONT_GL_BACK, GL_LEFT, GL_RIGHT і GL_FRONT_AND_BACK для масиву bufs, оскільки вони можуть посилатись на декілька буферів.
Якщо фрагментний шейдер не виконує запис у gl_FragColor або gl_FragData, значення фрагментних кольорів під час виконання шейдера невизначені. Для кожного фрагменту згенерованого у даній ситуації, різні значення можуть записуватися у кожен з буферів вказаних у масиві bufs.
Помилки
GL_INVALID_ENUM генерується якщо одне з значень у масиві bufs не містить допустимого значення.
GL_INVALID_ENUM генерується якщо параметр n містить значення менше від 0.
GL_INVALID_OPERATION генерується якщо символічні константи відмінні від GL_NONE з'являються більш ніж один раз у масиві bufs.
GL_INVALID_OPERATION генерується якщо будь-які записи масиву bufs (відмінні від GL_NONE) вказують колірний буфер, який не існує в поточному контексті OpenGL.
GL_INVALID_VALUE генерується якщо параметр n містить значення більше за GL_MAX_DRAW_BUFFERS.
GL_INVALID_OPERATION генерується якщо функція glDrawBuffers виконується між відповідними викликами функцй glBegin і glEnd.
Пов'язані параметри
glGet з аргументом GL_MAX_DRAW_BUFFERS
glGet з аргументом GL_DRAW_BUFFERSi де i вказує номер буферу малювання, значення якого опитується
Перегляньте також
glBlendFunc, glColorMask, glDrawBuffers, glIndexMask, glLogicOp, glReadBuffer
Оригінал
https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glDrawBuffers.xml