OpenGL Stenciling, отделяющий ref от значения написанного?

Следующий код устанавливает тест трафарета, чтобы увидеть, ref больше, чем хранимое значение в буфере трафарета, и если это так, он напишет ref в буфер трафарета

unsigned int ref = 42;
glStencilFunc(GL_GREATER, ref, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

Проблема в том, что пока я хочу протестировать буфер трафарета refЯ не хочу записывать ref для этого, если это удастся, я хочу написать совершенно другое значение. Единственный вариант, который я нашел, это GL_INCR который может занять место GL_REPLACE, но это не очень полезно, если в буфере трафарета уже написано много материала, который не может быть очищен заранее.

Есть ли способ … скажем, проверить, чтобы увидеть, больше ли 42, чем то, что хранится в буфере трафарета, и если это так, записать в него 100 или что-то еще?

1

Решение

Я не верю, что эта функциональность доступна в стандартном OpenGL. Самое близкое, что я нашел, это расширение для конкретного поставщика: AMD_stencil_operation_extended.

Это поддерживает именно то, что вы ищете:

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

Просто после прочтения спецификации звонки должны выглядеть примерно так: val значение шаблона, которое вы хотите установить:

glStencilFunc(GL_GREATER, ref, 0xFF);
glStencilOpValueAMD(GL_FRONT_AND_BACK, val);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE_VALUE_AMD);
4

Другие решения


По вопросам рекламы [email protected]