#include "global.h"
+#include "gfxapi.h"
+
#include "morph_renderer.h"
#include "object.h"
#include "scene.h"
#include "shader.h"
#include "shader_manager.h"
#include "texture.h"
+#include "uniforms.h"
+
+#define MVU 5
MorphRenderer::MorphRenderer()
{
dskytex = 0;
fog_density = 0;
+
+ mbuf = vbuf = fbuf = svbuf = 0;
}
MorphRenderer::~MorphRenderer()
{
+ delete mbuf;
}
bool MorphRenderer::create()
return false;
}
- /* getting material uniform locations: diffuse, specular, specular exponent (strength) */
-
- diff_loc = sprog->get_uniform_location("diffuse");
- spec_loc = sprog->get_uniform_location("specular");
- shin_loc = sprog->get_uniform_location("shininess");
- t_loc = sprog->get_uniform_location("t");
- fog_loc = sprog->get_uniform_location("fog_density");
+ mbuf = gfx_create_uniform_buffer();
+ if(!mbuf->create(sizeof mu)) {
+ fprintf(stderr, "Failed to create uniform buffer.\n");
+ return false;
+ }
- /* uniform locations for matrices */
+ if(!vbuf) {
+ vbuf = gfx_create_uniform_buffer();
+ if(!vbuf->create(sizeof vu)) {
+ fprintf(stderr, "Failed to create uniform buffer.\n");
+ return false;
+ }
+ }
- mmviewproj_loc = sprog->get_uniform_location("mmviewproj");
- mview_loc = sprog->get_uniform_location("mview");
- mmod_loc = sprog->get_uniform_location("mmod");
+ if(!fbuf) {
+ fbuf = gfx_create_uniform_buffer();
+ if(!fbuf->create(sizeof fu)) {
+ fprintf(stderr, "Failed to create uniform buffer.\n");
+ return false;
+ }
+ }
- dstex_loc = sprog->get_uniform_location("dstex");
- if(dstex_loc != -1)
- sprog->set_uniformi(dstex_loc, 1);
+ if(!svbuf) {
+ svbuf = gfx_create_uniform_buffer();
+ if(!svbuf->create(sizeof svu)) {
+ fprintf(stderr, "Failed to create uniform buffer.\n");
+ return false;
+ }
+ }
return true;
}
-void MorphRenderer::draw() const
+void MorphRenderer::draw()
{
if(!camera || !scene)
return;
sprog->use();
for(size_t i=0; i<scene->objects.size(); i++) {
- float t = (sin(time_sec + 7.3 * noise(i * M_PI)) + 1) * 0.5;
- if(t_loc != -1)
- sprog->set_uniformf(t_loc, t);
+ mu.t = (sin(time_sec + 7.3 * noise(i * M_PI)) + 1) * 0.5;
+ mbuf->update(&mu);
+ mbuf->bind(MORPHING_UNIFORMS);
- if(mmod_loc != -1)
- sprog->set_uniform_matrix(mmod_loc, scene->objects[i]->transform.upper3x3());
+ vu.mmod = scene->objects[i]->transform.upper3x3();
+ vbuf->update(&vu);
+ vbuf->bind(MATRIX_UNIFORMS);
draw_object(scene->objects[i]);
}
-}
\ No newline at end of file
+}