bool GraphicsManager::renderGUIBack() { if (QueueMan.isQueueEmpty(kQueueVisibleGUIBackObject)) return false; glDisable(GL_DEPTH_TEST); glDepthMask(false); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glScalef(2.0f / _width, 2.0f / _height, 0.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); QueueMan.lockQueue(kQueueVisibleGUIBackObject); const std::list<Queueable *> &gui = QueueMan.getQueue(kQueueVisibleGUIBackObject); buildNewTextures(); for (std::list<Queueable *>::const_reverse_iterator g = gui.rbegin(); g != gui.rend(); ++g) { glPushMatrix(); static_cast<Renderable *>(*g)->render(kRenderPassAll); glPopMatrix(); } QueueMan.unlockQueue(kQueueVisibleGUIBackObject); glDepthMask(true); glEnable(GL_DEPTH_TEST); return true; }
bool GraphicsManager::renderWorld() { if (QueueMan.isQueueEmpty(kQueueVisibleWorldObject)) return false; float cPos[3]; float cOrient[3]; CameraMan.lock(); memcpy(cPos , CameraMan.getPosition (), 3 * sizeof(float)); memcpy(cOrient, CameraMan.getOrientation(), 3 * sizeof(float)); CameraMan.unlock(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMultMatrixf(_projection.get()); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Apply camera orientation glRotatef(-cOrient[0], 1.0, 0.0, 0.0); glRotatef( cOrient[1], 0.0, 1.0, 0.0); glRotatef(-cOrient[2], 0.0, 0.0, 1.0); // Apply camera position glTranslatef(-cPos[0], -cPos[1], cPos[2]); QueueMan.lockQueue(kQueueVisibleWorldObject); const std::list<Queueable *> &objects = QueueMan.getQueue(kQueueVisibleWorldObject); buildNewTextures(); // Draw opaque objects for (std::list<Queueable *>::const_reverse_iterator o = objects.rbegin(); o != objects.rend(); ++o) { glPushMatrix(); static_cast<Renderable *>(*o)->render(kRenderPassOpaque); glPopMatrix(); } // Draw transparent objects for (std::list<Queueable *>::const_reverse_iterator o = objects.rbegin(); o != objects.rend(); ++o) { glPushMatrix(); static_cast<Renderable *>(*o)->render(kRenderPassTransparent); glPopMatrix(); } QueueMan.unlockQueue(kQueueVisibleWorldObject); return true; }
bool GraphicsManager::renderCursor() { if (!_cursor) return false; buildNewTextures(); glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glScalef(2.0f / _width, 2.0f / _height, 0.0f); glTranslatef(- (_width / 2.0f), _height / 2.0f, 0.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); _cursor->render(); glEnable(GL_DEPTH_TEST); return true; }
bool GraphicsManager::renderCursor() { if (!_cursor) return false; buildNewTextures(); glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glScalef(2.0 / _screen->w, 2.0 / _screen->h, 0.0); glTranslatef(- (_screen->w / 2.0), _screen->h / 2.0, 0.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); _cursor->render(); glEnable(GL_DEPTH_TEST); return true; }
bool GraphicsManager::renderWorld() { if (QueueMan.isQueueEmpty(kQueueVisibleWorldObject)) return false; float cPos[3]; float cOrient[3]; memcpy(cPos , CameraMan.getPosition (), 3 * sizeof(float)); memcpy(cOrient, CameraMan.getOrientation(), 3 * sizeof(float)); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMultMatrixf(_projection.get()); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Apply camera orientation glRotatef(-cOrient[0], 1.0f, 0.0f, 0.0f); glRotatef( cOrient[1], 0.0f, 1.0f, 0.0f); glRotatef(-cOrient[2], 0.0f, 0.0f, 1.0f); // Apply camera position glTranslatef(-cPos[0], -cPos[1], cPos[2]); _modelview.loadIdentity(); _modelview.rotate(-cOrient[0], 1.0f, 0.0f, 0.0f); _modelview.rotate( cOrient[1], 0.0f, 1.0f, 0.0f); _modelview.rotate(-cOrient[2], 0.0f, 0.0f, 1.0f); _modelview.translate(-cPos[0], -cPos[1], cPos[2]); QueueMan.lockQueue(kQueueVisibleWorldObject); const std::list<Queueable *> &objects = QueueMan.getQueue(kQueueVisibleWorldObject); buildNewTextures(); // Get the current time uint32 now = EventMan.getTimestamp(); if (_lastSampled == 0) _lastSampled = now; // Calc elapsed time float elapsedTime = (now - _lastSampled) / 1000.0f; _lastSampled = now; // If game paused, skip the advanceTime loop below // Advance time for animation queues for (std::list<Queueable *>::const_reverse_iterator o = objects.rbegin(); o != objects.rend(); ++o) { static_cast<Renderable *>(*o)->advanceTime(elapsedTime); } // Draw opaque objects for (std::list<Queueable *>::const_reverse_iterator o = objects.rbegin(); o != objects.rend(); ++o) { glPushMatrix(); static_cast<Renderable *>(*o)->render(kRenderPassOpaque); glPopMatrix(); } // Draw transparent objects for (std::list<Queueable *>::const_reverse_iterator o = objects.rbegin(); o != objects.rend(); ++o) { glPushMatrix(); static_cast<Renderable *>(*o)->render(kRenderPassTransparent); glPopMatrix(); } QueueMan.unlockQueue(kQueueVisibleWorldObject); return true; }