From 36b71e8e30fb07947a4e36966880370bccbf8c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sat, 28 Mar 2015 11:55:49 -0700 Subject: [PATCH] 08-update: Check for 3D texture support. --- examples/08-update/update.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/examples/08-update/update.cpp b/examples/08-update/update.cpp index d87371aeb..21322eb92 100644 --- a/examples/08-update/update.cpp +++ b/examples/08-update/update.cpp @@ -167,12 +167,18 @@ int _main_(int /*_argc*/, char** /*_argv*/) } } - bgfx::TextureHandle textures3d[] = + const bgfx::Caps* caps = bgfx::getCaps(); + const bool texture3DSupported = !!(caps->supported & BGFX_CAPS_TEXTURE_3D); + + uint32_t numTextures3d = 0; + bgfx::TextureHandle textures3d[3] = {}; + + if (texture3DSupported) { - bgfx::createTexture3D(32, 32, 32, 0, bgfx::TextureFormat::R8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem8), - bgfx::createTexture3D(32, 32, 32, 0, bgfx::TextureFormat::R16F, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem16f), - bgfx::createTexture3D(32, 32, 32, 0, bgfx::TextureFormat::R32F, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem32f), - }; + textures3d[numTextures3d++] = bgfx::createTexture3D(32, 32, 32, 0, bgfx::TextureFormat::R8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem8); + textures3d[numTextures3d++] = bgfx::createTexture3D(32, 32, 32, 0, bgfx::TextureFormat::R16F, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem16f); + textures3d[numTextures3d++] = bgfx::createTexture3D(32, 32, 32, 0, bgfx::TextureFormat::R32F, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_W_CLAMP, mem32f); + } // Create static vertex buffer. bgfx::VertexBufferHandle vbh = bgfx::createVertexBuffer(bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) ), PosTexcoordVertex::ms_decl); @@ -188,7 +194,11 @@ int _main_(int /*_argc*/, char** /*_argv*/) bgfx::ProgramHandle program = loadProgram("vs_update", "fs_update"); bgfx::ProgramHandle programCmp = loadProgram("vs_update", "fs_update_cmp"); - bgfx::ProgramHandle program3d = loadProgram("vs_update", "fs_update_3d"); + bgfx::ProgramHandle program3d = BGFX_INVALID_HANDLE; + if (texture3DSupported) + { + program3d = loadProgram("vs_update", "fs_update_3d"); + } const uint32_t textureSide = 2048; @@ -399,7 +409,7 @@ int _main_(int /*_argc*/, char** /*_argv*/) bgfx::submit(1); } - for (uint32_t ii = 0; ii < BX_COUNTOF(textures3d); ++ii) + for (uint32_t ii = 0; ii < numTextures3d; ++ii) { bx::mtxTranslate(mtx, xpos + ii*2.1f, -4.0f, 0.0f); @@ -465,7 +475,7 @@ int _main_(int /*_argc*/, char** /*_argv*/) bgfx::destroyTexture(textures[ii]); } - for (uint32_t ii = 0; ii < BX_COUNTOF(textures3d); ++ii) + for (uint32_t ii = 0; ii < numTextures3d; ++ii) { bgfx::destroyTexture(textures3d[ii]); }