fixed reflections in VR
[laserbrain_demo] / src / renderer.cc
index 0d23e38..a4f2edb 100644 (file)
@@ -15,6 +15,7 @@ static const char *use_flag_str[] = {
 
 
 static RenderTarget *rtmirror;
+static int cur_vport[4];
 
 Renderer::Renderer()
 {
@@ -90,12 +91,15 @@ void Renderer::draw() const
        if(DO_MIRRORS && current_render_target() != rtmirror) {
                // check if the render target needs resizing
                if(rtmirror->get_width() != vp_width || rtmirror->get_height() != vp_height) {
+                       info_log("resizing mirror render target to %dx%d\n", vp_width, vp_height);
                        if(!rtmirror->resize(vp_width, vp_height)) {
                                error_log("failed to resize mirror render target (%dx%d)\n", vp_width, vp_height);
                                goto abort_mirrors;
                        }
                }
 
+               glGetIntegerv(GL_VIEWPORT, cur_vport);
+
                FlatMirror *mir = mscn->mirrors;
                while(mir) {
                        draw_mirror(mir);
@@ -144,6 +148,7 @@ void Renderer::draw_object(Object *obj) const
                if(use_mask & USE_MIRROR) {
                        float sx = 1.0f / rtmirror->texture()->get_width();
                        float sy = 1.0f / rtmirror->texture()->get_height();
+                       set_uniform_float2(sdr, "mirtex_offs", -cur_vport[0], -cur_vport[1]);
                        set_uniform_float2(sdr, "mirtex_scale", sx, sy);
                        set_uniform_float(sdr, "reflectivity", obj->mtl.reflect);
                }