+#include <algorithm>
#include <msp/strings/format.h>
#include "animatedobject.h"
#include "object.h"
#include "renderer.h"
#include "technique.h"
+using namespace std;
+
namespace Msp {
namespace GL {
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
#ifndef MSP_GL_ANIMATEDOBJECT_H_
#define MSP_GL_ANIMATEDOBJECT_H_
+#include <vector>
#include "matrix.h"
#include "objectinstance.h"
{
private:
Matrix matrix;
+ std::vector<float> pose_data;
ProgramData *shdata;
public:
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)