Как сбросить библиотеку librocket?

Я пытаюсь перезагрузить библиотеку, но, кажется, не могу.

Я нашел этот пост, но даже с объяснениями там я не могу это сделать.

Прежде чем вы увидите мой код, я пытаюсь изменить разрешение окна в меню параметров. Может быть, есть способ, которого я не знаю, и это излишество.

Вот что я делаю (ссылки на "рендерер" воспринимают их как обработчик 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 (я использую пример кода, который поставляется с библиотекой, поэтому вы увидите ссылки на Shell):

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)

Сообщение: "Необработанное исключение в 0x773515de в Game.exe: 0xC0000005: .... location 0x2ab60ee1"

Похоже, это как-то связано с менеджером событий, но я закрываю это так...?

Благодарю.

0 ответов

Другие вопросы по тегам