我使用 SDL 来初始化我的 OpenGL 上下文:
SDL_init( SDL_INIT_VIDEO );
SDL_surface* Screen = SDL_SetVideoMode( 1600, 1200, 0, SDL_OPENGL );
然后我做:
Env = new sEnvironment;
Env->DeployDefaultEnvironment( NULL, "../../CommonMedia" );
引擎启动并打开一个新窗口。
如何使用现有的窗口?
我使用 SDL 来初始化我的 OpenGL 上下文:
SDL_init( SDL_INIT_VIDEO );
SDL_surface* Screen = SDL_SetVideoMode( 1600, 1200, 0, SDL_OPENGL );
然后我做:
Env = new sEnvironment;
Env->DeployDefaultEnvironment( NULL, "../../CommonMedia" );
引擎启动并打开一个新窗口。
如何使用现有的窗口?
您可以使用 DeployEnvironment 代替 DeployDefaultEnvironment DeployEnvironment 需要当前窗口的句柄,其中一个示例显示了如何在 Windows 上使用 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'。OpenViewport 应该为 false,CreateRenderer 也应该为 false,而 ContextTakeover 应该为 true。最后将 ExternalWndHandle 设置为存储在上面代码中声明的变量中的窗口句柄。请注意,该示例适用于 Windows 上的 GLUT,因此我不知道这是否适用于其他操作系统。