These are the results I'm getting:

And this is (hopefully) the relevant bit of code:
Code: Select all
void Renderer::Swap()
{
#ifdef SWAP_OLD
glClear(GL_COLOR_BUFFER_BIT);
CEGUI::System::getSingleton().renderGUI();
SDL_GL_SwapBuffers();
#else
if (vbo)
{
// set up render mode
glViewport(0, 0, SCRWIDTH, SCRHEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1, 0, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// frame buffer swapping for VBO mode
static int index = 0;
int nextindex;
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER_ARB);
glBindTexture(GL_TEXTURE_2D, framebufferTexID[index]);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, fbPBO[index]);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, SCRWIDTH, SCRHEIGHT, GL_BGRA, GL_UNSIGNED_BYTE, 0);
nextindex = (index + 1) % 2;
index = (index + 1) % 2;
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, fbPBO[nextindex]);
framedata = (unsigned char*)glMapBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY_ARB);
// draw game quad
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glNormal3f(0, 0, 1);
glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 0.0f);
glEnd();
// interface drawing
glViewport(0, 0, SCRWIDTH, SCRHEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, SCRWIDTH, SCRHEIGHT, 1, -100, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, g_GUITexture);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, SCRWIDTH, SCRHEIGHT, GL_BGRA, GL_UNSIGNED_BYTE, 0);
CEGUI::System::getSingleton().renderGUI();
// draw a quad
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
glBegin(GL_QUADS);
{
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 0.0f);
glVertex2f(0.0f, 1.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 0.0f);
glVertex2f(1.0f, 1.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 1.0f);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 1.0f);
glVertex2f(1.0f, 0.0f);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0f, 1.0f);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 1.0f);
glVertex2f(0.0f, 0.0f);
}
glEnd();
SDL_GL_SwapBuffers();
// reset
glActiveTextureARB(GL_TEXTURE0_ARB);
glDisable(GL_TEXTURE_2D);
glActiveTextureARB(GL_TEXTURE1_ARB);
glDisable(GL_TEXTURE_2D);
}
else
{
// frame buffer swapping for fall-back path
SDL_Surface* s = SDL_GetVideoSurface();
SDL_UpdateRect(s, 0, 0, 0, 0);
framedata = (unsigned char*)s->pixels;
frontbuffer->SetPitch(s->pitch / 4);
}
frontbuffer->SetBuffer((Pixel*)framedata);
#endif
}And here's how I instantiate CEGUI:
Code: Select all
CEGUI::Size screen_size(SCRWIDTH, SCRHEIGHT);
//g_GUIRenderer = &CEGUI::OpenGLRenderer::create(screen_size, CEGUI::OpenGLRenderer::TTT_NONE);
g_GUIRenderer = &CEGUI::OpenGLRenderer::create(screen_size);
g_GUIRenderer->enableExtraStateSettings(true);
g_GUISystem = &CEGUI::System::create(*g_GUIRenderer);
CEGUI::DefaultResourceProvider* provider = (CEGUI::DefaultResourceProvider*)CEGUI::System::getSingleton().getResourceProvider();
provider->setResourceGroupDirectory("fonts", "fonts\\");
provider->setResourceGroupDirectory("schemes", "F:\\Downloads\\CEGUI-0.7.1\\CEGUI-0.7.1\\datafiles\\schemes\\");
provider->setResourceGroupDirectory("imagesets", "F:\\Downloads\\CEGUI-0.7.1\\CEGUI-0.7.1\\datafiles\\imagesets\\");
provider->setResourceGroupDirectory("looknfeel", "F:\\Downloads\\CEGUI-0.7.1\\CEGUI-0.7.1\\datafiles\\looknfeel\\");
CEGUI::Imageset::setDefaultResourceGroup("imagesets");
CEGUI::Font::setDefaultResourceGroup("fonts");
CEGUI::Scheme::setDefaultResourceGroup("schemes");
CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeel");
CEGUI::WindowManager::setDefaultResourceGroup("layouts");
CEGUI::String look_namespace("WindowsLook");
CEGUI::String look_file("WindowsLook.scheme");
CEGUI::SchemeManager::getSingleton().create(look_file);
CEGUI::FontManager::getSingleton().createFreeTypeFont("Consolas", 12.f, true, "DejaVuSans.ttf", "fonts");
CEGUI::System::getSingleton().setDefaultFont("Consolas");
glGenTextures(1, &g_GUITexture);
CEGUI::DefaultWindow* root = (CEGUI::DefaultWindow*)CEGUI::WindowManager::getSingleton().createWindow("DefaultWindow", "root");
CEGUI::System::getSingleton().setGUISheet(root);
//CEGUI::FrameWindow* fw = (CEGUI::FrameWindow*)CEGUI::WindowManager::getSingleton().createWindow(look_namespace + "/FrameWindow");
CEGUI::FrameWindow* fw = (CEGUI::FrameWindow*)CEGUI::WindowManager::getSingleton().createWindow(look_namespace + "/StaticImage");
fw->setPosition(CEGUI::UVector2(CEGUI::UDim(0.25f, 0.f), CEGUI::UDim(0.25f, 0.f)));
fw->setSize(CEGUI::UVector2(CEGUI::UDim(0.5f, 0.f), CEGUI::UDim(0.5f, 0.f)));
fw->setText("Hello World!");
root->addChildWindow(fw);
CEGUI::PushButton* btn = (CEGUI::PushButton*)CEGUI::WindowManager::getSingleton().createWindow(look_namespace + "/Button");
btn->setPosition(CEGUI::UVector2(CEGUI::UDim(0.25f, 0.f), CEGUI::UDim(0.5f, 0.f)));
btn->setSize(CEGUI::UVector2(CEGUI::UDim(0.5f, 0.f), CEGUI::UDim(0.25f, 0.f)));
btn->setText("I'm a button!");
fw->addChildWindow(btn);Even when I strip out everything and just use SDL I get blocks for text.
What's going on?
