#pragma once #include "texture.hh" #include "shaders.hh" enum class E_ODbgMode { LDR , LDR_ALPHA , HDR , DEPTH , __COUNT__ }; struct T_OutputDebugger { friend struct T_Texture; T_OutputDebugger( ); NO_COPY( T_OutputDebugger ); NO_MOVE( T_OutputDebugger ); ~T_OutputDebugger( ); void registerTexture( __rw__ T_Texture& texture , __rd__ const E_ODbgMode mode , __rd__ std::string const& name ); bool& uiEnabled( ) { return enabled_; } void makeUI( ); bool isActive( ) const { return selected_ != -1; } void debugOutput( ); private: struct T_Texture_ { GLuint id; uint32_t levels; E_ODbgMode mode; std::string name; // int submode; int lod; }; using F_SubmodeSetup = std::function< void( GLuint ) >; struct T_Submode_ { std::string name; T_ShaderPipeline pipeline; F_SubmodeSetup setup; }; bool enabled_ = false; uint32_t nRegistered_ = 0; T_Array< T_Texture_ > outputs_; T_Array< T_Submode_ > submodes_[ int( E_ODbgMode::__COUNT__ ) ]; char* smCombo_[ int( E_ODbgMode::__COUNT__ ) ]; int32_t selected_ = -1; char* selectorItems_; T_Array< int32_t > selectorMapping_; void registerSubmode( __rd__ const E_ODbgMode mode , __rd__ std::string const& name , __rd__ std::string const& shader , __rd__ F_SubmodeSetup setup = F_SubmodeSetup( ) ); void initSubmodeCombo( ); int32_t registerTexture( __rd__ const GLuint id , __rd__ const uint32_t levels , __rd__ const E_ODbgMode mode , __rd__ std::string const& name ); void unregisterTexture( __rd__ const uint32_t index ); void makeSelectorItems( ); void clearSelectorItems( ); };