Fix OpenGL stencil buffer writes (#6023)

This commit is contained in:
Ben Doherty
2022-08-31 17:17:16 -04:00
committed by GitHub
parent ac61fd7ba4
commit 2f26ef0873
2 changed files with 10 additions and 1 deletions
+2
View File
@@ -5,6 +5,8 @@ A new header is inserted each time a *tag* is created.
## main branch
- engine: Fix stencil buffer writes with OpenGL backend.
## v1.27.0
- WebGL: reduce max instance count to work around Chrome issues [⚠️ **Recompile Materials**]
+8 -1
View File
@@ -309,9 +309,16 @@ void OpenGLDriver::setStencilState(StencilState ss) noexcept {
mRenderPassStencilWrite |= ss.stencilWrite;
// stencil test / operation
// GL_STENCIL_TEST must be enabled if we're testing OR writing to the stencil buffer.
if (UTILS_LIKELY(
ss.front.stencilFunc == StencilState::StencilFunction::A &&
ss.back.stencilFunc == StencilState::StencilFunction::A)) {
ss.back.stencilFunc == StencilState::StencilFunction::A &&
ss.front.stencilOpDepthFail == StencilOperation::KEEP &&
ss.back.stencilOpDepthFail == StencilOperation::KEEP &&
ss.front.stencilOpStencilFail == StencilOperation::KEEP &&
ss.back.stencilOpStencilFail == StencilOperation::KEEP &&
ss.front.stencilOpDepthStencilPass == StencilOperation::KEEP &&
ss.back.stencilOpDepthStencilPass == StencilOperation::KEEP)) {
// that's equivalent to having the stencil test disabled
gl.disable(GL_STENCIL_TEST);
} else {