Output debugger - Use built-in shaders
This commit is contained in:
parent
8e73f81ecd
commit
d846fac3f6
11 changed files with 96 additions and 33 deletions
29
Makefile
29
Makefile
|
@ -12,7 +12,14 @@ BUILDER_LIBS = $(LIBEBCL) -latomic
|
|||
TOOL_LIBS = $(shell sdl2-config --libs) -lGL -lGLEW -ldl $(BUILDER_LIBS)
|
||||
|
||||
|
||||
FILEDUMPS =
|
||||
BUILTIN_SHADERS = \
|
||||
copy \
|
||||
dbg-alpha \
|
||||
dbg-depth-linear \
|
||||
dbg-depth-reinhard \
|
||||
dbg-reinhard \
|
||||
fullscreen \
|
||||
# END BUILTIN_SHADERS
|
||||
|
||||
IMGUI = imgui.cpp imgui_draw.cpp
|
||||
|
||||
|
@ -60,6 +67,9 @@ BUILDER = \
|
|||
# END BUILDER
|
||||
|
||||
|
||||
BUILTIN_SHADERS_SRC = $(addprefix toolshaders/, $(addsuffix .glsl, $(BUILTIN_SHADERS)))
|
||||
BUILTIN_SHADERS_H = $(addprefix $(OUTDIR)/bs-, $(addsuffix .inl, $(BUILTIN_SHADERS)))
|
||||
|
||||
IMGUI_OBJS = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(basename $(IMGUI))))
|
||||
COMMON_OBJS = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(basename $(COMMON))))
|
||||
TOOL_OBJS = $(addprefix $(OUTDIR)/, $(addsuffix .o, $(basename $(TOOL))))
|
||||
|
@ -91,7 +101,7 @@ tourista-builder: $(LIBEBCL) $(BUILDER_BUILD)
|
|||
$(BUILDER_BUILD) $(BUILDER_LIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(ALL_OBJS) $(FILEDUMPS) tourista tourista-builder $(PCH) $(OUTDIR)/font-awesome.inl
|
||||
rm -f $(ALL_OBJS) $(BUILTIN_SHADERS_H) tourista tourista-builder $(PCH) $(OUTDIR)/font-awesome.inl
|
||||
|
||||
depclean: clean
|
||||
rm -f $(ALL_DEPS)
|
||||
|
@ -103,10 +113,6 @@ fullclean: depclean
|
|||
.PHONY: all clean fullclean
|
||||
|
||||
|
||||
$(FILEDUMPS): fd-%.h: %
|
||||
xxd -i $< $@
|
||||
|
||||
|
||||
outdir:
|
||||
@if ! [ -d "$(OUTDIR)" ]; then mkdir "$(OUTDIR)"; fi
|
||||
.PHONY: outdir
|
||||
|
@ -119,21 +125,21 @@ $(IMGUI_OBJS): $(OUTDIR)/%.o: 3rdparty/imgui/%.cpp | outdir
|
|||
#-------------------------------------------------------------------------------
|
||||
|
||||
-include $(DEMO_DEPS)
|
||||
$(TOOL_OBJS): $(OUTDIR)/%.o: %.cc $(PCH) | outdir $(FILEDUMPS)
|
||||
$(TOOL_OBJS): $(OUTDIR)/%.o: %.cc $(PCH) | outdir $(BUILTIN_SHADERS_H)
|
||||
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
|
||||
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -M -MF $(@:%.o=%.d) -MT $@ $<
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
-include $(COMMON_DEPS)
|
||||
$(COMMON_OBJS): $(OUTDIR)/%.o: %.cc $(PCH) | outdir $(FILEDUMPS)
|
||||
$(COMMON_OBJS): $(OUTDIR)/%.o: %.cc $(PCH) | outdir
|
||||
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
|
||||
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -M -MF $(@:%.o=%.d) -MT $@ $<
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
-include $(BUILDER_DEPS)
|
||||
$(BUILDER_OBJS): $(OUTDIR)/%.o: %.cc $(PCH) | outdir $(FILEDUMPS)
|
||||
$(BUILDER_OBJS): $(OUTDIR)/%.o: %.cc $(PCH) | outdir
|
||||
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<
|
||||
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -M -MF $(@:%.o=%.d) -MT $@ $<
|
||||
|
||||
|
@ -147,6 +153,11 @@ $(PCH): externals.hh
|
|||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
$(BUILTIN_SHADERS_H): $(OUTDIR)/bs-%.inl: toolshaders/%.glsl | outdir
|
||||
xxd -i < $< > $@
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
$(OUTDIR)/ui-app.o: ui-app.cc $(OUTDIR)/font-awesome.inl
|
||||
|
||||
$(OUTDIR)/font-awesome.inl: 3rdparty/font-awesome/fonts/fontawesome-webfont.ttf $(OUTDIR)/font-to-c
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
#version 450 core
|
||||
|
||||
//! type fragment
|
||||
|
||||
layout( location = 0 ) uniform sampler2D u_InputTexture;
|
||||
layout( location = 1 ) uniform int u_LOD;
|
||||
layout( location = 2 ) uniform vec2 u_OutputSize;
|
|
@ -1,7 +1,5 @@
|
|||
#version 450 core
|
||||
|
||||
//! type fragment
|
||||
|
||||
layout( location = 0 ) uniform sampler2D u_InputTexture;
|
||||
layout( location = 1 ) uniform int u_LOD;
|
||||
layout( location = 2 ) uniform vec2 u_OutputSize;
|
|
@ -1,7 +1,5 @@
|
|||
#version 450 core
|
||||
|
||||
//! type fragment
|
||||
|
||||
layout( location = 0 ) uniform sampler2D u_InputTexture;
|
||||
layout( location = 1 ) uniform int u_LOD;
|
||||
layout( location = 2 ) uniform vec2 u_OutputSize;
|
|
@ -1,7 +1,5 @@
|
|||
#version 450 core
|
||||
|
||||
//! type fragment
|
||||
|
||||
layout( location = 0 ) uniform sampler2D u_InputTexture;
|
||||
layout( location = 1 ) uniform int u_LOD;
|
||||
layout( location = 2 ) uniform vec2 u_OutputSize;
|
|
@ -1,7 +1,5 @@
|
|||
#version 450 core
|
||||
|
||||
//! type fragment
|
||||
|
||||
layout( location = 0 ) uniform sampler2D u_InputTexture;
|
||||
layout( location = 1 ) uniform int u_LOD;
|
||||
layout( location = 2 ) uniform vec2 u_OutputSize;
|
2
toolshaders/fullscreen.glsl
Normal file
2
toolshaders/fullscreen.glsl
Normal file
|
@ -0,0 +1,2 @@
|
|||
#version 450 core
|
||||
out gl_PerVertex{vec4 gl_Position;}; void main(){gl_Position=vec4(vec2(gl_VertexID>>1,gl_VertexID&1)*2-1,0,1);}
|
61
ui-odbg.cc
61
ui-odbg.cc
|
@ -4,7 +4,36 @@
|
|||
|
||||
namespace {
|
||||
|
||||
char const NormalOutput_[] = "(DISABLED)";
|
||||
const char NormalOutput_[] = "(DISABLED)";
|
||||
|
||||
const char ShdAlpha_[] = {
|
||||
# include "bs-dbg-alpha.inl"
|
||||
, 0
|
||||
};
|
||||
const char ShdReinhard_[] = {
|
||||
# include "bs-dbg-reinhard.inl"
|
||||
, 0
|
||||
};
|
||||
const char ShdDepthLinear_[] = {
|
||||
# include "bs-dbg-depth-linear.inl"
|
||||
, 0
|
||||
};
|
||||
const char ShdDepthReinhard_[] = {
|
||||
# include "bs-dbg-depth-reinhard.inl"
|
||||
, 0
|
||||
};
|
||||
|
||||
struct T_DebugShaders_
|
||||
{
|
||||
char const* name;
|
||||
char const* source;
|
||||
};
|
||||
const T_DebugShaders_ Shaders_[] = {
|
||||
{ "*dbg-alpha" , ShdAlpha_ } ,
|
||||
{ "*dbg-depth-linear" , ShdDepthLinear_ } ,
|
||||
{ "*dbg-depth-reinhard" , ShdDepthReinhard_ } ,
|
||||
{ "*dbg-reinhard" , ShdReinhard_ } ,
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
@ -14,17 +43,25 @@ namespace {
|
|||
T_OutputDebugger::T_OutputDebugger( )
|
||||
: selectorItems_( nullptr )
|
||||
{
|
||||
T_ShaderProgram programs[ IM_ARRAYSIZE( Shaders_ ) ];
|
||||
for ( auto i = 0 ; i < IM_ARRAYSIZE( Shaders_ ) ; i ++ ) {
|
||||
programs[ i ] = UI::Shaders( ).program(
|
||||
Shaders_[ i ].name ,
|
||||
E_ShaderType::FRAGMENT ,
|
||||
Shaders_[ i ].source );
|
||||
}
|
||||
|
||||
using namespace ebcl;
|
||||
registerSubmode( E_ODbgMode::LDR , "Colors" , "copy" );
|
||||
registerSubmode( E_ODbgMode::LDR_ALPHA , "Colors" , "copy" );
|
||||
registerSubmode( E_ODbgMode::LDR_ALPHA , "Alpha channel" , "alpha-channel" );
|
||||
registerSubmode( E_ODbgMode::HDR , "Colors (raw)" , "copy" );
|
||||
registerSubmode( E_ODbgMode::HDR , "Colors (Reinhart)" , "reinhart" );
|
||||
registerSubmode( E_ODbgMode::DEPTH , "Depth (linear / 10)" , "depth-linear" ,
|
||||
registerSubmode( E_ODbgMode::LDR , "Colors" , "*copy" );
|
||||
registerSubmode( E_ODbgMode::LDR_ALPHA , "Colors" , "*copy" );
|
||||
registerSubmode( E_ODbgMode::LDR_ALPHA , "Alpha channel" , "*dbg-alpha" );
|
||||
registerSubmode( E_ODbgMode::HDR , "Colors (raw)" , "*copy" );
|
||||
registerSubmode( E_ODbgMode::HDR , "Colors (Reinhard)" , "*dbg-reinhard" );
|
||||
registerSubmode( E_ODbgMode::DEPTH , "Depth (linear / 10)" , "*dbg-depth-linear" ,
|
||||
[]( uint32_t id ) { glProgramUniform1f( id , 3 , .1 ); } );
|
||||
registerSubmode( E_ODbgMode::DEPTH , "Depth (linear / 100)" , "depth-linear" ,
|
||||
registerSubmode( E_ODbgMode::DEPTH , "Depth (linear / 100)" , "*dbg-depth-linear" ,
|
||||
[]( uint32_t id ) { glProgramUniform1f( id , 3 , .01 ); } );
|
||||
registerSubmode( E_ODbgMode::DEPTH , "Depth (Reinhart)" , "depth-reinhart" );
|
||||
registerSubmode( E_ODbgMode::DEPTH , "Depth (Reinhard)" , "*dbg-depth-reinhard" );
|
||||
initSubmodeCombo( );
|
||||
}
|
||||
|
||||
|
@ -130,16 +167,14 @@ void T_OutputDebugger::debugOutput( )
|
|||
void T_OutputDebugger::registerSubmode(
|
||||
const E_ODbgMode mode ,
|
||||
T_String const& name ,
|
||||
T_String const& shader ,
|
||||
char const* const shader ,
|
||||
F_SubmodeSetup setup )
|
||||
{
|
||||
assert( mode != E_ODbgMode::__COUNT__ );
|
||||
ebcl::T_StringBuilder sb( "debug/" );
|
||||
sb << shader << ".glsl" << '\0';
|
||||
submodes_[ int( mode ) ].add( T_Submode_{
|
||||
name ,
|
||||
UI::Shaders( ).pipeline({
|
||||
"fullscreen.v.glsl" , sb.data( ) }) ,
|
||||
"*fullscreen" , shader }) ,
|
||||
setup
|
||||
} );
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ struct T_OutputDebugger
|
|||
void registerSubmode(
|
||||
const E_ODbgMode mode ,
|
||||
T_String const& name ,
|
||||
T_String const& shader ,
|
||||
char const* shader ,
|
||||
F_SubmodeSetup setup = F_SubmodeSetup( ) );
|
||||
void initSubmodeCombo( );
|
||||
|
||||
|
|
22
ui.cc
22
ui.cc
|
@ -11,12 +11,28 @@
|
|||
|
||||
namespace {
|
||||
|
||||
const char FullscreenShader_[] = {
|
||||
# include "bs-fullscreen.inl"
|
||||
, 0
|
||||
};
|
||||
|
||||
const char CopyShader_[] = {
|
||||
# include "bs-copy.inl"
|
||||
, 0
|
||||
};
|
||||
|
||||
struct UIData_
|
||||
{
|
||||
T_UIApp window;
|
||||
T_Profiler profiler;
|
||||
T_TextureManager textures;
|
||||
T_ShaderManager shaders;
|
||||
T_ShaderProgram fsShader{
|
||||
shaders.program( "*fullscreen" , E_ShaderType::VERTEX , FullscreenShader_ )
|
||||
};
|
||||
T_ShaderProgram copyShader{
|
||||
shaders.program( "*copy" , E_ShaderType::FRAGMENT , CopyShader_ )
|
||||
};
|
||||
T_OutputDebugger odbg;
|
||||
T_UISync sync;
|
||||
};
|
||||
|
@ -55,6 +71,12 @@ T_TextureManager& UI::Textures( ) noexcept
|
|||
T_ShaderManager& UI::Shaders( ) noexcept
|
||||
{ return M_GET_( shaders ); }
|
||||
|
||||
T_ShaderProgram& UI::FullscreenShader( ) noexcept
|
||||
{ return M_GET_( fsShader ); }
|
||||
|
||||
T_ShaderProgram& UI::CopyShader( ) noexcept
|
||||
{ return M_GET_( copyShader ); }
|
||||
|
||||
T_OutputDebugger& UI::ODbg( ) noexcept
|
||||
{ return M_GET_( odbg ); }
|
||||
|
||||
|
|
3
ui.hh
3
ui.hh
|
@ -6,6 +6,7 @@
|
|||
struct T_OutputDebugger;
|
||||
struct T_Profiler;
|
||||
struct T_ShaderManager;
|
||||
struct T_ShaderProgram;
|
||||
struct T_TextureManager;
|
||||
struct T_UIApp;
|
||||
struct T_UISync;
|
||||
|
@ -21,6 +22,8 @@ struct UI
|
|||
static T_Profiler& Profiler( ) noexcept;
|
||||
static T_TextureManager& Textures( ) noexcept;
|
||||
static T_ShaderManager& Shaders( ) noexcept;
|
||||
static T_ShaderProgram& FullscreenShader( ) noexcept;
|
||||
static T_ShaderProgram& CopyShader( ) noexcept;
|
||||
static T_OutputDebugger& ODbg( ) noexcept;
|
||||
static T_UISync& Sync( ) noexcept;
|
||||
|
||||
|
|
Loading…
Reference in a new issue