Функция glStencilOp

Функция glStencilOp задает действия теста набора элементов.

Синтаксис

void WINAPI glStencilOp(
   GLenum fail,
   GLenum zfail,
   GLenum zpass
);

Параметры

Не

Действие, выполняемое при сбое теста набора элементов. Принимаются следующие шесть символических констант.

Значение Значение
GL_KEEP
Сохраняет текущее значение.
GL_ZERO
Задает значение буфера набора элементов равным нулю.
GL_REPLACE
Задает для буфера набора элементов значение ref, как указано в glStencilFunc.
GL_INCR
Увеличивает текущее значение буфера набора элементов. Зажимает максимально допустимое значение без знака.
GL_DECR
Уменьшает текущее значение буфера набора элементов. Зажимает до нуля.
GL_INVERT
Побитовое инвертирует текущее значение буфера трафарета.

zfail

Действие набора элементов, когда проверка набора элементов пройдена, но проверка глубины завершается сбоем. Принимает те же символьные константы, что и сбой.

zpass

Действие набора элементов, когда тест набора элементов и проверка глубины пройдены, или когда тест набора элементов пройден и либо отсутствует буфер глубины, либо тестирование глубины не включено. Принимает те же символьные константы, что и сбой.

Возвращаемое значение

Эта функция не возвращает значение.

Коды ошибок

Следующие коды ошибок могут быть получены функцией glGetError .

Имя Значение
GL_INVALID_ENUM
fail, zfail или zpass — это любое значение, отличное от шести определенных значений констант.
GL_INVALID_OPERATION
Функция была вызвана между вызовом glBegin и соответствующим вызовом glEnd.

Комментарии

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

Тест набора элементов условно исключает пиксель на основе результата сравнения между значением в буфере набора элементов и ссылочным значением. Тест включается с помощью вызовов glEnable и glDisable с аргументами GL_STENCIL_TEST и управляется с помощью glStencilFunc.

Функция glStencilOp принимает три аргумента, которые указывают, что происходит с сохраненным значением набора элементов при включенном наборе элементов. Если проверка набора элементов завершается сбоем, в буферах цвета или глубины пикселя не вносятся изменения, а сбой указывает, что происходит с содержимым буфера трафарета.

Значения буфера набора элементов обрабатываются как целые числа без знака. При приращении и уменьшении значения зажимаются до 0 и 2n 1, где n — это значение, возвращаемое запросом GL_STENCIL_BITS.

Два других аргумента для glStencilOp указывают действия буфера трафарета, если последующие тесты буфера глубины будут успешными (zpass) или неудачными (zfail). (См. раздел glDepthFunc.) Они указываются с помощью шести символьных констант, что и сбой. Обратите внимание, что zfail игнорируется, если буфер глубины отсутствует или если буфер глубины не включен. В таких случаях сбой и zpass указывают действие набора элементов, если тест набора элементов завершается сбоем и проходит соответственно.

Изначально проверка набора элементов отключена. Если буфер трафарета отсутствует, изменение набора элементов не может происходить, и тесты набора элементов всегда проходят, независимо от вызова glStencilOp.

Следующие функции извлекают сведения, связанные с glStencilOp:

glGet с аргументом GL_STENCIL_FAIL

glGet с аргументом GL_STENCIL_PASS_DEPTH_PASS

glGet с аргументом GL_STENCIL_PASS_DEPTH_FAIL

glGet с аргументом GL_STENCIL_BITS

glIsEnabled с аргументом GL_STENCIL_TEST

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Gl.h
Библиотека
Opengl32.lib
DLL
Opengl32.dll

См. также раздел

glAlphaFunc

glBegin

glBlendFunc

glDepthFunc

GlEnable

glEnd

glIsEnabled

glLogicOp

glStencilFunc