void Renderer::ApplyCamera(const Camera& cam, IContext& c){ Rect<unsigned int> r = cam.GetRect(); glViewport(r.x, r.y, r.width, r.height); glEnable(GL_SCISSOR_TEST); glScissor(r.x, r.y, r.width, r.height); CHECK_GL_ERROR(); Color bg = cam.BackgroundColor(); glClearColor(bg.Get(0), bg.Get(1), bg.Get(2), bg.Get(3)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glDisable(GL_SCISSOR_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); CHECK_GL_ERROR(); glMultMatrixf(cam.GetProjectionMatrix().GetData()); CHECK_GL_ERROR(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Apply camera transformation Matrix<4,4,float> camTrans = cam.GetTransformation()->GetAccumulatedMatrix(); if (!Invert(camTrans)) std::cout << "Camera matrix could not be inverted.\n"; glMultMatrixf(camTrans.GetData()); glEnable(GL_DEPTH_TEST); }