summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/tools/texturev/texturev.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/tools/texturev/texturev.cpp')
-rw-r--r--3rdparty/bgfx/tools/texturev/texturev.cpp105
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();