01-cubes: Added primitive topology combo box.

This commit is contained in:
Branimir Karadžić 2018-06-07 21:23:09 -07:00
parent fe40cd4126
commit 1f5220a931

View File

@ -75,6 +75,43 @@ static const uint16_t s_cubeTriStrip[] =
5,
};
static const uint16_t s_cubeLineList[] =
{
0, 1,
0, 2,
0, 4,
1, 3,
1, 5,
2, 3,
2, 6,
3, 7,
4, 5,
4, 6,
5, 7,
6, 7,
};
static const uint16_t s_cubePoints[] =
{
0, 1, 2, 3, 4, 5, 6, 7
};
static const char* s_ptNames[]
{
"Triangle List",
"Triangle Strip",
"Lines",
"Points",
};
static const uint64_t s_ptState[]
{
BGFX_STATE_PT_TRISTRIP,
UINT64_C(0),
BGFX_STATE_PT_LINES,
BGFX_STATE_PT_POINTS,
};
class ExampleCubes : public entry::AppI
{
public:
@ -89,8 +126,6 @@ public:
void init(int32_t _argc, const char* const* _argv, uint32_t _width, uint32_t _height) override
{
BX_UNUSED(s_cubeTriList, s_cubeTriStrip);
Args args(_argc, _argv);
m_width = _width;
@ -111,27 +146,45 @@ public:
// Set view 0 clear state.
bgfx::setViewClear(0
, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
, 0x303030ff
, 1.0f
, 0
);
, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
, 0x303030ff
, 1.0f
, 0
);
// Create vertex stream declaration.
PosColorVertex::init();
// Create static vertex buffer.
m_vbh = bgfx::createVertexBuffer(
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
, PosColorVertex::ms_decl
);
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) )
, PosColorVertex::ms_decl
);
// Create static index buffer.
m_ibh = bgfx::createIndexBuffer(
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_cubeTriStrip, sizeof(s_cubeTriStrip) )
);
// Create static index buffer for triangle strip rendering.
m_ibh[0] = bgfx::createIndexBuffer(
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_cubeTriStrip, sizeof(s_cubeTriStrip) )
);
// Create static index buffer for triangle list rendering.
m_ibh[1] = bgfx::createIndexBuffer(
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_cubeTriList, sizeof(s_cubeTriList) )
);
// Create static index buffer for triangle list rendering.
m_ibh[2] = bgfx::createIndexBuffer(
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_cubeLineList, sizeof(s_cubeLineList) )
);
// Create static index buffer for triangle list rendering.
m_ibh[3] = bgfx::createIndexBuffer(
// Static data can be passed with bgfx::makeRef
bgfx::makeRef(s_cubePoints, sizeof(s_cubePoints) )
);
// Create program from shaders.
m_program = loadProgram("vs_cubes", "fs_cubes");
@ -146,7 +199,11 @@ public:
imguiDestroy();
// Cleanup.
bgfx::destroy(m_ibh);
for (uint32_t ii = 0; ii < BX_COUNTOF(m_ibh); ++ii)
{
bgfx::destroy(m_ibh[ii]);
}
bgfx::destroy(m_vbh);
bgfx::destroy(m_program);
@ -177,7 +234,7 @@ public:
, ImGuiCond_FirstUseEver
);
ImGui::SetNextWindowSize(
ImVec2(m_width / 5.0f, m_height / 4.0f)
ImVec2(m_width / 5.0f, m_height / 3.5f)
, ImGuiCond_FirstUseEver
);
ImGui::Begin("Settings"
@ -190,6 +247,9 @@ public:
ImGui::Checkbox("Write B", &m_b);
ImGui::Checkbox("Write A", &m_a);
ImGui::Text("Primitive topology:");
ImGui::Combo("", (int*)&m_pt, s_ptNames, BX_COUNTOF(s_ptNames) );
ImGui::End();
imguiEndFrame();
@ -230,6 +290,19 @@ public:
// if no other draw calls are submitted to view 0.
bgfx::touch(0);
bgfx::IndexBufferHandle ibh = m_ibh[m_pt];
uint64_t state = 0
| (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
| s_ptState[m_pt]
;
// Submit 11x11 cubes.
for (uint32_t yy = 0; yy < 11; ++yy)
{
@ -246,20 +319,10 @@ public:
// Set vertex and index buffer.
bgfx::setVertexBuffer(0, m_vbh);
bgfx::setIndexBuffer(m_ibh);
bgfx::setIndexBuffer(ibh);
// Set render states.
bgfx::setState(0
| (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
);
bgfx::setState(state);
// Submit primitive for rendering to view 0.
bgfx::submit(0, m_program);
@ -283,9 +346,10 @@ public:
uint32_t m_debug;
uint32_t m_reset;
bgfx::VertexBufferHandle m_vbh;
bgfx::IndexBufferHandle m_ibh;
bgfx::IndexBufferHandle m_ibh[4];
bgfx::ProgramHandle m_program;
int64_t m_timeOffset;
int32_t m_pt;
bool m_r;
bool m_g;