From 0650aa11d26f2033e47c72748a843b432667b51f Mon Sep 17 00:00:00 2001 From: Matthew Bellew Date: Thu, 17 May 2018 14:34:48 -0700 Subject: [PATCH 1/2] fix responsiveness of SDL app --- src/projectM-sdl/pmSDL.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/projectM-sdl/pmSDL.cpp b/src/projectM-sdl/pmSDL.cpp index 0c171f1d8..4bece7d2d 100644 --- a/src/projectM-sdl/pmSDL.cpp +++ b/src/projectM-sdl/pmSDL.cpp @@ -188,21 +188,23 @@ void projectMSDL::resize(unsigned int width_, unsigned int height_) { void projectMSDL::pollEvent() { SDL_Event evt; - SDL_PollEvent(&evt); - switch (evt.type) { - case SDL_WINDOWEVENT: - switch (evt.window.event) { - case SDL_WINDOWEVENT_RESIZED: - resize(evt.window.data1, evt.window.data2); - break; - } - break; - case SDL_KEYDOWN: - keyHandler(&evt); - break; - case SDL_QUIT: - done = true; - break; + while (SDL_PollEvent(&evt)) + { + switch (evt.type) { + case SDL_WINDOWEVENT: + switch (evt.window.event) { + case SDL_WINDOWEVENT_RESIZED: + resize(evt.window.data1, evt.window.data2); + break; + } + break; + case SDL_KEYDOWN: + keyHandler(&evt); + break; + case SDL_QUIT: + done = true; + break; + } } } From a9874619a64f2809cae68c50ba8bf287a27a26e3 Mon Sep 17 00:00:00 2001 From: Matthew Bellew Date: Thu, 17 May 2018 14:49:45 -0700 Subject: [PATCH 2/2] move matrix_flag check back to eval time --- .../MilkdropPresetFactory/Expr.cpp | 74 +++++++++---------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/src/libprojectM/MilkdropPresetFactory/Expr.cpp b/src/libprojectM/MilkdropPresetFactory/Expr.cpp index ef8a23f12..5eed87954 100755 --- a/src/libprojectM/MilkdropPresetFactory/Expr.cpp +++ b/src/libprojectM/MilkdropPresetFactory/Expr.cpp @@ -104,7 +104,7 @@ protected: Term term; public: ParameterExpr( int _type, Term *_term ) : Expr(PARAMETER), term(*_term) {} - float eval(int mesh_i, int mesh_j ); + float eval(int mesh_i, int mesh_j ) = 0; std::ostream& to_string(std::ostream& out) { out << term.param->name; @@ -116,56 +116,57 @@ class BoolParameterExpr : public ParameterExpr { public: BoolParameterExpr( int _type, Term *_term ) : ParameterExpr(_type,_term) {} - float eval ( int mesh_i, int mesh_j ) { return ( float ) ( * ( ( bool* ) ( term.param->engine_val ) ) ); } + float eval ( int mesh_i, int mesh_j ) + { + assert( term.param->type == P_TYPE_BOOL ); + return ( float ) ( * ( ( bool* ) ( term.param->engine_val ) ) ); + } }; class IntParameterExpr : public ParameterExpr { public: IntParameterExpr( int _type, Term *_term ) : ParameterExpr(_type,_term) {} - float eval ( int mesh_i, int mesh_j ) { return ( float ) ( * ( ( int* ) ( term.param->engine_val ) ) ); } + float eval ( int mesh_i, int mesh_j ) + { + assert( term.param->type == P_TYPE_INT ); + return ( float ) ( * ( ( int* ) ( term.param->engine_val ) ) ); + } }; class FloatParameterExpr : public ParameterExpr { public: FloatParameterExpr( int _type, Term *_term ) : ParameterExpr(_type,_term) {} - float eval ( int mesh_i, int mesh_j ) { return ( * ( ( float* ) ( term.param->engine_val ) ) ); } + float eval ( int mesh_i, int mesh_j ); }; - -/* Evaluates a value expression */ -float ParameterExpr::eval ( int mesh_i, int mesh_j ) +/* TODO optimize FloatParameterExpr::eval() further. +// - flag "never matrix" parameters +// - always pass in 2d matrix. instead of using (i, -1) for 1d matrix, we could just use (0, i) and avoid check +// - instead of using matrix_flag to give "copy on write" behavior, maybe pre-copy from engine_val to matrix[] +*/ +float FloatParameterExpr::eval ( int mesh_i, int mesh_j ) { - switch ( term.param->type ) + assert( term.param->type == P_TYPE_DOUBLE ); + if ( term.param->matrix_flag | ( term.param->flags & P_FLAG_ALWAYS_MATRIX ) ) { - case P_TYPE_BOOL: - return ( float ) ( * ( ( bool* ) ( term.param->engine_val ) ) ); - case P_TYPE_INT: - return ( float ) ( * ( ( int* ) ( term.param->engine_val ) ) ); - case P_TYPE_DOUBLE: - if ( term.param->matrix_flag | ( term.param->flags & P_FLAG_ALWAYS_MATRIX ) ) + /* Sanity check the matrix is there... */ + assert ( term.param->matrix != NULL ); + + /// @slow boolean check could be expensive in this critical (and common) step of evaluation + if ( mesh_i >= 0 ) + { + if ( mesh_j >= 0 ) { - - /* Sanity check the matrix is there... */ - assert ( term.param->matrix != NULL ); - - /// @slow boolean check could be expensive in this critical (and common) step of evaluation - if ( mesh_i >= 0 ) - { - if ( mesh_j >= 0 ) - { - return ( ( ( float** ) term.param->matrix ) [mesh_i][mesh_j] ); - } - else - { - return ( ( ( float* ) term.param->matrix ) [mesh_i] ); - } - } - //assert(mesh_i >=0); + return ( ( ( float** ) term.param->matrix ) [mesh_i][mesh_j] ); } - //std::cout << term.param->name << ": " << (*((float*)term.param->engine_val)) << std::endl; - return * ( ( float* ) ( term.param->engine_val ) ); - default: - return EVAL_ERROR; + else + { + return ( ( ( float* ) term.param->matrix ) [mesh_i] ); + } + } + //assert(mesh_i >=0); } + //std::cout << term.param->name << ": " << (*((float*)term.param->engine_val)) << std::endl; + return * ( ( float* ) ( term.param->engine_val ) ); } @@ -375,9 +376,6 @@ Expr * Expr::param_to_expr ( Param * param ) case P_TYPE_INT: return new IntParameterExpr( PARAM_TERM_T, &term ); case P_TYPE_DOUBLE: - // TODO are these flags constant??? can I check them now? - if ( param->matrix_flag | ( param->flags & P_FLAG_ALWAYS_MATRIX ) ) - return new ParameterExpr( PARAM_TERM_T, &term ); return new FloatParameterExpr( PARAM_TERM_T, &term ); } return NULL;