diff --git a/examples/38-bloom/bloom.cpp b/examples/38-bloom/bloom.cpp index d5a0336e0..804587d4e 100644 --- a/examples/38-bloom/bloom.cpp +++ b/examples/38-bloom/bloom.cpp @@ -264,7 +264,6 @@ public: for (int ii = 0; ii < TEX_CHAIN_LEN; ++ii) { m_texChainFb[ii] = BGFX_INVALID_HANDLE; - m_texChainTex[ii] = BGFX_INVALID_HANDLE; } // Imgui. @@ -402,21 +401,18 @@ public: const float dim = float(1 << ii); - m_texChainTex[ii] = bgfx::createTexture2D( + m_texChainFb[ii] = bgfx::createFrameBuffer( (uint16_t)(m_width / dim) , (uint16_t)(m_height / dim) - , false - , 1 , bgfx::TextureFormat::RGBA32F , tsFlags ); - m_texChainFb[ii] = bgfx::createFrameBuffer(1, &m_texChainTex[ii], true); } bgfx::TextureHandle gbufferTex[] = { bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::RGBA32F, tsFlags), - m_texChainTex[0], + bgfx::getTexture(m_texChainFb[0]), bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::D24S8, tsFlags), }; @@ -424,17 +420,17 @@ public: } ImGui::SetNextWindowPos( - ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f) + ImVec2(m_width - m_width / 5.0f - 10.0f, 10.0f) , ImGuiCond_FirstUseEver - ); + ); ImGui::SetNextWindowSize( - ImVec2(m_width / 5.0f, m_height / 6.0f) + ImVec2(m_width / 5.0f, m_height / 6.0f) , ImGuiCond_FirstUseEver - ); + ); ImGui::Begin("Settings" , NULL , 0 - ); + ); ImGui::SliderFloat("intensity", &m_intensity, 0.0f, 3.0f); @@ -497,12 +493,12 @@ public: const uint32_t kNum = 9; const int kNumColors = 5; const float color[4*kNumColors] = - { - 0.0f, 1.0f, 0.0f, 1.0f, - 1.0f, 0.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f, 1.0f, - 1.0f, 0.0f, 1.0f, 1.0f, - 0.0f, 1.0f, 1.0f, 1.0f, + { // Palette: http://www.colourlovers.com/palette/3647908/RGB_Ice_Cream + 0.847f*0.2f, 0.365f*0.2f, 0.408f*0.2f, 1.0f, + 0.976f*0.2f, 0.827f*0.2f, 0.533f*0.2f, 1.0f, + 0.533f*0.2f, 0.867f*0.2f, 0.741f*0.2f, 1.0f, + 0.894f*0.2f, 0.620f*0.2f, 0.416f*0.2f, 1.0f, + 0.584f*0.2f, 0.788f*0.2f, 0.882f*0.2f, 1.0f, }; // Render a whole bunch of colored cubes to the g-buffer. @@ -554,7 +550,7 @@ public: }; bgfx::setUniform(u_pixelSize, pixelSize); - bgfx::setTexture(0, s_tex, m_texChainTex[ii]); + bgfx::setTexture(0, s_tex, bgfx::getTexture(m_texChainFb[ii]) ); bgfx::setState(0 | BGFX_STATE_WRITE_RGB @@ -583,7 +579,7 @@ public: bgfx::setUniform(u_intensity, intensity); // Combine color and light buffers. - bgfx::setTexture(0, s_tex, m_texChainTex[TEX_CHAIN_LEN - 1 - ii]); + bgfx::setTexture(0, s_tex, bgfx::getTexture(m_texChainFb[TEX_CHAIN_LEN - 1 - ii]) ); // As we upscale, we also sum with the previous mip level. We do this by alpha blending. bgfx::setState(0 @@ -598,7 +594,7 @@ public: // Do final pass, that combines the bloom with the g-buffer. bgfx::setTexture(0, s_albedo, bgfx::getTexture(m_gbuffer, 0) ); - bgfx::setTexture(1, s_light, m_texChainTex[0]); + bgfx::setTexture(1, s_light, bgfx::getTexture(m_texChainFb[0]) ); bgfx::setState(0 | BGFX_STATE_WRITE_RGB | BGFX_STATE_WRITE_A @@ -639,9 +635,7 @@ public: bgfx::ProgramHandle m_combineProgram; bgfx::FrameBufferHandle m_gbuffer; - bgfx::FrameBufferHandle m_texChainFb[TEX_CHAIN_LEN]; - bgfx::TextureHandle m_texChainTex[TEX_CHAIN_LEN]; uint32_t m_width; uint32_t m_height; diff --git a/examples/38-bloom/fs_upsample.sc b/examples/38-bloom/fs_upsample.sc index 20237dfac..54ac70a61 100644 --- a/examples/38-bloom/fs_upsample.sc +++ b/examples/38-bloom/fs_upsample.sc @@ -14,22 +14,22 @@ uniform vec4 u_intensity; void main() { - vec2 halfpixel = 1.0 * vec2(u_pixelSize.x, u_pixelSize.y); - vec2 uv = v_texcoord0.xy; + vec2 halfpixel = u_pixelSize.xy; + vec2 uv = v_texcoord0.xy; - vec4 sum = vec4(0.0, 0.0, 0.0, 0.0); + vec4 sum = vec4_splat(0.0); - sum += (2.0 / 16.0) * texture2D(s_tex, uv + vec2(-halfpixel.x , 0.0)); - sum += (2.0 / 16.0) * texture2D(s_tex, uv + vec2(0.0, halfpixel.y)); - sum += (2.0 / 16.0) * texture2D(s_tex, uv + vec2(halfpixel.x , 0.0)); - sum += (2.0 / 16.0) * texture2D(s_tex, uv + vec2(0.0, -halfpixel.y)); + sum += (2.0 / 16.0) * texture2D(s_tex, uv + vec2(-halfpixel.x, 0.0) ); + sum += (2.0 / 16.0) * texture2D(s_tex, uv + vec2( 0.0, halfpixel.y) ); + sum += (2.0 / 16.0) * texture2D(s_tex, uv + vec2( halfpixel.x, 0.0) ); + sum += (2.0 / 16.0) * texture2D(s_tex, uv + vec2( 0.0, -halfpixel.y) ); - sum += (1.0 / 16.0) * texture2D(s_tex, uv + vec2(-halfpixel.x, -halfpixel.y)); - sum += (1.0 / 16.0) * texture2D(s_tex, uv + vec2(-halfpixel.x, halfpixel.y)); - sum += (1.0 / 16.0) * texture2D(s_tex, uv + vec2(halfpixel.x, -halfpixel.y)); - sum += (1.0 / 16.0) * texture2D(s_tex, uv + vec2(halfpixel.x, halfpixel.y)); + sum += (1.0 / 16.0) * texture2D(s_tex, uv + vec2(-halfpixel.x, -halfpixel.y) ); + sum += (1.0 / 16.0) * texture2D(s_tex, uv + vec2(-halfpixel.x, halfpixel.y) ); + sum += (1.0 / 16.0) * texture2D(s_tex, uv + vec2( halfpixel.x, -halfpixel.y) ); + sum += (1.0 / 16.0) * texture2D(s_tex, uv + vec2( halfpixel.x, halfpixel.y) ); - sum += (4.0 / 16.0) * texture2D(s_tex, uv); + sum += (4.0 / 16.0) * texture2D(s_tex, uv); - gl_FragColor.xyzw = u_intensity.x * sum; + gl_FragColor = u_intensity.x * sum; } diff --git a/examples/runtime/shaders/essl/fs_upsample.bin b/examples/runtime/shaders/essl/fs_upsample.bin index 37f454f9a..01c22c33a 100644 Binary files a/examples/runtime/shaders/essl/fs_upsample.bin and b/examples/runtime/shaders/essl/fs_upsample.bin differ diff --git a/examples/runtime/shaders/glsl/fs_upsample.bin b/examples/runtime/shaders/glsl/fs_upsample.bin index 6195fc97a..dfb1acc2f 100644 Binary files a/examples/runtime/shaders/glsl/fs_upsample.bin and b/examples/runtime/shaders/glsl/fs_upsample.bin differ diff --git a/examples/runtime/shaders/metal/fs_upsample.bin b/examples/runtime/shaders/metal/fs_upsample.bin index ae10db847..69cf6e346 100644 Binary files a/examples/runtime/shaders/metal/fs_upsample.bin and b/examples/runtime/shaders/metal/fs_upsample.bin differ