void Renderer::enableScreenFrustum() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); applyScreenFrustum(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
void Channel::_drawOverlay() { // Draw the overlay logo const Window* window = static_cast<Window*>( getWindow( )); const eq::util::Texture* texture = window->getLogoTexture(); if( !texture ) return; glMatrixMode( GL_PROJECTION ); glLoadIdentity(); applyScreenFrustum(); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); glDisable( GL_DEPTH_TEST ); glDisable( GL_LIGHTING ); glColor3f( 1.0f, 1.0f, 1.0f ); glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); // logo glEnable( GL_BLEND ); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); const GLenum target = texture->getTarget(); glEnable( target ); texture->bind(); glTexParameteri( target, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( target, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); const float tWidth = float( texture->getWidth( ) ); const float tHeight = float( texture->getHeight( ) ); const float width = target == GL_TEXTURE_2D ? 1.0f : tWidth; const float height = target == GL_TEXTURE_2D ? 1.0f : tHeight; glBegin( GL_QUADS ); { glTexCoord2f( 0, 0 ); glVertex3f( 5.0f, 5.0f, 0.0f ); glTexCoord2f( width, 0 ); glVertex3f( tWidth + 5.0f, 5.0f, 0.0f ); glTexCoord2f( width, height ); glVertex3f( tWidth + 5.0f, tHeight + 5.0f, 0.0f ); glTexCoord2f( 0, height ); glVertex3f( 5.0f, tHeight + 5.0f, 0.0f ); } glEnd(); glDisable( target ); glDisable( GL_BLEND ); glEnable( GL_LIGHTING ); glEnable( GL_DEPTH_TEST ); }
void Channel::_drawHelp() { const FrameData& frameData = _getFrameData(); std::string message = frameData.getMessage(); if( !frameData.showHelp() && message.empty( )) return; applyBuffer(); applyViewport(); setupAssemblyState(); glLogicOp( GL_XOR ); glEnable( GL_COLOR_LOGIC_OP ); glDisable( GL_LIGHTING ); glDisable( GL_DEPTH_TEST ); glColor3f( 1.f, 1.f, 1.f ); const eq::PixelViewport& pvp = getPixelViewport(); const eq::Viewport& vp = getViewport(); const float height = pvp.h / vp.h; if( !message.empty( )) { const eq::util::BitmapFont* font = getWindow()->getMediumFont(); const float width = pvp.w / vp.w; const float xOffset = vp.x * width; const float yOffset = vp.y * height; const float yPos = 0.618f * height; float y = yPos - yOffset; for( size_t pos = message.find( '\n' ); pos != std::string::npos; pos = message.find( '\n' )) { glRasterPos3f( 10.f - xOffset, y, 0.99f ); font->draw( message.substr( 0, pos )); message = message.substr( pos + 1 ); y -= 22.f; } // last line glRasterPos3f( 10.f - xOffset, y, 0.99f ); font->draw( message ); } glMatrixMode( GL_PROJECTION ); glLoadIdentity(); applyScreenFrustum(); glMatrixMode( GL_MODELVIEW ); if( frameData.showHelp( )) { const eq::util::BitmapFont* font = getWindow()->getSmallFont(); std::string help = EqPly::getHelp(); float y = height - 16.f; for( size_t pos = help.find( '\n' ); pos != std::string::npos; pos = help.find( '\n' )) { glRasterPos3f( 10.f, y, 0.99f ); font->draw( help.substr( 0, pos )); help = help.substr( pos + 1 ); y -= 16.f; } // last line glRasterPos3f( 10.f, y, 0.99f ); font->draw( help ); } resetAssemblyState(); }