+
+void Renderer::draw_mirror(FlatMirror *mir) const
+{
+ push_render_target(rtmirror);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+
+ float pdist = dot(mir->plane.normal, mir->plane.pt);
+ Vec4 peq = Vec4(mir->plane.normal.x, mir->plane.normal.y, mir->plane.normal.z, pdist);
+
+ if(mir->node) {
+ peq = mir->node->get_matrix() * peq;
+ }
+
+ Mat4 mirmat;
+ mirmat.mirror(peq.x, peq.y, peq.z, peq.w);
+ glMultMatrixf(mirmat[0]);
+
+ glFrontFace(GL_CW);
+ draw();
+ glFrontFace(GL_CCW);
+
+ glPopMatrix();
+ pop_render_target();
+
+ dump_gl_texture(rtmirror->texture()->get_id(), "mirror.ppm");
+
+ int nobj = mir->objects.size();
+ for(int i=0; i<nobj; i++) {
+ draw_object(mir->objects[i]);
+ }
+}