void OpenGLGraphics::render_overlay(CoreOverlay* overlay) { if (!overlay->visible()) { return; } float x = overlay->corner_x(); float y = overlay->corner_y(); // Now translate to the top-left corner of the overlay, and render // the text and background image glMatrixMode(GL_MODELVIEW); glPushMatrix(); glTranslatef(x, y, 0.0f); // Render the background as a single quad OpenGLTexture* background = static_cast<OpenGLTexture*>(overlay->background()); if (background) { background->sampler(0); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex2f(overlay->width(), 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex2f(overlay->width(), overlay->height()); glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, overlay->height()); glEnd(); } // Now render the text OpenGLFont* font = static_cast<OpenGLFont*>(overlay->font()); if (!overlay->text().empty() && font) { glColor4fv(overlay->text_color()); glPushMatrix(); glTranslatef(0, (float)font->height(), 0); font->render(overlay->text()); glPopMatrix(); } // Render all the children for (Iterator<CoreOverlayPtr> i = overlay->children(); i; i++) { render_overlay(i->get()); } glPopMatrix(); }
void OpenGLGraphics::render_visible_quad_sets() { OpenGLTexture* texture = 0; glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor3f(1.0f, 1.0f, 1.0f); // Render all quad sets for (vector<CoreQuadSetPtr>::iterator i = quad_sets_.begin(); i != quad_sets_.end(); i++) { // Switch textures if necessary CoreQuadSet* quad_set = i->get(); OpenGLTexture* next_texture = static_cast<OpenGLTexture*>(quad_set->texture()); if (texture != next_texture) { texture = next_texture; texture->sampler(TS_DIFFUSE); } // Transform the modelview an dtexture matrics glMatrixMode(GL_MODELVIEW); glPushMatrix(); glMultMatrixf(quad_set->parent()->matrix()); glBegin(GL_QUADS); for (size_t i = 0; i < quad_set->vertex_count(); i++) { const Vertex& v = quad_set->vertex_data()[i]; glNormal3fv(v.normal); glTexCoord2fv(v.texcoord); glVertex3fv(v.position); } glEnd(); // Set the matrix mode glMatrixMode(GL_MODELVIEW); glPopMatrix(); } glEnable(GL_LIGHTING); glEnable(GL_CULL_FACE); glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); }