1

SDL を使用して OpenGL コンテキストを初期化します。

SDL_init( SDL_INIT_VIDEO );
SDL_surface* Screen = SDL_SetVideoMode( 1600, 1200, 0, SDL_OPENGL );

そして、私は:

Env = new sEnvironment;
Env->DeployDefaultEnvironment( NULL, "../../CommonMedia" );

エンジンが始動し、新しいウィンドウが開きます。

既存のウィンドウをどのように使用できますか?

4

1 に答える 1

1

DeployDefaultEnvironment の代わりに DeployEnvironment を使用できます。DeployEnvironment には現在のウィンドウへのハンドルが必要です。例の 1 つは、ウィンドウで GLUT を使用してこれを実現する方法を示しています。次のコードを使用して、SDL で現在のウィンドウ ハンドルを取得できます。

SDL_SysWMinfo SysInfo; //Will hold our Window information
SDL_VERSION(&SysInfo.version); //Set SDL version

if(SDL_GetWMInfo(&SysInfo) <= 0) {
    printf("%s : %d\n", SDL_GetError(), SysInfo.window); 
    return; //or throw exception or whatever       
}

#ifdef __WIN32__
HWND WindowHandle = SysInfo.window; //Win32 window handle
#else
Window WindowHandle = SysInfo.window; //X11 window handle
#endif

最後に、DeployEnvironment の定義は次のようになります。

DeployEnvironment   (const std::vector< std::string > * CommandLine,
const std::string & LogFileName,
const std::string & RootDir,
const std::string & CommonMediaDir,
const std::string & ConfigFile,
const bool          OpenViewport,
const bool          CreateRenderer,
const bool          ContextTakeover,
void *          ExternalWndHandle);

コマンド ライン パラメーターは DeployDefaultEnvironment の場合と同じです。次の 4 つのパラメーターはパスですが、定数 'DEFAULT_ENGINE_LOG_FILE'、'DEFAULT_ENGINE_ROOT_DIR'、'DEFAULT_ENGINE_ROOT_PACK'、'DEFAULT_ENGINE_INI_FILE' を使用できます。CreateRenderer と同様に、OpenViewport は false である必要があり、ContextTakeover は true である必要があります。最後に、上記のコードで宣言された変数に格納されているウィンドウ ハンドルに ExternalWndHandle を設定します。この例は Windows 上の GLUT の例であるため、これが他の OS で機能するかどうかはわかりません。

于 2013-07-15T12:52:54.357 に答える