ライブラリをリセットしようとしていますが、リセットできないようです。
この投稿を見つけましたが、そこに説明があってもできません。
私のコードを見る前に、私がやろうとしているのは、オプションメニューのウィンドウの解像度を変更することです。多分私が知らない方法があり、これはやり過ぎです。
これは私が行っていることです(「レンダラー」への参照はそれらをOpenGLハンドラーと見なします):
このコードは、EventHandlerOptions.cppの関数ProcessEventにあります。
if(ResolutionChanged)
{
// Change the resolution
Renderer *renderer = GameSettings::GetRenderer();
GUIScene *gui = GameSettings::GetGUI();
if(renderer != NULL && gui != NULL)
{
bool ok;
// Shutdown old ones
gui->Shutdown();
renderer->Shutdown();
// Initialize the new ones
ok = renderer->Init(GameSettings::GetResolutionWidth(), GameSettings::GetResolutionHeight(), 16, (bool)GameSettings::GetRepresentation());
assert(ok);
ok = gui->Init(GameSettings::GetResolutionWidth(), GameSettings::GetResolutionHeight());
assert(ok);
}
}
GUIに関連するコード(ライブラリに付属しているサンプルコードを使用しているため、シェルへの参照が表示されます):
bool GUIScene::Init(int width, int height)
{
// Generic OS initialisation, creates a window and attaches OpenGL.
if (!Shell::Initialise("."))
{
Shell::Shutdown();
return false;
}
//Rocket initialisation.
Rocket::Core::SetRenderInterface(new ShellRenderInterfaceOpenGL());
Rocket::Core::SetSystemInterface(new ShellSystemInterface());
Rocket::Core::Initialise();
// Initialise the Rocket Controls library.
Rocket::Controls::Initialise();
// Create the main Rocket context and set it on the shell's input layer.
context = Rocket::Core::CreateContext("main", Rocket::Core::Vector2i(width, height));
if (context == NULL)
{
Rocket::Core::Shutdown();
Shell::Shutdown();
return false;
}
Rocket::Debugger::Initialise(context);
Input::SetContext(context);
Shell::LoadFonts("Data/");
// Initialise the event instancer and handlers.
EventInstancer* event_instancer = new EventInstancer();
Rocket::Core::Factory::RegisterEventListenerInstancer(event_instancer);
event_instancer->RemoveReference();
EventManager::SetContext(context);
EventManager::RegisterEventHandler("options", new EventHandlerOptions());
EventManager::LoadWindow("demo");
return true;
}
void GUIScene::Shutdown()
{
// Shutdown Rocket.
EventManager::Shutdown();
context->RemoveReference();
Rocket::Core::Shutdown();
Rocket::Core::SetSystemInterface(NULL);
Rocket::Core::SetRenderInterface(NULL);
Shell::Shutdown();
}
これはEventManager.cppでクラッシュしています(ProcessEvent関数で考えています)
メッセージは次のとおりです。「Game.exeの0x773515deで未処理の例外:0xC0000005:....場所0x2ab60ee1」
イベントマネージャーと関係があるようですが、シャットダウンしているので…?
ありがとう。