Resizing works
This commit is contained in:
parent
00f9187d74
commit
72acd42782
8 changed files with 183 additions and 43 deletions
1
Makefile
1
Makefile
|
@ -18,6 +18,7 @@ DEMO = \
|
||||||
rendertarget.cc \
|
rendertarget.cc \
|
||||||
programs.cc \
|
programs.cc \
|
||||||
camera.cc \
|
camera.cc \
|
||||||
|
demo.cc \
|
||||||
\
|
\
|
||||||
raymarcher.cc \
|
raymarcher.cc \
|
||||||
\
|
\
|
||||||
|
|
58
demo.cc
Normal file
58
demo.cc
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#include "externals.hh"
|
||||||
|
#include "demo.hh"
|
||||||
|
|
||||||
|
|
||||||
|
T_Demo::T_Demo( __rw__ T_FilesWatcher& watcher ,
|
||||||
|
__rd__ const uint32_t width ,
|
||||||
|
__rd__ const uint32_t height )
|
||||||
|
: watcher( watcher ) , width( width ) , height( height )
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
bool T_Demo::initialise( )
|
||||||
|
{
|
||||||
|
raymarcher = std::make_unique< T_Raymarcher >(
|
||||||
|
watcher , width , height );
|
||||||
|
dof = std::make_unique< T_DoFPass >( watcher ,
|
||||||
|
raymarcher->output( ) , raymarcher->depth( ) );
|
||||||
|
bloom = std::make_unique< T_BloomPass >( watcher ,
|
||||||
|
raymarcher->output( ) );
|
||||||
|
combine = std::make_unique< T_CombinePass >( watcher ,
|
||||||
|
dof->output( ) , bloom->output( ) );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void T_Demo::makeUI( )
|
||||||
|
{
|
||||||
|
raymarcher->makeUI( );
|
||||||
|
dof->makeUI( );
|
||||||
|
bloom->makeUI( );
|
||||||
|
combine->makeUI( );
|
||||||
|
}
|
||||||
|
|
||||||
|
void T_Demo::render( )
|
||||||
|
{
|
||||||
|
raymarcher->render( );
|
||||||
|
dof->render( );
|
||||||
|
bloom->render( );
|
||||||
|
combine->render( );
|
||||||
|
}
|
||||||
|
|
||||||
|
void T_Demo::handleDND(
|
||||||
|
__rd__ ImVec2 const& move ,
|
||||||
|
__rd__ const bool hasCtrl ,
|
||||||
|
__rd__ const bool hasShift ,
|
||||||
|
__rd__ const bool lmb // Left mouse button
|
||||||
|
)
|
||||||
|
{
|
||||||
|
raymarcher->camera( ).handleDND( move , hasCtrl , hasShift , lmb );
|
||||||
|
}
|
||||||
|
|
||||||
|
void T_Demo::handleWheel(
|
||||||
|
__rd__ const float wheel ,
|
||||||
|
__rd__ const bool hasCtrl ,
|
||||||
|
__rd__ const bool hasShift
|
||||||
|
)
|
||||||
|
{
|
||||||
|
raymarcher->camera( ).handleWheel( wheel , hasCtrl , hasShift );
|
||||||
|
}
|
50
demo.hh
Normal file
50
demo.hh
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "raymarcher.hh"
|
||||||
|
#include "dof.hh"
|
||||||
|
#include "bloom.hh"
|
||||||
|
#include "combine.hh"
|
||||||
|
#include "profiling.hh"
|
||||||
|
|
||||||
|
|
||||||
|
struct T_Demo
|
||||||
|
{
|
||||||
|
T_Demo( ) = delete;
|
||||||
|
NO_COPY( T_Demo );
|
||||||
|
NO_MOVE( T_Demo );
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
T_Demo( __rw__ T_FilesWatcher& watcher ,
|
||||||
|
__rd__ const uint32_t width ,
|
||||||
|
__rd__ const uint32_t height );
|
||||||
|
|
||||||
|
bool initialise( );
|
||||||
|
void makeUI( );
|
||||||
|
void render( );
|
||||||
|
|
||||||
|
void handleDND(
|
||||||
|
__rd__ ImVec2 const& move ,
|
||||||
|
__rd__ const bool hasCtrl ,
|
||||||
|
__rd__ const bool hasShift ,
|
||||||
|
__rd__ const bool lmb // Left mouse button
|
||||||
|
);
|
||||||
|
void handleWheel(
|
||||||
|
__rd__ const float wheel ,
|
||||||
|
__rd__ const bool hasCtrl ,
|
||||||
|
__rd__ const bool hasShift
|
||||||
|
);
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
T_FilesWatcher& watcher;
|
||||||
|
const uint32_t width;
|
||||||
|
const uint32_t height;
|
||||||
|
|
||||||
|
// T_TextureManagement textures;
|
||||||
|
|
||||||
|
std::unique_ptr< T_Raymarcher > raymarcher;
|
||||||
|
std::unique_ptr< T_DoFPass > dof;
|
||||||
|
std::unique_ptr< T_BloomPass > bloom;
|
||||||
|
std::unique_ptr< T_CombinePass > combine;
|
||||||
|
};
|
14
externals.hh
14
externals.hh
|
@ -31,3 +31,17 @@
|
||||||
#define __rd__
|
#define __rd__
|
||||||
#define __wr__
|
#define __wr__
|
||||||
#define __rw__
|
#define __rw__
|
||||||
|
|
||||||
|
// Macros that enable/disable copying/moving
|
||||||
|
#define NO_COPY( CLS ) \
|
||||||
|
CLS( CLS const& ) = delete; \
|
||||||
|
CLS& operator =( CLS const& ) = delete
|
||||||
|
#define NO_MOVE( CLS ) \
|
||||||
|
CLS( CLS&& ) = delete; \
|
||||||
|
CLS& operator =( CLS&& ) = delete
|
||||||
|
#define COPY( CLS ) \
|
||||||
|
CLS( CLS const& ); \
|
||||||
|
CLS& operator =( CLS const& )
|
||||||
|
#define MOVE( CLS ) \
|
||||||
|
CLS( CLS&& ); \
|
||||||
|
CLS& operator =( CLS&& )
|
||||||
|
|
77
main.cc
77
main.cc
|
@ -1,10 +1,7 @@
|
||||||
#include "externals.hh"
|
#include "externals.hh"
|
||||||
|
|
||||||
#include "imgui_impl_sdl.h"
|
#include "imgui_impl_sdl.h"
|
||||||
#include "raymarcher.hh"
|
#include "demo.hh"
|
||||||
#include "dof.hh"
|
|
||||||
#include "bloom.hh"
|
|
||||||
#include "combine.hh"
|
|
||||||
#include "profiling.hh"
|
#include "profiling.hh"
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,10 +27,9 @@ struct T_Main
|
||||||
T_FilesWatcher watcher;
|
T_FilesWatcher watcher;
|
||||||
std::unique_ptr< T_ShaderProgram > spCopy;
|
std::unique_ptr< T_ShaderProgram > spCopy;
|
||||||
|
|
||||||
std::unique_ptr< T_Raymarcher > raymarcher;
|
std::unique_ptr< T_Demo > demo;
|
||||||
std::unique_ptr< T_DoFPass > dofPass;
|
|
||||||
std::unique_ptr< T_BloomPass > bloomPass;
|
void initDemo( );
|
||||||
std::unique_ptr< T_CombinePass > combinePass;
|
|
||||||
|
|
||||||
void startIteration( );
|
void startIteration( );
|
||||||
void handleCapture( );
|
void handleCapture( );
|
||||||
|
@ -66,20 +62,22 @@ T_Main::T_Main( )
|
||||||
ImGui_ImplSdl_Init( window );
|
ImGui_ImplSdl_Init( window );
|
||||||
|
|
||||||
initProgram( );
|
initProgram( );
|
||||||
raymarcher = std::make_unique< T_Raymarcher >( watcher , 1280 , 720 );
|
|
||||||
dofPass = std::make_unique< T_DoFPass >( watcher ,
|
|
||||||
raymarcher->output( ) , raymarcher->depth( ) );
|
|
||||||
bloomPass = std::make_unique< T_BloomPass >( watcher ,
|
|
||||||
raymarcher->output( ) );
|
|
||||||
combinePass = std::make_unique< T_CombinePass >( watcher ,
|
|
||||||
dofPass->output( ) , bloomPass->output( ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void T_Main::mainLoop( )
|
void T_Main::mainLoop( )
|
||||||
{
|
{
|
||||||
auto& p( T_Profiler::Profiler );
|
auto& p( T_Profiler::Profiler );
|
||||||
p.clear( );
|
|
||||||
while ( !done ) {
|
while ( !done ) {
|
||||||
|
if ( demo ) {
|
||||||
|
auto const& dspSize( ImGui::GetIO( ).DisplaySize );
|
||||||
|
if ( demo->width != dspSize.x || demo->height != dspSize.y ) {
|
||||||
|
demo.reset( );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( !demo ) {
|
||||||
|
initDemo( );
|
||||||
|
}
|
||||||
|
|
||||||
p.startFrame( );
|
p.startFrame( );
|
||||||
T_Profiler::Profiler.start( "Full frame" );
|
T_Profiler::Profiler.start( "Full frame" );
|
||||||
startIteration( );
|
startIteration( );
|
||||||
|
@ -97,6 +95,7 @@ void T_Main::mainLoop( )
|
||||||
|
|
||||||
T_Main::~T_Main( )
|
T_Main::~T_Main( )
|
||||||
{
|
{
|
||||||
|
demo.reset( );
|
||||||
ImGui_ImplSdl_Shutdown( );
|
ImGui_ImplSdl_Shutdown( );
|
||||||
SDL_GL_DeleteContext( gl );
|
SDL_GL_DeleteContext( gl );
|
||||||
SDL_DestroyWindow( window );
|
SDL_DestroyWindow( window );
|
||||||
|
@ -105,6 +104,23 @@ T_Main::~T_Main( )
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
void T_Main::initDemo( )
|
||||||
|
{
|
||||||
|
assert( !demo );
|
||||||
|
auto const& dspSize( ImGui::GetIO( ).DisplaySize );
|
||||||
|
if ( dspSize.x < 0 || dspSize.y < 0 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf( "init w/ dspsize %dx%d\n" , int( dspSize.x ) , int( dspSize.y ) );
|
||||||
|
demo = std::make_unique< T_Demo >( watcher , dspSize.x , dspSize.y );
|
||||||
|
if ( demo->initialise( ) ) {
|
||||||
|
T_Profiler::Profiler.clear( );
|
||||||
|
} else {
|
||||||
|
demo.reset( );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void T_Main::startIteration( )
|
void T_Main::startIteration( )
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
|
@ -147,7 +163,9 @@ void T_Main::handleCapture( )
|
||||||
ImGui::SetMouseCursor( ImGuiMouseCursor_Arrow );
|
ImGui::SetMouseCursor( ImGuiMouseCursor_Arrow );
|
||||||
} else if ( capture ) {
|
} else if ( capture ) {
|
||||||
ImGui::SetMouseCursor( ImGuiMouseCursor_Move );
|
ImGui::SetMouseCursor( ImGuiMouseCursor_Move );
|
||||||
raymarcher->camera( ).handleDND( mouseMove , ctrl , shift , lmb );
|
if ( demo ) {
|
||||||
|
demo->handleDND( mouseMove , ctrl , shift , lmb );
|
||||||
|
}
|
||||||
} else if ( appCanGrab && mb ) {
|
} else if ( appCanGrab && mb ) {
|
||||||
capture = true;
|
capture = true;
|
||||||
mouseInitial = ImGui::GetMousePos( );
|
mouseInitial = ImGui::GetMousePos( );
|
||||||
|
@ -156,8 +174,8 @@ void T_Main::handleCapture( )
|
||||||
ImGui::SetMouseCursor( ImGuiMouseCursor_Move );
|
ImGui::SetMouseCursor( ImGuiMouseCursor_Move );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ( appCanGrab || capture ) && io.MouseWheel ) {
|
if ( ( appCanGrab || capture ) && io.MouseWheel && demo ) {
|
||||||
raymarcher->camera( ).handleWheel( io.MouseWheel , ctrl , shift );
|
demo->handleWheel( io.MouseWheel , ctrl , shift );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,13 +186,10 @@ void T_Main::makeUI( )
|
||||||
ImGuiSetCond_Once );
|
ImGuiSetCond_Once );
|
||||||
ImGui::SetNextWindowPos( ImVec2( ) , ImGuiSetCond_Once );
|
ImGui::SetNextWindowPos( ImVec2( ) , ImGuiSetCond_Once );
|
||||||
ImGui::Begin( "Yay! Demo!" );
|
ImGui::Begin( "Yay! Demo!" );
|
||||||
|
|
||||||
ImGui::Checkbox( "Profiler" , &T_Profiler::Profiler.uiEnabled( ) );
|
ImGui::Checkbox( "Profiler" , &T_Profiler::Profiler.uiEnabled( ) );
|
||||||
raymarcher->makeUI( );
|
if ( demo ) {
|
||||||
dofPass->makeUI( );
|
demo->makeUI( );
|
||||||
bloomPass->makeUI( );
|
}
|
||||||
combinePass->makeUI( );
|
|
||||||
|
|
||||||
ImGui::End( );
|
ImGui::End( );
|
||||||
|
|
||||||
T_Profiler::Profiler.makeUI( );
|
T_Profiler::Profiler.makeUI( );
|
||||||
|
@ -182,13 +197,11 @@ void T_Main::makeUI( )
|
||||||
|
|
||||||
void T_Main::render( )
|
void T_Main::render( )
|
||||||
{
|
{
|
||||||
T_Profiler::Profiler.start( "Render" );
|
if ( demo ) {
|
||||||
raymarcher->render( );
|
T_Profiler::Profiler.start( "Render" );
|
||||||
dofPass->render( );
|
demo->render( );
|
||||||
bloomPass->render( );
|
glFinish( ); T_Profiler::Profiler.end( "Render" );
|
||||||
combinePass->render( );
|
}
|
||||||
glFinish( ); T_Profiler::Profiler.end( "Render" );
|
|
||||||
|
|
||||||
glUseProgram( 0 );
|
glUseProgram( 0 );
|
||||||
ImGui::Render( );
|
ImGui::Render( );
|
||||||
}
|
}
|
||||||
|
|
10
texture.cc
10
texture.cc
|
@ -75,7 +75,7 @@ T_Texture::T_Texture(
|
||||||
assert( w && h );
|
assert( w && h );
|
||||||
}
|
}
|
||||||
|
|
||||||
GL_CHECK( );
|
GL_ASSERT( );
|
||||||
}
|
}
|
||||||
|
|
||||||
T_Texture::~T_Texture( )
|
T_Texture::~T_Texture( )
|
||||||
|
@ -131,7 +131,7 @@ T_Texture& T_Texture::wrap(
|
||||||
T_TextureSampler::T_TextureSampler( )
|
T_TextureSampler::T_TextureSampler( )
|
||||||
{
|
{
|
||||||
glGenSamplers( 1 , &id_ );
|
glGenSamplers( 1 , &id_ );
|
||||||
GL_CHECK( );
|
GL_ASSERT( );
|
||||||
}
|
}
|
||||||
|
|
||||||
T_TextureSampler::T_TextureSampler(
|
T_TextureSampler::T_TextureSampler(
|
||||||
|
@ -204,7 +204,7 @@ T_TextureSampler& T_TextureSampler::wrap(
|
||||||
}
|
}
|
||||||
glSamplerParameteri( id_ , GL_TEXTURE_WRAP_S , gm );
|
glSamplerParameteri( id_ , GL_TEXTURE_WRAP_S , gm );
|
||||||
glSamplerParameteri( id_ , GL_TEXTURE_WRAP_T , gm );
|
glSamplerParameteri( id_ , GL_TEXTURE_WRAP_T , gm );
|
||||||
GL_CHECK( );
|
GL_ASSERT( );
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ T_TextureSampler& T_TextureSampler::lod(
|
||||||
{
|
{
|
||||||
glSamplerParameterf( id_ , GL_TEXTURE_MIN_LOD , min );
|
glSamplerParameterf( id_ , GL_TEXTURE_MIN_LOD , min );
|
||||||
glSamplerParameterf( id_ , GL_TEXTURE_MAX_LOD , max );
|
glSamplerParameterf( id_ , GL_TEXTURE_MAX_LOD , max );
|
||||||
GL_CHECK( );
|
GL_ASSERT( );
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ void T_TextureSampler::setSamplingMode( ) const
|
||||||
|
|
||||||
glSamplerParameteri( id_ , GL_TEXTURE_MIN_FILTER , min );
|
glSamplerParameteri( id_ , GL_TEXTURE_MIN_FILTER , min );
|
||||||
glSamplerParameteri( id_ , GL_TEXTURE_MAG_FILTER , max );
|
glSamplerParameteri( id_ , GL_TEXTURE_MAG_FILTER , max );
|
||||||
GL_CHECK( );
|
GL_ASSERT( );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -129,6 +129,7 @@ struct T_TextureManagement
|
||||||
{
|
{
|
||||||
static constexpr uint32_t MaxUnits = 8;
|
static constexpr uint32_t MaxUnits = 8;
|
||||||
|
|
||||||
|
T_TextureManagement( ) = default;
|
||||||
T_TextureManagement( T_TextureManagement const& ) = delete;
|
T_TextureManagement( T_TextureManagement const& ) = delete;
|
||||||
T_TextureManagement( T_TextureManagement&& ) = delete;
|
T_TextureManagement( T_TextureManagement&& ) = delete;
|
||||||
|
|
||||||
|
|
15
utilities.hh
15
utilities.hh
|
@ -15,16 +15,19 @@ inline void reenableButtons( )
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#define GL_CHECK( ) \
|
#define GL_CHECK( FAIL ) \
|
||||||
do { \
|
do { \
|
||||||
auto err_( glGetError( ) ); \
|
auto err_( glGetError( ) ); \
|
||||||
if ( err_ != GL_NO_ERROR ) { \
|
if ( err_ != GL_NO_ERROR ) FAIL; \
|
||||||
fprintf( stderr , "GL error %x in %s:%d\n" , \
|
|
||||||
err_ , __FILE__ , __LINE__ ); \
|
|
||||||
abort( ); \
|
|
||||||
} \
|
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
|
#define GL_ASSERT( ) \
|
||||||
|
GL_CHECK({ \
|
||||||
|
fprintf( stderr , "GL error %x in %s:%d\n" , \
|
||||||
|
err_ , __FILE__ , __LINE__ ); \
|
||||||
|
abort( ); \
|
||||||
|
})
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// Add some value to an angle, keeping it in [-180;180]
|
// Add some value to an angle, keeping it in [-180;180]
|
||||||
|
|
Loading…
Reference in a new issue