diff options
Diffstat (limited to '3rdparty/bgfx/examples/38-bloom/bloom.cpp')
-rw-r--r-- | 3rdparty/bgfx/examples/38-bloom/bloom.cpp | 92 |
1 files changed, 47 insertions, 45 deletions
diff --git a/3rdparty/bgfx/examples/38-bloom/bloom.cpp b/3rdparty/bgfx/examples/38-bloom/bloom.cpp index 1de0111ca9b..99dcb730730 100644 --- a/3rdparty/bgfx/examples/38-bloom/bloom.cpp +++ b/3rdparty/bgfx/examples/38-bloom/bloom.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2018 Eric Arnebäck. All rights reserved. - * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause + * Copyright 2018 Eric Arnebäck. All rights reserved. + * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE */ /* @@ -13,7 +13,6 @@ #include "bgfx_utils.h" #include "imgui/imgui.h" #include "camera.h" -#include "bounds.h" namespace { @@ -43,16 +42,16 @@ struct PosVertex static void init() { - ms_decl + ms_layout .begin() .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float) .end(); } - static bgfx::VertexDecl ms_decl; + static bgfx::VertexLayout ms_layout; }; -bgfx::VertexDecl PosVertex::ms_decl; +bgfx::VertexLayout PosVertex::ms_layout; struct PosTexCoord0Vertex { @@ -64,17 +63,17 @@ struct PosTexCoord0Vertex static void init() { - ms_decl + ms_layout .begin() .add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float) .add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float) .end(); } - static bgfx::VertexDecl ms_decl; + static bgfx::VertexLayout ms_layout; }; -bgfx::VertexDecl PosTexCoord0Vertex::ms_decl; +bgfx::VertexLayout PosTexCoord0Vertex::ms_layout; constexpr float cs = 0.29f; @@ -126,10 +125,10 @@ static const uint16_t s_cubeIndices[36] = void screenSpaceQuad(float _textureWidth, float _textureHeight, float _texelHalf, bool _originBottomLeft, float _width = 1.0f, float _height = 1.0f) { - if (3 == bgfx::getAvailTransientVertexBuffer(3, PosTexCoord0Vertex::ms_decl) ) + if (3 == bgfx::getAvailTransientVertexBuffer(3, PosTexCoord0Vertex::ms_layout) ) { bgfx::TransientVertexBuffer vb; - bgfx::allocTransientVertexBuffer(&vb, 3, PosTexCoord0Vertex::ms_decl); + bgfx::allocTransientVertexBuffer(&vb, 3, PosTexCoord0Vertex::ms_layout); PosTexCoord0Vertex* vertex = (PosTexCoord0Vertex*)vb.data; const float minx = -_width; @@ -179,11 +178,11 @@ void screenSpaceQuad(float _textureWidth, float _textureHeight, float _texelHalf } } -class ExampleDeferred : public entry::AppI +class ExampleBloom : public entry::AppI { public: - ExampleDeferred(const char* _name, const char* _description) - : entry::AppI(_name, _description) + ExampleBloom(const char* _name, const char* _description, const char* _url) + : entry::AppI(_name, _description, _url) { } @@ -197,9 +196,11 @@ public: m_reset = BGFX_RESET_VSYNC; bgfx::Init init; - init.type = args.m_type; init.vendorId = args.m_pciId; + init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); + init.platformData.ndt = entry::getNativeDisplayHandle(); + init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle); init.resolution.width = m_width; init.resolution.height = m_height; init.resolution.reset = m_reset; @@ -238,15 +239,15 @@ public: // Create static vertex buffer. m_vbh = bgfx::createVertexBuffer( bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) ) - , PosVertex::ms_decl + , PosVertex::ms_layout ); m_ibh = bgfx::createIndexBuffer(bgfx::makeRef(s_cubeIndices, sizeof(s_cubeIndices) ) ); - s_albedo = bgfx::createUniform("s_albedo", bgfx::UniformType::Int1); - s_tex = bgfx::createUniform("s_tex", bgfx::UniformType::Int1); - s_depth = bgfx::createUniform("s_depth", bgfx::UniformType::Int1); - s_light = bgfx::createUniform("s_light", bgfx::UniformType::Int1); + s_albedo = bgfx::createUniform("s_albedo", bgfx::UniformType::Sampler); + s_tex = bgfx::createUniform("s_tex", bgfx::UniformType::Sampler); + s_depth = bgfx::createUniform("s_depth", bgfx::UniformType::Sampler); + s_light = bgfx::createUniform("s_light", bgfx::UniformType::Sampler); u_pixelSize = bgfx::createUniform("u_pixelSize", bgfx::UniformType::Vec4); u_intensity = bgfx::createUniform("u_intensity", bgfx::UniformType::Vec4); u_color = bgfx::createUniform("u_color", bgfx::UniformType::Vec4); @@ -283,8 +284,7 @@ public: cameraCreate(); - const float initialPos[3] = { 0.0f, 0.0f, -15.0f }; - cameraSetPosition(initialPos); + cameraSetPosition({ 0.0f, 0.0f, -15.0f }); cameraSetVerticalAngle(0.0f); } @@ -398,11 +398,9 @@ public: bgfx::destroy(m_texChainFb[ii]); } - const float dim = float(1 << ii); - m_texChainFb[ii] = bgfx::createFrameBuffer( - (uint16_t)(m_width / dim) - , (uint16_t)(m_height / dim) + (uint16_t)(m_width >> ii) + , (uint16_t)(m_height >> ii) , bgfx::TextureFormat::RGBA32F , tsFlags ); @@ -412,7 +410,7 @@ public: { bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::RGBA32F, tsFlags), bgfx::getTexture(m_texChainFb[0]), - bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::D24S8, tsFlags), + bgfx::createTexture2D(uint16_t(m_width), uint16_t(m_height), false, 1, bgfx::TextureFormat::D32F, tsFlags), }; m_gbuffer = bgfx::createFrameBuffer(BX_COUNTOF(gbufferTex), gbufferTex, true); @@ -436,7 +434,7 @@ public: ImGui::End(); // Update camera. - cameraUpdate(deltaTime, m_mouseState); + cameraUpdate(deltaTime, m_mouseState, ImGui::MouseOverArea() ); float view[16]; cameraGetViewMtx(view); @@ -448,21 +446,19 @@ public: for (uint16_t ii = 0; ii < TEX_CHAIN_LEN-1; ++ii) { - const float dim = float(1 << (ii + 1) ); - + const uint16_t shift = ii + 1; bgfx::setViewRect(RENDER_PASS_DOWNSAMPLE0_ID + ii, 0, 0 - , uint16_t(m_width / dim) - , uint16_t(m_height / dim) + , uint16_t(m_width >> shift) + , uint16_t(m_height >> shift) ); } for (uint16_t ii = 0; ii < TEX_CHAIN_LEN-1; ++ii) { - const float dim = float(1 << (TEX_CHAIN_LEN - ii - 2) ); - + const uint16_t shift = TEX_CHAIN_LEN - ii - 2; bgfx::setViewRect(RENDER_PASS_UPSAMPLE0_ID + ii, 0, 0 - , uint16_t(m_width / dim) - , uint16_t(m_height / dim) + , uint16_t(m_width >> shift) + , uint16_t(m_height >> shift) ); } @@ -492,7 +488,9 @@ public: const uint32_t kNum = 9; const int kNumColors = 5; const float color[4*kNumColors] = - { // Palette: http://www.colourlovers.com/palette/3647908/RGB_Ice_Cream + { // Reference(s): + // - Palette + // https://web.archive.org/web/20180219034657/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, @@ -539,11 +537,11 @@ public: // Now downsample. for (uint16_t ii = 0; ii < TEX_CHAIN_LEN-1; ++ii) { - const float dim = float(1 << (ii + 1) ); + const uint16_t shift = ii + 1; const float pixelSize[4] = { - 1.0f / (m_width / dim), - 1.0f / (m_height / dim), + 1.0f / (float)(m_width >> shift), + 1.0f / (float)(m_height >> shift), 0.0f, 0.0f, }; @@ -563,12 +561,11 @@ public: // Now upsample. for (uint16_t ii = 0; ii < TEX_CHAIN_LEN - 1; ++ii) { - const float dim = float(1 << (TEX_CHAIN_LEN - 2 - ii) ); - + const uint16_t shift = TEX_CHAIN_LEN - 2 - ii; const float pixelSize[4] = { - 1.0f / (float)(m_width / dim), - 1.0f / (float)(m_height / dim), + 1.0f / (float)(m_width >> shift), + 1.0f / (float)(m_height >> shift), 0.0f, 0.0f, }; @@ -657,4 +654,9 @@ public: } // namespace -ENTRY_IMPLEMENT_MAIN(ExampleDeferred, "38-bloom", "Bloom."); +ENTRY_IMPLEMENT_MAIN( + ExampleBloom + , "38-bloom" + , "Bloom." + , "https://bkaradzic.github.io/bgfx/examples.html#bloom" + ); |