Ich denke, Sie müssen einige Änderungen am libRocket-Code vornehmen, damit er die Fenstererstellung besteht. Ich bin mir nicht sicher, ob es einen anderen Weg gibt, aber ich bin mir sicher, dass dieser Code funktionieren wird! und ich gehe davon aus, dass Sie für ein Windows-System entwickeln. Wenn Sie auf eine andere Plattform abzielen, gibt es ähnliche Schritte, jedoch mit unterschiedlichen Variablen und Funktionsänderungen!
Zunächst müssen Sie einen Handler für das von SDL erstellte Fenster erhalten. Dieser Code extrahiert den erforderlichen HWND-Wert (gemäß hier :
#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;
Jetzt müssen wir sicherstellen, dass libRocket dasselbe Fenster für das Rendern verwendet. Nach einer kleinen Suche in den Dateien habe ich eine Datei gefunden hg/shell/src/win32/ShellWin32.cpp
(Adresse basiert auf Google Code), die Funktionen zum Erstellen von Fenstern enthält. Dort sehen Sie eine Funktion namens bool Shell::OpenWindow(const char* name, bool attach_opengl)
. Das ist die Hauptfunktion, die für die Erstellung eines Fensters verantwortlich ist. Damit libRocket unsere hwndSDL
Variable wiederverwendet, müssen Sie alle Zeilen in dieser Funktion entfernen / kommentieren, mit Ausnahme der folgenden:
if (attach_opengl)
{
opengl_attached = AttachOpenGL();
if (!opengl_attached)
return false;
}
und kurz vor diesen Zeilen fügen Sie diesen Code hinzu:
window_handle = hwndSDL;
Ich weiß, dass es wahrscheinlich nicht der beste Weg ist, Arbeit zu leisten, aber ich bin sicher, dass es funktionieren wird. Wenn Sie auf etwas anderes als Windows abzielen, müssen Sie nur Entsprechungen für den HWND-Wert und die Funktion zum Erstellen von Fenstern finden. Sie befinden sich sicher irgendwo in Codes, da fast alle Fenstersysteme, entweder Fenster oder Nicht-Fenster, dieselbe Logik verwenden.