Difference between revisions of "Rendering to texture (RTT) in CEGUI"

From CEGUI Wiki - Crazy Eddie's GUI System (Open Source)
Jump to: navigation, search
(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 width = 1024;
 
int height = 800;
 
int height = 800;
    CEGUI::Sizef size(static_cast<float>(width), static_cast<float>(height));
+
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::TextureTarget* renderTextureTarget = system.getRenderer()->createTextureTarget();
    CEGUI::GUIContext* renderGuiContext = &CEGUI::System::getSingleton().createGUIContext(static_cast<CEGUI::RenderTarget&>(*renderTextureTarget) );
+
CEGUI::GUIContext* renderGuiContext = &CEGUI::System::getSingleton().createGUIContext(static_cast<CEGUI::RenderTarget&>(*renderTextureTarget) );
    drenderTextureTarget->declareRenderSize(size);
+
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 = static_cast<CEGUI::BitmapImage*>(&CEGUI::ImageManager::getSingleton().create("BitmapImage", "SomeGroup/MyTexturesName"));
    d_textureTargetImage->setTexture(&d_textureTarget->getTexture());
+
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));
+
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.