Eu acho que você precisa fazer algumas alterações no código libRocket para fazer passar a criação da janela. Não tenho certeza se existe outra maneira, mas tenho certeza de que esse trecho de código funcionará! e presumo que você esteja desenvolvendo para um sistema Windows, se você estiver direcionando para outra plataforma, existem etapas semelhantes, mas com diferentes variáveis e alterações de função!
Antes de tudo, você precisa obter um manipulador para a janela que o SDL cria. esse trecho de código extrai o valor HWND necessário (de acordo com aqui :
#include <SDL_syswm.h>
struct SDL_SysWMinfo wmInfo;
SDL_VERSION(&wmInfo.version);
if(-1 == SDL_GetWMInfo(&wmInfo))
throw AVException(SDL_GetError());
HWND hwndSDL = wmInfo.window;
agora precisamos garantir que o libRocket use a mesma janela para sua renderização. Após uma pequena pesquisa nos arquivos, encontrei um arquivo hg/shell/src/win32/ShellWin32.cpp
(o endereço é baseado no googlecode) que contém funções de criação de janelas. lá você vai ver uma função chamada bool Shell::OpenWindow(const char* name, bool attach_opengl)
. essa é a principal função responsável pela criação de uma janela. Para fazer com que o libRocket reutilize nossa hwndSDL
variável, você deve remover / comentar todas as linhas nessa função, exceto estas:
if (attach_opengl)
{
opengl_attached = AttachOpenGL();
if (!opengl_attached)
return false;
}
e pouco antes dessas linhas, adicione este pedaço de código:
window_handle = hwndSDL;
Sei que provavelmente não é a melhor maneira de fazer um trabalho, mas tenho certeza que funcionará. e se você estiver direcionando algo diferente de janelas, basta encontrar equivalentes para o valor HWND e a função createwindow. eles certamente estão em algum lugar nos códigos, já que quase todos os sistemas de janelas, janelas ou não, compartilham a mesma lógica.