mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-13 03:09:57 +01:00
Fixed ImageFilter timing
This commit is contained in:
@@ -112,7 +112,7 @@ void CloneSource::init()
|
|||||||
|
|
||||||
void CloneSource::render()
|
void CloneSource::render()
|
||||||
{
|
{
|
||||||
if ( renderbuffer_ == nullptr )
|
if ( renderbuffer_ == nullptr )
|
||||||
init();
|
init();
|
||||||
else {
|
else {
|
||||||
|
|
||||||
@@ -157,7 +157,9 @@ void CloneSource::update(float dt)
|
|||||||
if (origin_ && !images_.empty()) {
|
if (origin_ && !images_.empty()) {
|
||||||
|
|
||||||
if (!paused_ && active_)
|
if (!paused_ && active_)
|
||||||
{
|
{
|
||||||
|
filter_render_->update(dt);
|
||||||
|
|
||||||
// Reset elapsed timer on request (init or replay)
|
// Reset elapsed timer on request (init or replay)
|
||||||
if ( timer_reset_ ) {
|
if ( timer_reset_ ) {
|
||||||
g_timer_start(timer_);
|
g_timer_start(timer_);
|
||||||
|
|||||||
@@ -182,11 +182,10 @@ class ImageFilteringShader : public ImageShader
|
|||||||
std::string shader_code_;
|
std::string shader_code_;
|
||||||
std::string code_;
|
std::string code_;
|
||||||
|
|
||||||
// for iTime & iFrame
|
// for iTimedelta
|
||||||
GTimer *timer_;
|
GTimer *timer_;
|
||||||
double iTime_;
|
double iTime_;
|
||||||
int iFrame_;
|
uint iFrame_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@@ -196,6 +195,8 @@ public:
|
|||||||
ImageFilteringShader();
|
ImageFilteringShader();
|
||||||
~ImageFilteringShader();
|
~ImageFilteringShader();
|
||||||
|
|
||||||
|
void update(float dt);
|
||||||
|
|
||||||
void use() override;
|
void use() override;
|
||||||
void reset() override;
|
void reset() override;
|
||||||
void copy(ImageFilteringShader const& S);
|
void copy(ImageFilteringShader const& S);
|
||||||
@@ -221,6 +222,18 @@ ImageFilteringShader::ImageFilteringShader(): ImageShader()
|
|||||||
ImageFilteringShader::~ImageFilteringShader()
|
ImageFilteringShader::~ImageFilteringShader()
|
||||||
{
|
{
|
||||||
custom_shading_.reset();
|
custom_shading_.reset();
|
||||||
|
g_timer_destroy(timer_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImageFilteringShader::update(float dt)
|
||||||
|
{
|
||||||
|
iTime_ += dt;
|
||||||
|
if (iTime_ > FLT_MAX)
|
||||||
|
iTime_ = 0.0;
|
||||||
|
|
||||||
|
iFrame_++;
|
||||||
|
if (iFrame_ > INT_MAX)
|
||||||
|
iFrame_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageFilteringShader::use()
|
void ImageFilteringShader::use()
|
||||||
@@ -231,23 +244,18 @@ void ImageFilteringShader::use()
|
|||||||
// Shader input uniforms
|
// Shader input uniforms
|
||||||
//
|
//
|
||||||
|
|
||||||
// Calculate iTime and iTimeDelta
|
|
||||||
double elapsed = g_timer_elapsed (timer_, NULL);
|
|
||||||
program_->setUniform("iTimeDelta", float(elapsed - iTime_) );
|
|
||||||
iTime_ = elapsed;
|
|
||||||
if (iTime_ > FLT_MAX) {
|
|
||||||
g_timer_start(timer_);
|
|
||||||
iTime_ = 0.f;
|
|
||||||
}
|
|
||||||
program_->setUniform("iTime", float(iTime_) );
|
program_->setUniform("iTime", float(iTime_) );
|
||||||
// calculate iFrame
|
program_->setUniform("iFrame", int(iFrame_) );
|
||||||
program_->setUniform("iFrame", ++iFrame_);
|
|
||||||
if (iFrame_ > INT_MAX -2)
|
// Calculate iTimeDelta
|
||||||
iFrame_ = 0;
|
double elapsed = g_timer_elapsed (timer_, NULL);
|
||||||
|
g_timer_reset(timer_);
|
||||||
|
program_->setUniform("iTimeDelta", float(elapsed) );
|
||||||
|
|
||||||
// calculate iDate
|
// calculate iDate
|
||||||
std::time_t now = std::time(0);
|
std::time_t now = std::time(0);
|
||||||
std::tm *local = std::localtime(&now);
|
std::tm *local = std::localtime(&now);
|
||||||
glm::vec4 iDate(local->tm_year, local->tm_mon, local->tm_mday, local->tm_hour*3600.0+local->tm_min*60.0+local->tm_sec);
|
glm::vec4 iDate(local->tm_year+1900, local->tm_mon, local->tm_mday, local->tm_hour*3600+local->tm_min*60+local->tm_sec);
|
||||||
program_->setUniform("iDate", iDate);
|
program_->setUniform("iDate", iDate);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -263,8 +271,8 @@ void ImageFilteringShader::reset()
|
|||||||
ImageShader::reset();
|
ImageShader::reset();
|
||||||
|
|
||||||
// reset times
|
// reset times
|
||||||
g_timer_start(timer_);
|
|
||||||
iFrame_ = 0;
|
iFrame_ = 0;
|
||||||
|
iTime_ = 0.0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,11 +325,18 @@ ImageFilterRenderer::~ImageFilterRenderer()
|
|||||||
// NB: shaders_ are removed with surface
|
// NB: shaders_ are removed with surface
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImageFilterRenderer::update(float dt)
|
||||||
|
{
|
||||||
|
shaders_.first->update(dt);
|
||||||
|
if (shaders_.second)
|
||||||
|
shaders_.second->update(dt);
|
||||||
|
}
|
||||||
|
|
||||||
void ImageFilterRenderer::setInputTexture(uint t)
|
void ImageFilterRenderer::setInputTexture(uint t)
|
||||||
{
|
{
|
||||||
surfaces_.first->setTextureIndex( t );
|
surfaces_.first->setTextureIndex( t );
|
||||||
shaders_.first->mask_texture = t;
|
shaders_.first->mask_texture = t;
|
||||||
if (surfaces_.second && shaders_.second)
|
if (shaders_.second)
|
||||||
shaders_.second->mask_texture = t;
|
shaders_.second->mask_texture = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,8 @@ public:
|
|||||||
inline void setEnabled (bool on) { enabled_ = on; }
|
inline void setEnabled (bool on) { enabled_ = on; }
|
||||||
inline bool enabled () const { return enabled_; }
|
inline bool enabled () const { return enabled_; }
|
||||||
|
|
||||||
|
void update (float dt);
|
||||||
|
|
||||||
// set the texture to draw into the framebuffer
|
// set the texture to draw into the framebuffer
|
||||||
void setInputTexture(uint t);
|
void setInputTexture(uint t);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user