回答:
はい、ほぼすべてのレンダリングシステムでlibRocketを使用できます(ほとんどのデスクトップシステム、iOSおよびAndroidにはlibRocketアプリがあります)。
libRocketは、内部的に抽象レンダーインターフェースを使用します。libRocketは、テキストを内部構造に解析し、そのジオメトリをその抽象的なレンダラーにプッシュする準備ができているライブラリです。
したがって、レンダラーを自分で実装しないと、何もレンダリングされません。誤っていない場合は、単にRocket :: Core :: RenderInterfaceを継承し、いくつかの関数を自分で実装します。
これを行う方法に関するドキュメントは、ここで見つけることができます:http : //librocket.com/wiki/documentation/C%2B%2BManual/Interfaces
次に、カスタムレンダラーを割り当てると、それがジオメトリのプッシュに使用されます。この時点で、それをどうするかを完全に制御できます。
OpenGLレンダラー用のサンプルがありますが、SDLに適合させることができます。
それが役に立てば幸い。
libRocketコードにいくつかの変更を加えて、ウィンドウの作成に合格させる必要があると思います。別の方法があるかどうかはわかりませんが、このコードが機能することは間違いありません。Windowsシステム用に開発していると思います。別のプラットフォームをターゲットにしている場合、同様の手順がありますが、変数と関数が異なります。
まず、SDLが作成するウィンドウのハンドラーを取得する必要があります。このコード部分は、必要なHWND値を抽出します(ここによると:
#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;
libRocketがレンダリングに同じウィンドウを使用することを確認する必要があります。ファイルを少し検索した後、hg/shell/src/win32/ShellWin32.cpp
ウィンドウ作成関数を含むファイル(アドレスはgooglecodeに基づいています)を見つけました。そこにという名前の関数が表示されbool Shell::OpenWindow(const char* name, bool attach_opengl)
ます。これは、ウィンドウを作成する主な機能です。libRocketでhwndSDL
変数を再利用するには、これらの関数以外のすべての行を削除またはコメント化する必要があります。
if (attach_opengl)
{
opengl_attached = AttachOpenGL();
if (!opengl_attached)
return false;
}
これらの行の直前に次のコードを追加します。
window_handle = hwndSDL;
私はそれが仕事をするための最良の方法ではないことを知っていますが、私はそれがうまくいくと確信しています。また、ウィンドウ以外のものをターゲットにしている場合は、HWND値とcreatewindow関数に相当するものを見つける必要があります。ほとんどすべてのウィンドウシステムがウィンドウまたは非ウィンドウのどちらかが同じロジックを共有しているため、コードのどこかにあるはずです。