From 584b8b34f01dd3b4ca646606c33c3ea0f1fe7213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Tue, 13 Feb 2018 12:35:23 -0800 Subject: [PATCH] Added support for independent RGB channel write control. --- 3rdparty/stb/stb_rect_pack.h | 19 +++++++ examples/01-cubes/cubes.cpp | 39 +++++++++++++- examples/06-bump/bump.cpp | 12 ++--- examples/09-hdr/hdr.cpp | 18 +++---- examples/12-lod/lod.cpp | 4 +- examples/13-stencil/stencil.cpp | 32 ++++++------ examples/14-shadowvolumes/shadowvolumes.cpp | 52 +++++++++---------- .../shadowmaps_simple.cpp | 12 ++--- examples/16-shadowmaps/shadowmaps.cpp | 44 ++++++++-------- examples/18-ibl/ibl.cpp | 2 +- examples/19-oit/oit.cpp | 10 ++-- examples/21-deferred/deferred.cpp | 18 +++---- examples/23-vectordisplay/vectordisplay.cpp | 20 +++---- examples/24-nbody/nbody.cpp | 2 +- examples/28-wireframe/wireframe.cpp | 12 ++--- examples/31-rsm/reflectiveshadowmap.cpp | 8 +-- examples/33-pom/pom.cpp | 6 +-- examples/36-sky/sky.cpp | 2 +- examples/common/bgfx_utils.cpp | 6 +-- examples/common/debugdraw/debugdraw.cpp | 10 ++-- examples/common/font/text_buffer_manager.cpp | 6 +-- examples/common/imgui/imgui.cpp | 4 +- examples/common/nanovg/nanovg_bgfx.cpp | 4 +- examples/common/ps/particle_system.cpp | 4 +- include/bgfx/bgfx.h | 8 +-- include/bgfx/defines.h | 30 ++++++++--- src/bgfx.cpp | 32 ++++++++++++ src/renderer_d3d11.cpp | 25 ++++----- src/renderer_d3d11.h | 6 +-- src/renderer_d3d12.cpp | 27 ++++------ src/renderer_d3d9.cpp | 19 ++++--- src/renderer_gl.cpp | 22 ++++---- src/renderer_mtl.mm | 41 +++++++++++---- src/renderer_vk.cpp | 23 ++++---- tools/texturev/texturev.cpp | 4 +- 35 files changed, 346 insertions(+), 237 deletions(-) diff --git a/3rdparty/stb/stb_rect_pack.h b/3rdparty/stb/stb_rect_pack.h index 2b07dcc82..47c3a9ece 100644 --- a/3rdparty/stb/stb_rect_pack.h +++ b/3rdparty/stb/stb_rect_pack.h @@ -1,3 +1,22 @@ +#if defined(__GNUC__) || defined(__clang__) +# if defined(__has_warning) +# define STB_HAS_WARNING __has_warning +# else +# define STB_HAS_WARNING(w) 1 +# endif +# if defined(__clang__) +# pragma clang diagnostic ignored "-Wunknown-pragmas" +# endif // defined(__clang__) +# pragma GCC diagnostic ignored "-Wtype-limits" +# pragma GCC diagnostic ignored "-Wunused-function" +# pragma GCC diagnostic ignored "-Wunused-parameter" +# if STB_HAS_WARNING("-Wunused-but-set-variable") +# pragma GCC diagnostic ignored "-Wunused-but-set-variable" +# endif +#else +# pragma warning(disable:4100) // C4100: 'c': unreferenced formal parameter +#endif + // stb_rect_pack.h - v0.11 - public domain - rectangle packing // Sean Barrett 2014 // diff --git a/examples/01-cubes/cubes.cpp b/examples/01-cubes/cubes.cpp index 48443525f..6ff8c5c1f 100644 --- a/examples/01-cubes/cubes.cpp +++ b/examples/01-cubes/cubes.cpp @@ -80,6 +80,10 @@ class ExampleCubes : public entry::AppI public: ExampleCubes(const char* _name, const char* _description) : entry::AppI(_name, _description) + , m_r(true) + , m_g(true) + , m_b(true) + , m_a(true) { } @@ -163,6 +167,27 @@ public: showExampleDialog(this); + ImGui::SetNextWindowPos( + ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f) + , ImGuiCond_FirstUseEver + ); + ImGui::SetNextWindowSize( + ImVec2(m_width / 5.0f, m_height / 2.0f) + , ImGuiCond_FirstUseEver + ); + ImGui::Begin("Settings" + , NULL + , 0 + ); + + ImGui::Checkbox("Write R", &m_r); + ImGui::Checkbox("Write G", &m_g); + ImGui::Checkbox("Write B", &m_b); + ImGui::Checkbox("Write A", &m_a); + + ImGui::End(); + + imguiEndFrame(); float time = (float)( (bx::getHPCounter()-m_timeOffset)/double(bx::getHPFrequency() ) ); @@ -221,7 +246,14 @@ public: // Set render states. bgfx::setState(0 - | BGFX_STATE_DEFAULT + | (m_r ? BGFX_STATE_WRITE_R : 0) + | (m_g ? BGFX_STATE_WRITE_G : 0) + | (m_b ? BGFX_STATE_WRITE_B : 0) + | (m_a ? BGFX_STATE_WRITE_A : 0) + | BGFX_STATE_WRITE_Z + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_CULL_CW + | BGFX_STATE_MSAA | BGFX_STATE_PT_TRISTRIP ); @@ -250,6 +282,11 @@ public: bgfx::IndexBufferHandle m_ibh; bgfx::ProgramHandle m_program; int64_t m_timeOffset; + + bool m_r; + bool m_g; + bool m_b; + bool m_a; }; } // namespace diff --git a/examples/06-bump/bump.cpp b/examples/06-bump/bump.cpp index 0b1b98ad2..7a6825dba 100644 --- a/examples/06-bump/bump.cpp +++ b/examples/06-bump/bump.cpp @@ -296,9 +296,9 @@ public: // Set render states. bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_MSAA ); @@ -333,9 +333,9 @@ public: // Set render states. bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_MSAA ); diff --git a/examples/09-hdr/hdr.cpp b/examples/09-hdr/hdr.cpp index fbc855f50..287b1a165 100644 --- a/examples/09-hdr/hdr.cpp +++ b/examples/09-hdr/hdr.cpp @@ -487,7 +487,7 @@ public: // Render skybox into view hdrSkybox. bgfx::setTexture(0, s_texCube, m_uffizi); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); bgfx::setUniform(u_mtx, mtx); screenSpaceQuad( (float)m_width, (float)m_height, true); bgfx::submit(hdrSkybox, m_skyProgram); @@ -500,35 +500,35 @@ public: // Calculate luminance. setOffsets2x2Lum(u_offset, 128, 128); bgfx::setTexture(0, s_texColor, m_fbtextures[0]); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(128.0f, 128.0f, m_caps->originBottomLeft); bgfx::submit(hdrLuminance, m_lumProgram); // Downscale luminance 0. setOffsets4x4Lum(u_offset, 128, 128); bgfx::setTexture(0, s_texColor, bgfx::getTexture(m_lum[0]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(64.0f, 64.0f, m_caps->originBottomLeft); bgfx::submit(hdrLumScale0, m_lumAvgProgram); // Downscale luminance 1. setOffsets4x4Lum(u_offset, 64, 64); bgfx::setTexture(0, s_texColor, bgfx::getTexture(m_lum[1]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(16.0f, 16.0f, m_caps->originBottomLeft); bgfx::submit(hdrLumScale1, m_lumAvgProgram); // Downscale luminance 2. setOffsets4x4Lum(u_offset, 16, 16); bgfx::setTexture(0, s_texColor, bgfx::getTexture(m_lum[2]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(4.0f, 4.0f, m_caps->originBottomLeft); bgfx::submit(hdrLumScale2, m_lumAvgProgram); // Downscale luminance 3. setOffsets4x4Lum(u_offset, 4, 4); bgfx::setTexture(0, s_texColor, bgfx::getTexture(m_lum[3]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(1.0f, 1.0f, m_caps->originBottomLeft); bgfx::submit(hdrLumScale3, m_lumAvgProgram); @@ -536,14 +536,14 @@ public: setOffsets4x4Lum(u_offset, m_width/2, m_height/2); bgfx::setTexture(0, s_texColor, m_fbtextures[0]); bgfx::setTexture(1, s_texLum, bgfx::getTexture(m_lum[4]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); bgfx::setUniform(u_tonemap, tonemap); screenSpaceQuad( (float)m_width/2.0f, (float)m_height/2.0f, m_caps->originBottomLeft); bgfx::submit(hdrBrightness, m_brightProgram); // m_blur m_bright pass vertically. bgfx::setTexture(0, s_texColor, bgfx::getTexture(m_bright) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); bgfx::setUniform(u_tonemap, tonemap); screenSpaceQuad( (float)m_width/8.0f, (float)m_height/8.0f, m_caps->originBottomLeft); bgfx::submit(hdrVBlur, m_blurProgram); @@ -552,7 +552,7 @@ public: bgfx::setTexture(0, s_texColor, m_fbtextures[0]); bgfx::setTexture(1, s_texLum, bgfx::getTexture(m_lum[4]) ); bgfx::setTexture(2, s_texBlur, bgfx::getTexture(m_blur) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad( (float)m_width, (float)m_height, m_caps->originBottomLeft); bgfx::submit(hdrHBlurTonemap, m_tonemapProgram); diff --git a/examples/12-lod/lod.cpp b/examples/12-lod/lod.cpp index 683d7a156..1e8ad9deb 100644 --- a/examples/12-lod/lod.cpp +++ b/examples/12-lod/lod.cpp @@ -219,8 +219,8 @@ public: stippleInv[2] = (float(m_transitionFrame)*4.0f/255.0f) - (1.0f/255.0f); const uint64_t stateTransparent = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA diff --git a/examples/13-stencil/stencil.cpp b/examples/13-stencil/stencil.cpp index 5ae389ccf..156f034b6 100644 --- a/examples/13-stencil/stencil.cpp +++ b/examples/13-stencil/stencil.cpp @@ -401,8 +401,8 @@ struct RenderState static RenderState s_renderStates[RenderState::Count] = { { // StencilReflection_CraftStencil - BGFX_STATE_RGB_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_MSAA , UINT32_MAX @@ -415,10 +415,10 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // StencilReflection_DrawReflected - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA) - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CW //reflection matrix has inverted normals. using CCW instead of CW. | BGFX_STATE_MSAA @@ -432,8 +432,8 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // StencilReflection_BlendPlane - BGFX_STATE_RGB_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_Z | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_SRC_COLOR) | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW @@ -443,8 +443,8 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // StencilReflection_DrawScene - BGFX_STATE_RGB_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -453,8 +453,8 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // ProjectionShadows_DrawAmbient - BGFX_STATE_RGB_WRITE - | BGFX_STATE_DEPTH_WRITE // write depth ! + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_Z // write depth ! | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -475,7 +475,7 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // ProjectionShadows_DrawDiffuse - BGFX_STATE_RGB_WRITE + BGFX_STATE_WRITE_RGB | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) | BGFX_STATE_DEPTH_TEST_EQUAL | BGFX_STATE_CULL_CCW @@ -490,9 +490,9 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // Custom_BlendLightTexture - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_COLOR, BGFX_STATE_BLEND_INV_SRC_COLOR) | BGFX_STATE_CULL_CCW @@ -502,7 +502,7 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // Custom_DrawPlaneBottom - BGFX_STATE_RGB_WRITE + BGFX_STATE_WRITE_RGB | BGFX_STATE_CULL_CW | BGFX_STATE_MSAA , UINT32_MAX diff --git a/examples/14-shadowvolumes/shadowvolumes.cpp b/examples/14-shadowvolumes/shadowvolumes.cpp index 1ed5ba3dd..b2ecb01ad 100644 --- a/examples/14-shadowvolumes/shadowvolumes.cpp +++ b/examples/14-shadowvolumes/shadowvolumes.cpp @@ -365,9 +365,9 @@ static void setRenderState(const RenderState& _renderState) static RenderState s_renderStates[RenderState::Count] = { { // ShadowVolume_UsingStencilTexture_DrawAmbient - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -376,7 +376,7 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // ShadowVolume_UsingStencilTexture_BuildDepth - BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -385,8 +385,8 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // ShadowVolume_UsingStencilTexture_CraftStencil_DepthPass - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) | BGFX_STATE_DEPTH_TEST_LEQUAL | BGFX_STATE_MSAA @@ -395,8 +395,8 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // ShadowVolume_UsingStencilTexture_CraftStencil_DepthFail - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) | BGFX_STATE_DEPTH_TEST_GEQUAL | BGFX_STATE_MSAA @@ -405,10 +405,10 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // ShadowVolume_UsingStencilTexture_DrawDiffuse - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_EQUAL | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -417,9 +417,9 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // ShadowVolume_UsingStencilBuffer_DrawAmbient - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -462,8 +462,8 @@ static RenderState s_renderStates[RenderState::Count] = | BGFX_STENCIL_OP_PASS_Z_KEEP }, { // ShadowVolume_UsingStencilBuffer_DrawDiffuse - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) | BGFX_STATE_DEPTH_TEST_EQUAL | BGFX_STATE_CULL_CCW @@ -478,9 +478,9 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // Custom_Default - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -489,9 +489,9 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // Custom_BlendLightTexture - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_COLOR, BGFX_STATE_BLEND_INV_SRC_COLOR) | BGFX_STATE_CULL_CCW @@ -501,9 +501,9 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // Custom_DrawPlaneBottom - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_CULL_CW | BGFX_STATE_MSAA , UINT32_MAX @@ -511,7 +511,7 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // Custom_DrawShadowVolume_Lines - BGFX_STATE_RGB_WRITE + BGFX_STATE_WRITE_RGB | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_FACTOR, BGFX_STATE_BLEND_SRC_ALPHA) | BGFX_STATE_PT_LINES diff --git a/examples/15-shadowmaps-simple/shadowmaps_simple.cpp b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp index 33d928478..a001eb4a0 100644 --- a/examples/15-shadowmaps-simple/shadowmaps_simple.cpp +++ b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp @@ -179,9 +179,9 @@ public: m_state[0] = meshStateCreate(); m_state[0]->m_state = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -192,9 +192,9 @@ public: m_state[1] = meshStateCreate(); m_state[1]->m_state = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA diff --git a/examples/16-shadowmaps/shadowmaps.cpp b/examples/16-shadowmaps/shadowmaps.cpp index cc74075a3..d619ca405 100644 --- a/examples/16-shadowmaps/shadowmaps.cpp +++ b/examples/16-shadowmaps/shadowmaps.cpp @@ -647,10 +647,10 @@ static RenderState s_renderStates[RenderState::Count] = { { // Default 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_LESS - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_Z | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA , UINT32_MAX @@ -659,9 +659,9 @@ static RenderState s_renderStates[RenderState::Count] = }, { // ShadowMap_PackDepth 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -671,9 +671,9 @@ static RenderState s_renderStates[RenderState::Count] = }, { // ShadowMap_PackDepthHoriz 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -688,9 +688,9 @@ static RenderState s_renderStates[RenderState::Count] = }, { // ShadowMap_PackDepthVert 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA @@ -704,9 +704,9 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // Custom_BlendLightTexture - BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_COLOR, BGFX_STATE_BLEND_INV_SRC_COLOR) | BGFX_STATE_CULL_CCW @@ -716,7 +716,7 @@ static RenderState s_renderStates[RenderState::Count] = , BGFX_STENCIL_NONE }, { // Custom_DrawPlaneBottom - BGFX_STATE_RGB_WRITE + BGFX_STATE_WRITE_RGB | BGFX_STATE_CULL_CW | BGFX_STATE_MSAA , UINT32_MAX @@ -2894,12 +2894,12 @@ public: && currentSmSettings->m_doBlur) { bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[0]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); bgfx::submit(RENDERVIEW_VBLUR_0_ID, s_programs.m_vBlur[depthType]); bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtBlur) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); bgfx::submit(RENDERVIEW_HBLUR_0_ID, s_programs.m_hBlur[depthType]); @@ -2910,12 +2910,12 @@ public: const uint8_t viewId = RENDERVIEW_VBLUR_0_ID + jj; bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[ii]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); bgfx::submit(viewId, s_programs.m_vBlur[depthType]); bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtBlur) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); bgfx::submit(viewId+1, s_programs.m_hBlur[depthType]); } @@ -3150,7 +3150,7 @@ public: if (m_settings.m_drawDepthBuffer) { bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[0]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID, s_programs.m_drawDepth[depthType]); @@ -3159,7 +3159,7 @@ public: for (uint8_t ii = 1; ii < m_settings.m_numSplits; ++ii) { bgfx::setTexture(4, s_shadowMap[0], bgfx::getTexture(s_rtShadowMap[ii]) ); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); bgfx::submit(RENDERVIEW_DRAWDEPTH_0_ID+ii, s_programs.m_drawDepth[depthType]); } diff --git a/examples/18-ibl/ibl.cpp b/examples/18-ibl/ibl.cpp index c2d5e002e..c93f56fc0 100644 --- a/examples/18-ibl/ibl.cpp +++ b/examples/18-ibl/ibl.cpp @@ -842,7 +842,7 @@ public: // Submit view 0. bgfx::setTexture(0, s_texCube, m_lightProbes[m_currentLightProbe].m_tex); bgfx::setTexture(1, s_texCubeIrr, m_lightProbes[m_currentLightProbe].m_texIrr); - bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A); screenSpaceQuad( (float)m_width, (float)m_height, true); m_uniforms.submit(); bgfx::submit(0, m_programSky); diff --git a/examples/19-oit/oit.cpp b/examples/19-oit/oit.cpp index 1d34144aa..034eae923 100644 --- a/examples/19-oit/oit.cpp +++ b/examples/19-oit/oit.cpp @@ -424,16 +424,16 @@ public: const uint64_t state = 0 | BGFX_STATE_CULL_CW - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_MSAA ; const uint64_t stateNoDepth = 0 | BGFX_STATE_CULL_CW - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_ALWAYS | BGFX_STATE_MSAA ; @@ -486,7 +486,7 @@ public: bgfx::setTexture(0, s_texColor0, m_fbtextures[0]); bgfx::setTexture(1, s_texColor1, m_fbtextures[1]); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_INV_SRC_ALPHA, BGFX_STATE_BLEND_SRC_ALPHA) ); screenSpaceQuad( (float)m_width, (float)m_height, s_flipV); diff --git a/examples/21-deferred/deferred.cpp b/examples/21-deferred/deferred.cpp index 57f986f77..526b0cfb1 100644 --- a/examples/21-deferred/deferred.cpp +++ b/examples/21-deferred/deferred.cpp @@ -531,9 +531,9 @@ public: // Set render states. bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_MSAA ); @@ -640,7 +640,7 @@ public: bgfx::setVertexBuffer(0, &tvb); bgfx::setIndexBuffer(&tib); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | BGFX_STATE_PT_LINES | BGFX_STATE_BLEND_ALPHA ); @@ -666,8 +666,8 @@ public: bgfx::setTexture(0, s_normal, bgfx::getTexture(m_gbuffer, 1) ); bgfx::setTexture(1, s_depth, bgfx::getTexture(m_gbuffer, 2) ); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_ADD ); screenSpaceQuad( (float)m_width, (float)m_height, s_texelHalf, m_caps->originBottomLeft); @@ -679,8 +679,8 @@ public: bgfx::setTexture(0, s_albedo, bgfx::getTexture(m_gbuffer, 0) ); bgfx::setTexture(1, s_light, bgfx::getTexture(m_lightBuffer, 0) ); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A ); screenSpaceQuad( (float)m_width, (float)m_height, s_texelHalf, m_caps->originBottomLeft); bgfx::submit(RENDER_PASS_COMBINE_ID, m_combineProgram); @@ -703,7 +703,7 @@ public: bgfx::setVertexBuffer(0, m_vbh); bgfx::setIndexBuffer(m_ibh, 0, 6); bgfx::setTexture(0, s_texColor, m_gbufferTex[ii]); - bgfx::setState(BGFX_STATE_RGB_WRITE); + bgfx::setState(BGFX_STATE_WRITE_RGB); bgfx::submit(RENDER_PASS_DEBUG_GBUFFER_ID, m_debugProgram); } } diff --git a/examples/23-vectordisplay/vectordisplay.cpp b/examples/23-vectordisplay/vectordisplay.cpp index 222c9c003..acc440661 100644 --- a/examples/23-vectordisplay/vectordisplay.cpp +++ b/examples/23-vectordisplay/vectordisplay.cpp @@ -198,8 +198,8 @@ void VectorDisplay::endFrame() bgfx::setVertexBuffer(0, m_vertexBuffers[i], 0, m_vertexBuffersSize[i]); // explicitly feed vertex number! bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_DST_ALPHA) | BGFX_STATE_BLEND_EQUATION_SEPARATE(BGFX_STATE_BLEND_EQUATION_ADD, BGFX_STATE_BLEND_EQUATION_MAX) ); @@ -229,8 +229,8 @@ void VectorDisplay::endFrame() bgfx::setViewFrameBuffer(viewCounter, m_glow0FrameBuffer); bgfx::setViewRect(viewCounter, 0, 0, m_glowWidth, m_glowHeight); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A ); params[0] = 1.0f / m_glowWidth; params[1] = 0.0f; @@ -257,8 +257,8 @@ void VectorDisplay::endFrame() bgfx::setUniform(u_params, params); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A ); bgfx::setViewName(viewCounter, "BlendPassB"); @@ -278,8 +278,8 @@ void VectorDisplay::endFrame() bgfx::setViewRect(viewCounter, 0, 0, m_screenWidth, m_screenHeight); bgfx::setTexture(0, s_texColor, bgfx::getTexture(m_sceneFrameBuffer) ); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) ); @@ -298,8 +298,8 @@ void VectorDisplay::endFrame() bgfx::setViewRect(viewCounter, 0, 0, m_screenWidth, m_screenHeight); bgfx::setTexture(0, s_texColor, bgfx::getTexture(m_glow1FrameBuffer) ); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_ONE, BGFX_STATE_BLEND_ONE) ); diff --git a/examples/24-nbody/nbody.cpp b/examples/24-nbody/nbody.cpp index ba2901e4a..d2852c08a 100644 --- a/examples/24-nbody/nbody.cpp +++ b/examples/24-nbody/nbody.cpp @@ -420,7 +420,7 @@ public: // Set render states. bgfx::setState(0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | BGFX_STATE_BLEND_ADD | BGFX_STATE_DEPTH_TEST_ALWAYS ); diff --git a/examples/28-wireframe/wireframe.cpp b/examples/28-wireframe/wireframe.cpp index aa97a8e59..e3d5c2451 100644 --- a/examples/28-wireframe/wireframe.cpp +++ b/examples/28-wireframe/wireframe.cpp @@ -475,9 +475,9 @@ public: if (DrawMode::Wireframe == m_drawMode) { uint64_t state = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA) @@ -487,10 +487,10 @@ public: else { uint64_t state = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_LESS - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_Z | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA ; diff --git a/examples/31-rsm/reflectiveshadowmap.cpp b/examples/31-rsm/reflectiveshadowmap.cpp index a99f44342..c003a7657 100644 --- a/examples/31-rsm/reflectiveshadowmap.cpp +++ b/examples/31-rsm/reflectiveshadowmap.cpp @@ -525,9 +525,9 @@ public: bgfx::setUniform(u_sphereInfo, sphereInfo); const uint64_t lightDrawState = 0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | BGFX_STATE_BLEND_ADD // <=== Overlapping lights contribute more - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_A | BGFX_STATE_CULL_CW // <=== If we go into the lights, there will be problems, so we draw the far back face. ; @@ -565,8 +565,8 @@ public: // Set up state for combine pass // point of this is to avoid doing depth test, which is in the default state bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A ); // Set up transform matrix for fullscreen quad diff --git a/examples/33-pom/pom.cpp b/examples/33-pom/pom.cpp index 1069727c1..37bc2cd41 100644 --- a/examples/33-pom/pom.cpp +++ b/examples/33-pom/pom.cpp @@ -345,9 +345,9 @@ public: // Set render states. bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_MSAA ); diff --git a/examples/36-sky/sky.cpp b/examples/36-sky/sky.cpp index c85752156..64ea1795c 100644 --- a/examples/36-sky/sky.cpp +++ b/examples/36-sky/sky.cpp @@ -393,7 +393,7 @@ namespace void draw() { - bgfx::setState(BGFX_STATE_RGB_WRITE | BGFX_STATE_DEPTH_TEST_EQUAL); + bgfx::setState(BGFX_STATE_WRITE_RGB | BGFX_STATE_DEPTH_TEST_EQUAL); bgfx::setIndexBuffer(m_ibh); bgfx::setVertexBuffer(0, m_vbh); bgfx::submit(0, m_preventBanding ? m_skyProgram_colorBandingFix : m_skyProgram); diff --git a/examples/common/bgfx_utils.cpp b/examples/common/bgfx_utils.cpp index 2850b317a..b0574af7a 100644 --- a/examples/common/bgfx_utils.cpp +++ b/examples/common/bgfx_utils.cpp @@ -552,9 +552,9 @@ struct Mesh if (BGFX_STATE_MASK == _state) { _state = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CCW | BGFX_STATE_MSAA diff --git a/examples/common/debugdraw/debugdraw.cpp b/examples/common/debugdraw/debugdraw.cpp index 9b37b4c5b..7bdc78ab1 100644 --- a/examples/common/debugdraw/debugdraw.cpp +++ b/examples/common/debugdraw/debugdraw.cpp @@ -932,10 +932,10 @@ struct DebugDraw Attrib& attrib = m_attrib[0]; attrib.m_state = 0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | (m_depthTestLess ? BGFX_STATE_DEPTH_TEST_LESS : BGFX_STATE_DEPTH_TEST_GREATER) | BGFX_STATE_CULL_CW - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_Z ; attrib.m_scale = 1.0f; attrib.m_spin = 0.0f; @@ -1068,7 +1068,7 @@ struct DebugDraw uint64_t state = m_attrib[m_stack].m_state & ~(0 | BGFX_STATE_DEPTH_TEST_MASK - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_Z | BGFX_STATE_CULL_CW | BGFX_STATE_CULL_CCW ); @@ -1079,7 +1079,7 @@ struct DebugDraw ; state |= _depthWrite - ? BGFX_STATE_DEPTH_WRITE + ? BGFX_STATE_WRITE_Z : 0 ; @@ -2131,7 +2131,7 @@ private: bgfx::setVertexBuffer(0, &tvb); bgfx::setIndexBuffer(&tib); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | BGFX_STATE_PT_LINES | attrib.m_state | BGFX_STATE_LINEAA diff --git a/examples/common/font/text_buffer_manager.cpp b/examples/common/font/text_buffer_manager.cpp index b442a811b..628ae6ddf 100644 --- a/examples/common/font/text_buffer_manager.cpp +++ b/examples/common/font/text_buffer_manager.cpp @@ -700,7 +700,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, bgfx::ViewId case FONT_TYPE_ALPHA: program = m_basicProgram; bgfx::setState(0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA) ); break; @@ -708,7 +708,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, bgfx::ViewId case FONT_TYPE_DISTANCE: program = m_distanceProgram; bgfx::setState(0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_ALPHA, BGFX_STATE_BLEND_INV_SRC_ALPHA) ); break; @@ -716,7 +716,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, bgfx::ViewId case FONT_TYPE_DISTANCE_SUBPIXEL: program = m_distanceSubpixelProgram; bgfx::setState(0 - | BGFX_STATE_RGB_WRITE + | BGFX_STATE_WRITE_RGB | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_FACTOR, BGFX_STATE_BLEND_INV_SRC_COLOR) , bc.textBuffer->getTextColor() ); diff --git a/examples/common/imgui/imgui.cpp b/examples/common/imgui/imgui.cpp index f4b6a9146..43ca7f0b0 100644 --- a/examples/common/imgui/imgui.cpp +++ b/examples/common/imgui/imgui.cpp @@ -146,8 +146,8 @@ struct OcornutImguiContext else if (0 != cmd->ElemCount) { uint64_t state = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_MSAA ; diff --git a/examples/common/nanovg/nanovg_bgfx.cpp b/examples/common/nanovg/nanovg_bgfx.cpp index f1b49d394..cf5e5a7a1 100644 --- a/examples/common/nanovg/nanovg_bgfx.cpp +++ b/examples/common/nanovg/nanovg_bgfx.cpp @@ -777,8 +777,8 @@ namespace struct GLNVGcall* call = &gl->calls[ii]; const GLNVGblend* blend = &call->blendFunc; gl->state = BGFX_STATE_BLEND_FUNC_SEPARATE(blend->srcRGB, blend->dstRGB, blend->srcAlpha, blend->dstAlpha) - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A ; switch (call->type) { diff --git a/examples/common/ps/particle_system.cpp b/examples/common/ps/particle_system.cpp index 54c10b397..58450ee1e 100644 --- a/examples/common/ps/particle_system.cpp +++ b/examples/common/ps/particle_system.cpp @@ -604,8 +604,8 @@ namespace ps BX_FREE(m_allocator, particleSort); bgfx::setState(0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_LESS | BGFX_STATE_CULL_CW | BGFX_STATE_BLEND_NORMAL diff --git a/include/bgfx/bgfx.h b/include/bgfx/bgfx.h index 005f40cf9..220b1671e 100644 --- a/include/bgfx/bgfx.h +++ b/include/bgfx/bgfx.h @@ -872,13 +872,11 @@ namespace bgfx /// /// @param[in] _state State flags. Default state for primitive type is /// triangles. See: `BGFX_STATE_DEFAULT`. - /// - `BGFX_STATE_ALPHA_WRITE` - Enable alpha write. - /// - `BGFX_STATE_DEPTH_WRITE` - Enable depth write. /// - `BGFX_STATE_DEPTH_TEST_*` - Depth test function. /// - `BGFX_STATE_BLEND_*` - See remark 1 about BGFX_STATE_BLEND_FUNC. /// - `BGFX_STATE_BLEND_EQUATION_*` - See remark 2. /// - `BGFX_STATE_CULL_*` - Backface culling mode. - /// - `BGFX_STATE_RGB_WRITE` - Enable RGB write. + /// - `BGFX_STATE_WRITE_*` - Enable R, G, B, A or Z write. /// - `BGFX_STATE_MSAA` - Enable hardware multisample antialiasing. /// - `BGFX_STATE_PT_[TRISTRIP/LINES/POINTS]` - Primitive type. /// @@ -3201,13 +3199,11 @@ namespace bgfx /// /// @param[in] _state State flags. Default state for primitive type is /// triangles. See: `BGFX_STATE_DEFAULT`. - /// - `BGFX_STATE_ALPHA_WRITE` - Enable alpha write. - /// - `BGFX_STATE_DEPTH_WRITE` - Enable depth write. /// - `BGFX_STATE_DEPTH_TEST_*` - Depth test function. /// - `BGFX_STATE_BLEND_*` - See remark 1 about BGFX_STATE_BLEND_FUNC. /// - `BGFX_STATE_BLEND_EQUATION_*` - See remark 2. /// - `BGFX_STATE_CULL_*` - Backface culling mode. - /// - `BGFX_STATE_RGB_WRITE` - Enable RGB write. + /// - `BGFX_STATE_WRITE_*` - Enable R, G, B, A or Z write. /// - `BGFX_STATE_MSAA` - Enable MSAA. /// - `BGFX_STATE_PT_[TRISTRIP/LINES/POINTS]` - Primitive type. /// diff --git a/include/bgfx/defines.h b/include/bgfx/defines.h index eb8f58c84..74a2ac70e 100644 --- a/include/bgfx/defines.h +++ b/include/bgfx/defines.h @@ -6,12 +6,28 @@ #ifndef BGFX_DEFINES_H_HEADER_GUARD #define BGFX_DEFINES_H_HEADER_GUARD -#define BGFX_API_VERSION UINT32_C(62) +#define BGFX_API_VERSION UINT32_C(63) /// Color RGB/alpha/depth write. When it's not specified write will be disabled. -#define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000000000001) //!< Enable RGB write. -#define BGFX_STATE_ALPHA_WRITE UINT64_C(0x0000000000000002) //!< Enable alpha write. -#define BGFX_STATE_DEPTH_WRITE UINT64_C(0x0000000000000004) //!< Enable depth write. +#define BGFX_STATE_WRITE_R UINT64_C(0x0000000000000001) //!< Enable R write. +#define BGFX_STATE_WRITE_G UINT64_C(0x0000000000000002) //!< Enable G write. +#define BGFX_STATE_WRITE_B UINT64_C(0x0000000000000004) //!< Enable B write. +#define BGFX_STATE_WRITE_A UINT64_C(0x0000000000000008) //!< Enable alpha write. +#define BGFX_STATE_WRITE_Z UINT64_C(0x0000004000000000) //!< Enable depth write. + +/// Enable RGB write. +#define BGFX_STATE_WRITE_RGB (0 \ + | BGFX_STATE_WRITE_R \ + | BGFX_STATE_WRITE_G \ + | BGFX_STATE_WRITE_B \ + ) + +/// Write all channels mask. +#define BGFX_STATE_WRITE_MASK (0 \ + | BGFX_STATE_WRITE_RGB \ + | BGFX_STATE_WRITE_A \ + | BGFX_STATE_WRITE_Z \ + ) /// Depth test state. When `BGFX_STATE_DEPTH_` is not specified depth test will be disabled. #define BGFX_STATE_DEPTH_TEST_LESS UINT64_C(0x0000000000000010) //!< Enable depth test, less. @@ -93,10 +109,10 @@ /// Default state is write to RGB, alpha, and depth with depth test less enabled, with clockwise /// culling and MSAA (when writing into MSAA frame buffer, otherwise this flag is ignored). #define BGFX_STATE_DEFAULT (0 \ - | BGFX_STATE_RGB_WRITE \ - | BGFX_STATE_ALPHA_WRITE \ + | BGFX_STATE_WRITE_RGB \ + | BGFX_STATE_WRITE_A \ + | BGFX_STATE_WRITE_Z \ | BGFX_STATE_DEPTH_TEST_LESS \ - | BGFX_STATE_DEPTH_WRITE \ | BGFX_STATE_CULL_CW \ | BGFX_STATE_MSAA \ ) diff --git a/src/bgfx.cpp b/src/bgfx.cpp index 9e65d50b6..b7379fc40 100644 --- a/src/bgfx.cpp +++ b/src/bgfx.cpp @@ -4465,6 +4465,38 @@ BX_STATIC_ASSERT(FLAGS_MASK_TEST(0 , BGFX_SUBMIT_RESERVED_MASK ) ); +BX_STATIC_ASSERT( (0 + | BGFX_STATE_WRITE_MASK + | BGFX_STATE_DEPTH_TEST_MASK + | BGFX_STATE_BLEND_MASK + | BGFX_STATE_BLEND_EQUATION_MASK + | BGFX_STATE_BLEND_INDEPENDENT + | BGFX_STATE_BLEND_ALPHA_TO_COVERAGE + | BGFX_STATE_CULL_MASK + | BGFX_STATE_ALPHA_REF_MASK + | BGFX_STATE_PT_MASK + | BGFX_STATE_POINT_SIZE_MASK + | BGFX_STATE_MSAA + | BGFX_STATE_LINEAA + | BGFX_STATE_CONSERVATIVE_RASTER + | BGFX_STATE_RESERVED_MASK + ) == (0 + ^ BGFX_STATE_WRITE_MASK + ^ BGFX_STATE_DEPTH_TEST_MASK + ^ BGFX_STATE_BLEND_MASK + ^ BGFX_STATE_BLEND_EQUATION_MASK + ^ BGFX_STATE_BLEND_INDEPENDENT + ^ BGFX_STATE_BLEND_ALPHA_TO_COVERAGE + ^ BGFX_STATE_CULL_MASK + ^ BGFX_STATE_ALPHA_REF_MASK + ^ BGFX_STATE_PT_MASK + ^ BGFX_STATE_POINT_SIZE_MASK + ^ BGFX_STATE_MSAA + ^ BGFX_STATE_LINEAA + ^ BGFX_STATE_CONSERVATIVE_RASTER + ^ BGFX_STATE_RESERVED_MASK + ) ); + #undef FLAGS_MASK_TEST #define BGFX_C99_ENUM_CHECK(_enum, _c99enumcount) \ diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 06818ad2a..bc32e7035 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -2380,8 +2380,8 @@ BX_PRAGMA_DIAGNOSTIC_POP(); vp.MaxDepth = 1.0f; deviceCtx->RSSetViewports(1, &vp); - uint64_t state = BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + uint64_t state = BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_ALWAYS ; @@ -3089,16 +3089,11 @@ BX_PRAGMA_DIAGNOSTIC_POP(); drt->DestBlendAlpha = s_blendFactor[dstA][1]; drt->BlendOpAlpha = s_blendEquation[equA]; - uint8_t writeMask = (_state&BGFX_STATE_ALPHA_WRITE) - ? D3D11_COLOR_WRITE_ENABLE_ALPHA - : 0 - ; - writeMask |= (_state&BGFX_STATE_RGB_WRITE) - ? D3D11_COLOR_WRITE_ENABLE_RED - | D3D11_COLOR_WRITE_ENABLE_GREEN - | D3D11_COLOR_WRITE_ENABLE_BLUE - : 0 - ; + uint8_t writeMask = 0; + writeMask |= (_state&BGFX_STATE_WRITE_R) ? D3D11_COLOR_WRITE_ENABLE_RED : 0; + writeMask |= (_state&BGFX_STATE_WRITE_G) ? D3D11_COLOR_WRITE_ENABLE_GREEN : 0; + writeMask |= (_state&BGFX_STATE_WRITE_B) ? D3D11_COLOR_WRITE_ENABLE_BLUE : 0; + writeMask |= (_state&BGFX_STATE_WRITE_A) ? D3D11_COLOR_WRITE_ENABLE_ALPHA : 0; drt->RenderTargetWriteMask = writeMask; @@ -3181,7 +3176,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); D3D11_DEPTH_STENCIL_DESC desc; bx::memSet(&desc, 0, sizeof(desc) ); desc.DepthEnable = 0 != func; - desc.DepthWriteMask = !!(BGFX_STATE_DEPTH_WRITE & _state) ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO; + desc.DepthWriteMask = !!(BGFX_STATE_WRITE_Z & _state) ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO; desc.DepthFunc = s_cmpFunc[func]; uint32_t bstencil = unpackStencil(1, _stencil); @@ -3752,8 +3747,8 @@ BX_PRAGMA_DIAGNOSTIC_POP(); ID3D11DeviceContext* deviceCtx = m_deviceCtx; uint64_t state = 0; - state |= _clear.m_flags & BGFX_CLEAR_COLOR ? BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE : 0; - state |= _clear.m_flags & BGFX_CLEAR_DEPTH ? BGFX_STATE_DEPTH_TEST_ALWAYS|BGFX_STATE_DEPTH_WRITE : 0; + state |= _clear.m_flags & BGFX_CLEAR_COLOR ? BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A : 0; + state |= _clear.m_flags & BGFX_CLEAR_DEPTH ? BGFX_STATE_DEPTH_TEST_ALWAYS|BGFX_STATE_WRITE_Z : 0; uint64_t stencil = 0; stencil |= _clear.m_flags & BGFX_CLEAR_STENCIL ? 0 diff --git a/src/renderer_d3d11.h b/src/renderer_d3d11.h index ecd6ba3d7..56e0b8f0f 100644 --- a/src/renderer_d3d11.h +++ b/src/renderer_d3d11.h @@ -47,12 +47,12 @@ BX_PRAGMA_DIAGNOSTIC_POP() | BGFX_STATE_BLEND_EQUATION_MASK \ | BGFX_STATE_BLEND_INDEPENDENT \ | BGFX_STATE_BLEND_ALPHA_TO_COVERAGE \ - | BGFX_STATE_ALPHA_WRITE \ - | BGFX_STATE_RGB_WRITE \ + | BGFX_STATE_WRITE_A \ + | BGFX_STATE_WRITE_RGB \ ) #define BGFX_D3D11_DEPTH_STENCIL_MASK (0 \ - | BGFX_STATE_DEPTH_WRITE \ + | BGFX_STATE_WRITE_Z \ | BGFX_STATE_DEPTH_TEST_MASK \ ) diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index 9dd799e41..bd7406e61 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -2008,8 +2008,8 @@ namespace bgfx { namespace d3d12 m_commandList->RSSetScissorRects(1, &rc); const uint64_t state = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_ALWAYS ; @@ -2526,16 +2526,11 @@ data.NumQualityLevels = 0; drt->BlendOpAlpha = s_blendEquation[equA]; } - uint8_t writeMask = (_state & BGFX_STATE_ALPHA_WRITE) - ? D3D12_COLOR_WRITE_ENABLE_ALPHA - : 0 - ; - writeMask |= (_state & BGFX_STATE_RGB_WRITE) - ? D3D12_COLOR_WRITE_ENABLE_RED - | D3D12_COLOR_WRITE_ENABLE_GREEN - | D3D12_COLOR_WRITE_ENABLE_BLUE - : 0 - ; + uint8_t writeMask = 0; + writeMask |= (_state & BGFX_STATE_WRITE_R) ? D3D12_COLOR_WRITE_ENABLE_RED : 0; + writeMask |= (_state & BGFX_STATE_WRITE_G) ? D3D12_COLOR_WRITE_ENABLE_GREEN : 0; + writeMask |= (_state & BGFX_STATE_WRITE_B) ? D3D12_COLOR_WRITE_ENABLE_BLUE : 0; + writeMask |= (_state & BGFX_STATE_WRITE_A) ? D3D12_COLOR_WRITE_ENABLE_ALPHA : 0; drt->LogicOp = D3D12_LOGIC_OP_CLEAR; drt->RenderTargetWriteMask = writeMask; @@ -2603,7 +2598,7 @@ data.NumQualityLevels = 0; bx::memSet(&_desc, 0, sizeof(_desc) ); uint32_t func = (_state&BGFX_STATE_DEPTH_TEST_MASK)>>BGFX_STATE_DEPTH_TEST_SHIFT; _desc.DepthEnable = 0 != func; - _desc.DepthWriteMask = !!(BGFX_STATE_DEPTH_WRITE & _state) + _desc.DepthWriteMask = !!(BGFX_STATE_WRITE_Z & _state) ? D3D12_DEPTH_WRITE_MASK_ALL : D3D12_DEPTH_WRITE_MASK_ZERO ; @@ -2759,9 +2754,9 @@ data.NumQualityLevels = 0; ProgramD3D12& program = m_program[_programIdx]; _state &= 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_MASK | BGFX_STATE_BLEND_MASK | BGFX_STATE_BLEND_EQUATION_MASK diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index 9fb3b4c62..7bd7491cd 100644 --- a/src/renderer_d3d9.cpp +++ b/src/renderer_d3d9.cpp @@ -3955,10 +3955,10 @@ namespace bgfx { namespace d3d9 if ( (0 | BGFX_STATE_CULL_MASK - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_MASK - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_MASK | BGFX_STATE_BLEND_EQUATION_MASK | BGFX_STATE_ALPHA_REF_MASK @@ -3973,9 +3973,9 @@ namespace bgfx { namespace d3d9 DX_CHECK(device->SetRenderState(D3DRS_CULLMODE, s_cullMode[cull]) ); } - if (BGFX_STATE_DEPTH_WRITE & changedFlags) + if (BGFX_STATE_WRITE_Z & changedFlags) { - DX_CHECK(device->SetRenderState(D3DRS_ZWRITEENABLE, !!(BGFX_STATE_DEPTH_WRITE & newFlags) ) ); + DX_CHECK(device->SetRenderState(D3DRS_ZWRITEENABLE, !!(BGFX_STATE_WRITE_Z & newFlags) ) ); } if (BGFX_STATE_DEPTH_TEST_MASK & changedFlags) @@ -4010,10 +4010,13 @@ namespace bgfx { namespace d3d9 DX_CHECK(m_device->SetRenderState(D3DRS_ANTIALIASEDLINEENABLE, !!(newFlags&BGFX_STATE_LINEAA) ) ); } - if ( (BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE) & changedFlags) + if ( (BGFX_STATE_WRITE_A|BGFX_STATE_WRITE_RGB) & changedFlags) { - uint32_t writeEnable = (newFlags&BGFX_STATE_ALPHA_WRITE) ? D3DCOLORWRITEENABLE_ALPHA : 0; - writeEnable |= (newFlags&BGFX_STATE_RGB_WRITE) ? D3DCOLORWRITEENABLE_RED|D3DCOLORWRITEENABLE_GREEN|D3DCOLORWRITEENABLE_BLUE : 0; + uint32_t writeEnable = 0; + writeEnable |= (newFlags&BGFX_STATE_WRITE_R) ? D3DCOLORWRITEENABLE_RED : 0; + writeEnable |= (newFlags&BGFX_STATE_WRITE_G) ? D3DCOLORWRITEENABLE_GREEN : 0; + writeEnable |= (newFlags&BGFX_STATE_WRITE_B) ? D3DCOLORWRITEENABLE_BLUE : 0; + writeEnable |= (newFlags&BGFX_STATE_WRITE_A) ? D3DCOLORWRITEENABLE_ALPHA : 0; DX_CHECK(device->SetRenderState(D3DRS_COLORWRITEENABLE, writeEnable) ); } diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index b1f2768f3..b256b3e7f 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -7009,10 +7009,10 @@ namespace bgfx { namespace gl if ( (0 | BGFX_STATE_CULL_MASK - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_MASK - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_BLEND_MASK | BGFX_STATE_BLEND_EQUATION_MASK | BGFX_STATE_ALPHA_REF_MASK @@ -7041,9 +7041,9 @@ namespace bgfx { namespace gl } } - if (BGFX_STATE_DEPTH_WRITE & changedFlags) + if (BGFX_STATE_WRITE_Z & changedFlags) { - GL_CHECK(glDepthMask(!!(BGFX_STATE_DEPTH_WRITE & newFlags) ) ); + GL_CHECK(glDepthMask(!!(BGFX_STATE_WRITE_Z & newFlags) ) ); } if (BGFX_STATE_DEPTH_TEST_MASK & changedFlags) @@ -7057,7 +7057,7 @@ namespace bgfx { namespace gl } else { - if (BGFX_STATE_DEPTH_WRITE & newFlags) + if (BGFX_STATE_WRITE_Z & newFlags) { GL_CHECK(glEnable(GL_DEPTH_TEST) ); GL_CHECK(glDepthFunc(GL_ALWAYS) ); @@ -7109,11 +7109,13 @@ namespace bgfx { namespace gl } } - if ( (BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE) & changedFlags) + if ( (BGFX_STATE_WRITE_A|BGFX_STATE_WRITE_RGB) & changedFlags) { - GLboolean alpha = !!(newFlags&BGFX_STATE_ALPHA_WRITE); - GLboolean rgb = !!(newFlags&BGFX_STATE_RGB_WRITE); - GL_CHECK(glColorMask(rgb, rgb, rgb, alpha) ); + const GLboolean rr = !!(newFlags&BGFX_STATE_WRITE_R); + const GLboolean gg = !!(newFlags&BGFX_STATE_WRITE_G); + const GLboolean bb = !!(newFlags&BGFX_STATE_WRITE_B); + const GLboolean aa = !!(newFlags&BGFX_STATE_WRITE_A); + GL_CHECK(glColorMask(rr, gg, bb, aa) ); } if ( ( (0 diff --git a/src/renderer_mtl.mm b/src/renderer_mtl.mm index 5a4ad2f4d..9977a5b3e 100644 --- a/src/renderer_mtl.mm +++ b/src/renderer_mtl.mm @@ -1051,8 +1051,8 @@ namespace bgfx { namespace mtl rce.setCullMode(MTLCullModeNone); uint64_t state = 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A | BGFX_STATE_DEPTH_TEST_ALWAYS ; @@ -1455,8 +1455,8 @@ namespace bgfx { namespace mtl uint64_t state = 0; - state |= _clear.m_flags & BGFX_CLEAR_COLOR ? BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE : 0; - state |= _clear.m_flags & BGFX_CLEAR_DEPTH ? BGFX_STATE_DEPTH_TEST_ALWAYS|BGFX_STATE_DEPTH_WRITE : 0; + state |= _clear.m_flags & BGFX_CLEAR_COLOR ? BGFX_STATE_WRITE_RGB|BGFX_STATE_WRITE_A : 0; + state |= _clear.m_flags & BGFX_CLEAR_DEPTH ? BGFX_STATE_DEPTH_TEST_ALWAYS|BGFX_STATE_WRITE_Z : 0; uint64_t stencil = 0; stencil |= _clear.m_flags & BGFX_CLEAR_STENCIL ? 0 @@ -1643,7 +1643,7 @@ namespace bgfx { namespace mtl void setDepthStencilState(uint64_t _state, uint64_t _stencil = 0) { - _state &= BGFX_STATE_DEPTH_WRITE|BGFX_STATE_DEPTH_TEST_MASK; + _state &= BGFX_STATE_WRITE_Z|BGFX_STATE_DEPTH_TEST_MASK; uint32_t fstencil = unpackStencil(0, _stencil); uint32_t ref = (fstencil&BGFX_STENCIL_FUNC_REF_MASK)>>BGFX_STENCIL_FUNC_REF_SHIFT; @@ -1661,7 +1661,7 @@ namespace bgfx { namespace mtl { DepthStencilDescriptor desc = m_depthStencilDescriptor; uint32_t func = (_state&BGFX_STATE_DEPTH_TEST_MASK)>>BGFX_STATE_DEPTH_TEST_SHIFT; - desc.depthWriteEnabled = !!(BGFX_STATE_DEPTH_WRITE & _state); + desc.depthWriteEnabled = !!(BGFX_STATE_WRITE_Z & _state); desc.depthCompareFunction = s_cmpFunc[func]; uint32_t bstencil = unpackStencil(1, _stencil); @@ -2055,7 +2055,15 @@ namespace bgfx { namespace mtl RenderPipelineState ProgramMtl::getRenderPipelineState(uint64_t _state, uint32_t _rgba, FrameBufferHandle _fbHandle, VertexDeclHandle _declHandle, uint16_t _numInstanceData) { - _state &= (BGFX_STATE_BLEND_MASK|BGFX_STATE_BLEND_EQUATION_MASK|BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE|BGFX_STATE_BLEND_INDEPENDENT|BGFX_STATE_MSAA|BGFX_STATE_BLEND_ALPHA_TO_COVERAGE); + _state &= (0 + | BGFX_STATE_BLEND_MASK + | BGFX_STATE_BLEND_EQUATION_MASK + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_BLEND_INDEPENDENT + | BGFX_STATE_MSAA + | BGFX_STATE_BLEND_ALPHA_TO_COVERAGE + ); bool independentBlendEnable = !!(BGFX_STATE_BLEND_INDEPENDENT & _state); @@ -2137,8 +2145,11 @@ namespace bgfx { namespace mtl const uint32_t equRGB = (equation )&0x7; const uint32_t equA = (equation>>3)&0x7; - uint8_t writeMask = (_state&BGFX_STATE_ALPHA_WRITE) ? MTLColorWriteMaskAlpha : 0; - writeMask |= (_state&BGFX_STATE_RGB_WRITE) ? MTLColorWriteMaskRed|MTLColorWriteMaskGreen|MTLColorWriteMaskBlue : 0; + uint8_t writeMask = 0; + writeMask |= (_state&BGFX_STATE_WRITE_R) ? MTLColorWriteMaskRed : 0; + writeMask |= (_state&BGFX_STATE_WRITE_G) ? MTLColorWriteMaskGreen : 0; + writeMask |= (_state&BGFX_STATE_WRITE_B) ? MTLColorWriteMaskBlue : 0; + writeMask |= (_state&BGFX_STATE_WRITE_A) ? MTLColorWriteMaskAlpha : 0; for (uint32_t ii = 0; ii < (independentBlendEnable ? 1 : frameBufferAttachment); ++ii) { @@ -3596,7 +3607,7 @@ namespace bgfx { namespace mtl rce.setScissorRect(rc); } - if ( (BGFX_STATE_DEPTH_WRITE|BGFX_STATE_DEPTH_TEST_MASK) & changedFlags + if ( (BGFX_STATE_WRITE_Z|BGFX_STATE_DEPTH_TEST_MASK) & changedFlags || 0 != changedStencil) { setDepthStencilState(newFlags,newStencil); @@ -3647,7 +3658,15 @@ namespace bgfx { namespace mtl rendererUpdateUniforms(this, _render->m_uniformBuffer[draw.m_uniformIdx], draw.m_uniformBegin, draw.m_uniformEnd); if (key.m_program != programIdx - || (BGFX_STATE_BLEND_MASK|BGFX_STATE_BLEND_EQUATION_MASK|BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE|BGFX_STATE_BLEND_INDEPENDENT|BGFX_STATE_MSAA|BGFX_STATE_BLEND_ALPHA_TO_COVERAGE) & changedFlags + || (0 + | BGFX_STATE_BLEND_MASK + | BGFX_STATE_BLEND_EQUATION_MASK + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_BLEND_INDEPENDENT + | BGFX_STATE_MSAA + | BGFX_STATE_BLEND_ALPHA_TO_COVERAGE + ) & changedFlags || currentState.m_streamMask != draw.m_streamMask || currentState.m_stream[0].m_handle.idx != draw.m_stream[0].m_handle.idx || currentState.m_stream[0].m_decl.idx != draw.m_stream[0].m_decl.idx diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp index b0de96e9b..9321f009d 100644 --- a/src/renderer_vk.cpp +++ b/src/renderer_vk.cpp @@ -2385,16 +2385,11 @@ VK_IMPORT_DEVICE { VkPipelineColorBlendAttachmentState* bas = const_cast(_desc.pAttachments); - uint8_t writeMask = (_state & BGFX_STATE_ALPHA_WRITE) - ? VK_COLOR_COMPONENT_A_BIT - : 0 - ; - writeMask |= (_state & BGFX_STATE_RGB_WRITE) - ? VK_COLOR_COMPONENT_R_BIT - | VK_COLOR_COMPONENT_G_BIT - | VK_COLOR_COMPONENT_B_BIT - : 0 - ; + uint8_t writeMask = 0; + writeMask |= (_state & BGFX_STATE_WRITE_R) ? VK_COLOR_COMPONENT_R_BIT : 0; + writeMask |= (_state & BGFX_STATE_WRITE_G) ? VK_COLOR_COMPONENT_G_BIT : 0; + writeMask |= (_state & BGFX_STATE_WRITE_B) ? VK_COLOR_COMPONENT_B_BIT : 0; + writeMask |= (_state & BGFX_STATE_WRITE_A) ? VK_COLOR_COMPONENT_A_BIT : 0; bas->blendEnable = !!(BGFX_STATE_BLEND_MASK & _state); @@ -2501,7 +2496,7 @@ VK_IMPORT_DEVICE _desc.pNext = NULL; _desc.flags = 0; _desc.depthTestEnable = 0 != func; - _desc.depthWriteEnable = !!(BGFX_STATE_DEPTH_WRITE & _state); + _desc.depthWriteEnable = !!(BGFX_STATE_WRITE_Z & _state); _desc.depthCompareOp = s_cmpFunc[func]; _desc.depthBoundsTestEnable = VK_FALSE; @@ -2581,9 +2576,9 @@ VK_IMPORT_DEVICE ProgramVK& program = m_program[_programIdx]; _state &= 0 - | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE - | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_WRITE_RGB + | BGFX_STATE_WRITE_A + | BGFX_STATE_WRITE_Z | BGFX_STATE_DEPTH_TEST_MASK | BGFX_STATE_BLEND_MASK | BGFX_STATE_BLEND_EQUATION_MASK diff --git a/tools/texturev/texturev.cpp b/tools/texturev/texturev.cpp index db821b803..e6c966758 100644 --- a/tools/texturev/texturev.cpp +++ b/tools/texturev/texturev.cpp @@ -1759,7 +1759,7 @@ int _main_(int _argc, char** _argv) ); bgfx::setState(0 | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_A ); bgfx::submit(BACKGROUND_VIEW_ID , textureProgram @@ -1857,7 +1857,7 @@ int _main_(int _argc, char** _argv) ); bgfx::setState(0 | BGFX_STATE_RGB_WRITE - | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_WRITE_A | (view.m_alpha ? BGFX_STATE_BLEND_ALPHA : BGFX_STATE_NONE) );