X-Git-Url: https://eleni.mutantstargoat.com/git/?p=demo;a=blobdiff_plain;f=src%2Fmorph_renderer.cc;fp=src%2Fmorph_renderer.cc;h=a691835de77b692e04e99cde7edbf146f0cc0725;hp=d076114197e886127e8043b67e65efdd6350bfeb;hb=05d269a194496bcef85da78652b947f5bf1c9bcf;hpb=6cecb8f16f1863496884ca86790375dbb27138ba diff --git a/src/morph_renderer.cc b/src/morph_renderer.cc index d076114..a691835 100644 --- a/src/morph_renderer.cc +++ b/src/morph_renderer.cc @@ -1,10 +1,15 @@ #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() { @@ -17,10 +22,13 @@ MorphRenderer::MorphRenderer() dskytex = 0; fog_density = 0; + + mbuf = vbuf = fbuf = svbuf = 0; } MorphRenderer::~MorphRenderer() { + delete mbuf; } bool MorphRenderer::create() @@ -29,28 +37,40 @@ 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; @@ -65,13 +85,14 @@ void MorphRenderer::draw() const sprog->use(); for(size_t i=0; iobjects.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 +}