From 3c090249ed2e49535d989063c53d11ea91a8f3c8 Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Wed, 7 Sep 2016 19:31:24 +0100 Subject: [PATCH] [3.0] Combine StencilMode and WriteToColorBuffer to RenderMode Change-Id: I423fa10241eaf3a617f47490aa5484ed54c68594 (cherry picked from commit d68d9abdb83792e81017f2c960a06cd8ce82a0cd) --- .../renderer-stencil/renderer-stencil-example.cpp | 26 ++++++++-------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/examples/renderer-stencil/renderer-stencil-example.cpp b/examples/renderer-stencil/renderer-stencil-example.cpp index 27385f0..37d6fe7 100644 --- a/examples/renderer-stencil/renderer-stencil-example.cpp +++ b/examples/renderer-stencil/renderer-stencil-example.cpp @@ -275,13 +275,10 @@ private: renderer.SetTextures( textureSet ); // Setup the renderer properties: - // We are writing to the color buffer & culling back faces. - renderer.SetProperty( Renderer::Property::WRITE_TO_COLOR_BUFFER, true ); + // We are writing to the color buffer & culling back faces (no stencil is used for the main cube). + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR ); renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); - // No stencil is used for the main cube. - renderer.SetProperty( Renderer::Property::STENCIL_MODE, StencilMode::OFF ); - // We do need to write to the depth buffer as other objects need to appear underneath this cube. renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::ON ); // We do not need to test the depth buffer as we are culling the back faces. @@ -316,13 +313,10 @@ private: renderer.SetTextures( planeTextureSet ); // Setup the renderer properties: - // We are writing to the color buffer & culling back faces (as we are NOT doing depth write). - renderer.SetProperty( Renderer::Property::WRITE_TO_COLOR_BUFFER, true ); + // We are writing to the color buffer & culling back faces as we are NOT doing depth write (no stencil is used for the floor). + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR ); renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); - // No stencil is used for the floor. - renderer.SetProperty( Renderer::Property::STENCIL_MODE, StencilMode::OFF ); - // We do not write to the depth buffer as its not needed. renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::OFF ); // We do need to test the depth buffer as we need the floor to be underneath the cube. @@ -360,11 +354,9 @@ private: Renderer renderer = CreateRenderer( planeGeometry, size, false, Vector4::ONE ); // Setup the renderer properties: - // The stencil plane is only for stencilling, so disable writing to color buffer. - renderer.SetProperty( Renderer::Property::WRITE_TO_COLOR_BUFFER, false ); + // The stencil plane is only for stencilling. + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::STENCIL ); - // Enable stencil. Draw to the stencil buffer (only). - renderer.SetProperty( Renderer::Property::STENCIL_MODE, StencilMode::ON ); renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION, StencilFunction::ALWAYS ); renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_REFERENCE, 1 ); renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_MASK, 0xFF ); @@ -410,8 +402,9 @@ private: renderer.SetTextures( textureSet ); // Setup the renderer properties: - // Write to color buffer so reflection is visible - renderer.SetProperty( Renderer::Property::WRITE_TO_COLOR_BUFFER, true ); + // Write to color buffer so reflection is visible. + // Also enable the stencil buffer, as we will be testing against it to only draw to areas within the stencil. + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR_STENCIL ); // We cull to skip drawing the back faces. renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); @@ -422,7 +415,6 @@ private: renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB, BlendFactor::ONE ); // Enable stencil. Here we only draw to areas within the stencil. - renderer.SetProperty( Renderer::Property::STENCIL_MODE, StencilMode::ON ); renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION, StencilFunction::EQUAL ); renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_REFERENCE, 1 ); renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_MASK, 0xff ); -- 2.7.4