From: Mikko Rasa Date: Tue, 21 Aug 2012 22:56:37 +0000 (+0300) Subject: Use uniform arrays in Bloom and AnimatedObject X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=commitdiff_plain;h=7c1315191bc96298d1664f80fa3e2cb5a34339fa Use uniform arrays in Bloom and AnimatedObject --- diff --git a/source/animatedobject.cpp b/source/animatedobject.cpp index 08666633..e4aa0044 100644 --- a/source/animatedobject.cpp +++ b/source/animatedobject.cpp @@ -1,3 +1,4 @@ +#include #include #include "animatedobject.h" #include "object.h" @@ -5,6 +6,8 @@ #include "renderer.h" #include "technique.h" +using namespace std; + namespace Msp { namespace GL { @@ -25,7 +28,12 @@ void AnimatedObject::set_matrix(const Matrix &m) void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m) { if(shdata) - shdata->uniform_matrix4(format("pose[%d]", link), m); + { + if(link*16>=pose_data.size()) + pose_data.resize((link+1)*16); + copy(m.data(), m.data()+16, &pose_data[link*16]); + shdata->uniform_matrix4_array("pose[0]", pose_data.size()/16, &pose_data[0]); + } } void AnimatedObject::setup_render(Renderer &renderer, const Tag &) const diff --git a/source/animatedobject.h b/source/animatedobject.h index acec4322..3f8487ba 100644 --- a/source/animatedobject.h +++ b/source/animatedobject.h @@ -1,6 +1,7 @@ #ifndef MSP_GL_ANIMATEDOBJECT_H_ #define MSP_GL_ANIMATEDOBJECT_H_ +#include #include "matrix.h" #include "objectinstance.h" @@ -15,6 +16,7 @@ class AnimatedObject: public ObjectInstance { private: Matrix matrix; + std::vector pose_data; ProgramData *shdata; public: diff --git a/source/bloom.cpp b/source/bloom.cpp index 896147c2..8a6ddbcd 100644 --- a/source/bloom.cpp +++ b/source/bloom.cpp @@ -82,9 +82,10 @@ void Bloom::set_radius(float r) r = 2*r*r; for(int i=-size; i<=size; ++i) sum += (factors[size+i] = exp(-i*i/r)); - for(int i=0; i<=size*2; ++i) - blur_shdata_common.uniform(format("factors[%d]", i), factors[i]/sum); + factors[i] /= sum; + + blur_shdata_common.uniform1_array("factors[0]", size*2+1, &factors.front()); } void Bloom::set_strength(float s)