diff options
Diffstat (limited to '3rdparty/bgfx/tools/texturev/texturev.cpp')
-rw-r--r-- | 3rdparty/bgfx/tools/texturev/texturev.cpp | 105 |
1 files changed, 83 insertions, 22 deletions
diff --git a/3rdparty/bgfx/tools/texturev/texturev.cpp b/3rdparty/bgfx/tools/texturev/texturev.cpp index faa10220d2f..0ea30e59c88 100644 --- a/3rdparty/bgfx/tools/texturev/texturev.cpp +++ b/3rdparty/bgfx/tools/texturev/texturev.cpp @@ -19,6 +19,7 @@ #include "vs_texture.bin.h" #include "fs_texture.bin.h" +#include "fs_texture_array.bin.h" #include "vs_texture_cube.bin.h" #include "fs_texture_cube.bin.h" @@ -82,6 +83,9 @@ static const InputBinding s_bindingView[] = { entry::Key::PageUp, entry::Modifier::None, 1, NULL, "view file-pgup" }, { entry::Key::PageDown, entry::Modifier::None, 1, NULL, "view file-pgdown" }, + { entry::Key::Left, entry::Modifier::None, 1, NULL, "view layer prev" }, + { entry::Key::Right, entry::Modifier::None, 1, NULL, "view layer next" }, + { entry::Key::KeyR, entry::Modifier::None, 1, NULL, "view rgb r" }, { entry::Key::KeyG, entry::Modifier::None, 1, NULL, "view rgb g" }, { entry::Key::KeyB, entry::Modifier::None, 1, NULL, "view rgb b" }, @@ -112,6 +116,7 @@ struct View : m_fileIndex(0) , m_scaleFn(0) , m_mip(0) + , m_layer(0) , m_abgr(UINT32_MAX) , m_zoom(1.0f) , m_filter(true) @@ -156,6 +161,35 @@ struct View m_mip = 0; } } + if (0 == strcmp(_argv[1], "layer") ) + { + if (_argc >= 3) + { + uint32_t layer = m_layer; + if (0 == strcmp(_argv[2], "next") ) + { + ++layer; + } + else if (0 == strcmp(_argv[2], "prev") ) + { + --layer; + } + else if (0 == strcmp(_argv[2], "last") ) + { + layer = INT32_MAX; + } + else + { + layer = atoi(_argv[2]); + } + + m_layer = bx::uint32_iclamp(layer, 0, m_info.numLayers-1); + } + else + { + m_layer = 0; + } + } else if (0 == strcmp(_argv[1], "zoom") ) { if (_argc >= 3) @@ -296,6 +330,7 @@ struct View uint32_t m_fileIndex; uint32_t m_scaleFn; uint32_t m_mip; + uint32_t m_layer; uint32_t m_abgr; float m_zoom; bool m_filter; @@ -522,7 +557,7 @@ void associate() bx::Error err; if (bx::open(&writer, temp, false, &err) ) { - bx::write(&writer, str.c_str(), str.length(), &err); + bx::write(&writer, str.c_str(), uint32_t(str.length()), &err); bx::close(&writer); if (err.isOk() ) @@ -553,7 +588,7 @@ void associate() bx::Error err; if (bx::open(&writer, "/tmp/texturev.sh", false, &err) ) { - bx::write(&writer, str.c_str(), str.length(), &err); + bx::write(&writer, str.c_str(), uint32_t(str.length()), &err); bx::close(&writer); if (err.isOk() ) @@ -611,37 +646,53 @@ int _main_(int _argc, char** _argv) const bgfx::Memory* vs_texture; const bgfx::Memory* fs_texture; + const bgfx::Memory* fs_texture_array; const bgfx::Memory* vs_texture_cube; const bgfx::Memory* fs_texture_cube; switch (bgfx::getRendererType()) { case bgfx::RendererType::Direct3D9: - vs_texture = bgfx::makeRef(vs_texture_dx9, sizeof(vs_texture_dx9) ); - fs_texture = bgfx::makeRef(fs_texture_dx9, sizeof(fs_texture_dx9) ); - vs_texture_cube = bgfx::makeRef(vs_texture_cube_dx9, sizeof(vs_texture_cube_dx9) ); - fs_texture_cube = bgfx::makeRef(fs_texture_cube_dx9, sizeof(fs_texture_cube_dx9) ); + vs_texture = bgfx::makeRef(vs_texture_dx9, sizeof(vs_texture_dx9) ); + fs_texture = bgfx::makeRef(fs_texture_dx9, sizeof(fs_texture_dx9) ); + fs_texture_array = NULL; + vs_texture_cube = bgfx::makeRef(vs_texture_cube_dx9, sizeof(vs_texture_cube_dx9) ); + fs_texture_cube = bgfx::makeRef(fs_texture_cube_dx9, sizeof(fs_texture_cube_dx9) ); break; case bgfx::RendererType::Direct3D11: case bgfx::RendererType::Direct3D12: - vs_texture = bgfx::makeRef(vs_texture_dx11, sizeof(vs_texture_dx11) ); - fs_texture = bgfx::makeRef(fs_texture_dx11, sizeof(fs_texture_dx11) ); - vs_texture_cube = bgfx::makeRef(vs_texture_cube_dx11, sizeof(vs_texture_cube_dx11) ); - fs_texture_cube = bgfx::makeRef(fs_texture_cube_dx11, sizeof(fs_texture_cube_dx11) ); + vs_texture = bgfx::makeRef(vs_texture_dx11, sizeof(vs_texture_dx11) ); + fs_texture = bgfx::makeRef(fs_texture_dx11, sizeof(fs_texture_dx11) ); + fs_texture_array = bgfx::makeRef(fs_texture_array_dx11, sizeof(fs_texture_dx11) ); + vs_texture_cube = bgfx::makeRef(vs_texture_cube_dx11, sizeof(vs_texture_cube_dx11) ); + fs_texture_cube = bgfx::makeRef(fs_texture_cube_dx11, sizeof(fs_texture_cube_dx11) ); break; default: - vs_texture = bgfx::makeRef(vs_texture_glsl, sizeof(vs_texture_glsl) ); - fs_texture = bgfx::makeRef(fs_texture_glsl, sizeof(fs_texture_glsl) ); - vs_texture_cube = bgfx::makeRef(vs_texture_cube_glsl, sizeof(vs_texture_cube_glsl) ); - fs_texture_cube = bgfx::makeRef(fs_texture_cube_glsl, sizeof(fs_texture_cube_glsl) ); + vs_texture = bgfx::makeRef(vs_texture_glsl, sizeof(vs_texture_glsl) ); + fs_texture = bgfx::makeRef(fs_texture_glsl, sizeof(fs_texture_glsl) ); + fs_texture_array = bgfx::makeRef(fs_texture_array_glsl, sizeof(fs_texture_array_glsl) ); + fs_texture = bgfx::makeRef(fs_texture_glsl, sizeof(fs_texture_glsl) ); + vs_texture_cube = bgfx::makeRef(vs_texture_cube_glsl, sizeof(vs_texture_cube_glsl) ); + fs_texture_cube = bgfx::makeRef(fs_texture_cube_glsl, sizeof(fs_texture_cube_glsl) ); break; } + bgfx::ShaderHandle vsTexture = bgfx::createShader(vs_texture); + bgfx::ShaderHandle fsTexture = bgfx::createShader(fs_texture); + bgfx::ProgramHandle textureProgram = bgfx::createProgram( - bgfx::createShader(vs_texture) - , bgfx::createShader(fs_texture) + vsTexture + , fsTexture + , true + ); + + bgfx::ProgramHandle textureArrayProgram = bgfx::createProgram( + vsTexture + , NULL != fs_texture_array + ? bgfx::createShader(fs_texture_array) + : fsTexture , true ); @@ -658,9 +709,10 @@ int _main_(int _argc, char** _argv) float speed = 0.37f; float time = 0.0f; - Interpolator mip(0.0); - Interpolator zoom(1.0); - Interpolator scale(1.0); + Interpolator mip(0.0f); + Interpolator layer(0.0f); + Interpolator zoom(1.0f); + Interpolator scale(1.0f); const char* filePath = _argc < 2 ? "" : _argv[1]; bool directory = false; @@ -750,6 +802,10 @@ int _main_(int _argc, char** _argv) ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "/"); ImGui::SameLine(64); ImGui::Text("Toggle linear/point texture sampling."); ImGui::NextLine(); + ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "left"); ImGui::SameLine(64); ImGui::Text("Previous layer in texture array."); + ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "right"); ImGui::SameLine(64); ImGui::Text("Next layer in texture array."); + ImGui::NextLine(); + ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "up"); ImGui::SameLine(64); ImGui::Text("Previous texture."); ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "down"); ImGui::SameLine(64); ImGui::Text("Next texture."); ImGui::NextLine(); @@ -849,9 +905,10 @@ int _main_(int _argc, char** _argv) bx::mtxRotateXY(mtx, 0.0f, time); bgfx::setUniform(u_mtx, mtx); - mip.set( float(view.m_mip), 0.5f); + mip.set(float(view.m_mip), 0.5f); + layer.set(float(view.m_layer), 0.25f); - float params[4] = { mip.getValue(), 0.0f, 0.0f, 0.0f }; + float params[4] = { mip.getValue(), layer.getValue(), 0.0f, 0.0f }; bgfx::setUniform(u_params, params); bgfx::setTexture(0 @@ -869,7 +926,10 @@ int _main_(int _argc, char** _argv) | BGFX_STATE_ALPHA_WRITE | (view.m_alpha ? BGFX_STATE_BLEND_ALPHA : BGFX_STATE_NONE) ); - bgfx::submit(0, view.m_info.cubeMap ? textureCubeProgram : textureProgram); + bgfx::submit(0, view.m_info.cubeMap ? textureCubeProgram + : 1 < view.m_info.numLayers ? textureArrayProgram + : textureProgram + ); bgfx::frame(); } @@ -883,6 +943,7 @@ int _main_(int _argc, char** _argv) bgfx::destroyUniform(u_mtx); bgfx::destroyUniform(u_params); bgfx::destroyProgram(textureProgram); + bgfx::destroyProgram(textureArrayProgram); bgfx::destroyProgram(textureCubeProgram); imguiDestroy(); |