Difference between revisions of "Rendering to texture (RTT) in CEGUI"
From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
(Created page with "Since version 0.8 the new GUIContext class allows it to render your CEGUI interface into a texture instead of rendering it normally into your main buffer. <source lang="cpp...") |
|||
Line 5: | Line 5: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
//Taking some random values as example for a guicontext size. | //Taking some random values as example for a guicontext size. | ||
− | + | int width = 1024; | |
int height = 800; | int height = 800; | ||
− | + | CEGUI::Sizef size(static_cast<float>(width), static_cast<float>(height)); | |
// We create a CEGUI texture target and create a GUIContext that will use it. | // We create a CEGUI texture target and create a GUIContext that will use it. | ||
− | + | CEGUI::TextureTarget* renderTextureTarget = system.getRenderer()->createTextureTarget(); | |
− | + | CEGUI::GUIContext* renderGuiContext = &CEGUI::System::getSingleton().createGUIContext(static_cast<CEGUI::RenderTarget&>(*renderTextureTarget) ); | |
− | + | drenderTextureTarget->declareRenderSize(size); | |
− | //We create a BasicImage and set the Texture | + | // We create a BasicImage and set the Texture |
− | + | d_textureTargetImage = static_cast<CEGUI::BitmapImage*>(&CEGUI::ImageManager::getSingleton().create("BitmapImage", "SomeGroup/MyTexturesName")); | |
− | + | d_textureTargetImage->setTexture(&d_textureTarget->getTexture()); | |
− | //We size the image using a function | + | // We size the image using a function |
− | + | setTextureTargetImageArea(static_cast<float>(height), static_cast<float>(width)); | |
</source> | </source> | ||
Revision as of 23:07, 11 November 2013
Since version 0.8 the new GUIContext class allows it to render your CEGUI interface into a texture instead of rendering it normally into your main buffer.
//Taking some random values as example for a guicontext size. int width = 1024; int height = 800; CEGUI::Sizef size(static_cast<float>(width), static_cast<float>(height)); // We create a CEGUI texture target and create a GUIContext that will use it. CEGUI::TextureTarget* renderTextureTarget = system.getRenderer()->createTextureTarget(); CEGUI::GUIContext* renderGuiContext = &CEGUI::System::getSingleton().createGUIContext(static_cast<CEGUI::RenderTarget&>(*renderTextureTarget) ); drenderTextureTarget->declareRenderSize(size); // We create a BasicImage and set the Texture d_textureTargetImage = static_cast<CEGUI::BitmapImage*>(&CEGUI::ImageManager::getSingleton().create("BitmapImage", "SomeGroup/MyTexturesName")); d_textureTargetImage->setTexture(&d_textureTarget->getTexture()); // We size the image using a function setTextureTargetImageArea(static_cast<float>(height), static_cast<float>(width));
Here is the function for sizing the BasicImage:
void setTextureTargetImageArea(float height, float width) { if(d_textureTarget) { bool isTextureTargetVerticallyFlipped = d_textureTarget->isRenderingInverted(); CEGUI::Rectf renderArea; if(isTextureTargetVerticallyFlipped) renderArea = CEGUI::Rectf(0.0f, height, width, 0.0f); else renderArea = CEGUI::Rectf(0.0f, 0.0f, width, height); if(d_textureTargetImage) d_textureTargetImage->setImageArea(renderArea); } }
if you want to retrieve the renderer-specific texture from a CEGUI texture you will need to cast it:
For example for OpenGL:
CEGUI::OpenGLTexture& glTexture = static_cast<CEGUI::OpenGLTexture&>(d_textureTarget->getTexture());
After that u can use the member function to receive whatever render-specific traits you need, such as the textureID in Opengl as an unsigned integer, etc.