This commit is contained in:
Branimir Karadžić 2016-07-10 11:32:20 -07:00
parent 860c20686e
commit 0144de56bf

View File

@ -103,8 +103,8 @@ class ExamplePicking : public entry::AppI
m_timeOffset = bx::getHPCounter();
// Set up ID buffer, which has a color target and depth buffer
m_pickingRT = bgfx::createTexture2D(ID_DIM, ID_DIM, 1, bgfx::TextureFormat::RGBA8, 0 // Probably would be better to use unsigned format
| BGFX_TEXTURE_RT // but currently doesn't display in imgui
m_pickingRT = bgfx::createTexture2D(ID_DIM, ID_DIM, 1, bgfx::TextureFormat::RGBA8, 0
| BGFX_TEXTURE_RT
| BGFX_TEXTURE_MIN_POINT
| BGFX_TEXTURE_MAG_POINT
| BGFX_TEXTURE_MIP_POINT
@ -120,10 +120,10 @@ class ExamplePicking : public entry::AppI
| BGFX_TEXTURE_V_CLAMP
);
// CPU texture for blitting to and reading ID buffer so we can see what was clicked on
// Impossible to read directly from a render target, you *must* blit to a CPU texture first.
// Algorithm Overview:
// Render on GPU -> Blit to CPU texture -> Read from CPU texture
// CPU texture for blitting to and reading ID buffer so we can see what was clicked on.
// Impossible to read directly from a render target, you *must* blit to a CPU texture
// first. Algorithm Overview: Render on GPU -> Blit to CPU texture -> Read from CPU
// texture.
m_blitTex = bgfx::createTexture2D(ID_DIM, ID_DIM, 1, bgfx::TextureFormat::RGBA8, 0
| BGFX_TEXTURE_BLIT_DST
| BGFX_TEXTURE_READ_BACK
@ -173,7 +173,7 @@ class ExamplePicking : public entry::AppI
bool update() BX_OVERRIDE
{
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState))
if (!entry::processEvents(m_width, m_height, m_debug, m_reset, &m_mouseState) )
{
bgfx::setViewFrameBuffer(RENDER_PASS_ID, m_pickingFB);
@ -183,7 +183,7 @@ class ExamplePicking : public entry::AppI
last = now;
const double freq = double(bx::getHPFrequency());
const double toMs = 1000.0 / freq;
float time = (float)((bx::getHPCounter() - m_timeOffset) / double(bx::getHPFrequency()));
float time = (float)( (bx::getHPCounter() - m_timeOffset) / double(bx::getHPFrequency() ) );
// Use debug font to print information about this example.
bgfx::dbgTextClear();
@ -210,7 +210,7 @@ class ExamplePicking : public entry::AppI
bx::mtxProj(proj, 60.0f, float(m_width) / float(m_height), 0.1f, 100.0f);
// Set up view rect and transform for the shaded pass
bgfx::setViewRect(RENDER_PASS_SHADING, 0, 0, uint16_t(m_width), uint16_t(m_height));
bgfx::setViewRect(RENDER_PASS_SHADING, 0, 0, uint16_t(m_width), uint16_t(m_height) );
bgfx::setViewTransform(RENDER_PASS_SHADING, view, proj);
// Set up picking pass
@ -325,12 +325,14 @@ class ExamplePicking : public entry::AppI
{
amount = mapIter->second + 1;
}
ids[hashKey] = amount; // Amount of times this ID (color) has been clicked on in buffer
maxAmount = maxAmount > amount
? maxAmount
: amount
;
}
uint32_t idKey = 0;
m_highlighted = UINT32_MAX;
if (maxAmount)
@ -343,6 +345,7 @@ class ExamplePicking : public entry::AppI
break;
}
}
for (uint32_t ii = 0; ii < 12; ++ii)
{
if (m_idsU[ii] == idKey)
@ -355,7 +358,8 @@ class ExamplePicking : public entry::AppI
}
// Start a new readback?
if (!m_reading && m_mouseState.m_buttons[entry::MouseButton::Left])
if (!m_reading
&& m_mouseState.m_buttons[entry::MouseButton::Left])
{
// Blit and read
bgfx::blit(RENDER_PASS_BLIT, m_blitTex, 0, 0, m_pickingRT);