Atualmente, estive envolvido em um projeto de jogo e chegamos ao ponto em que queremos adicionar a GUI para menus e outras coisas, mas o tempo que gastamos desenvolvendo nosso próprio sistema pode nos custar um pouco de tempo, e isso faz parte do sistema que não queremos perder muito tempo.
Então, estamos lendo sobre algumas bibliotecas de interface do usuário, como GUIchan, CEGUI e recentemente LibRocket, que aparentemente são muito flexíveis e úteis, então minha pergunta é se o Librocket poderia ser integrado a um projeto desenvolvido em SDL / OpenGL em C ++? e se você souber onde encontrar informações sobre isso, porque não conseguimos encontrar algo assim.
Eu acho que você precisa fazer algumas alterações no código libRocket para fazer passar a criação da janela. Não tenho certeza se existe outra maneira, mas tenho certeza de que esse trecho de código funcionará! e presumo que você esteja desenvolvendo para um sistema Windows, se você estiver direcionando para outra plataforma, existem etapas semelhantes, mas com diferentes variáveis e alterações de função!
Antes de tudo, você precisa obter um manipulador para a janela que o SDL cria. esse trecho de código extrai o valor HWND necessário (de acordo com aqui :
agora precisamos garantir que o libRocket use a mesma janela para sua renderização. Após uma pequena pesquisa nos arquivos, encontrei um arquivo
hg/shell/src/win32/ShellWin32.cpp
(o endereço é baseado no googlecode) que contém funções de criação de janelas. lá você vai ver uma função chamadabool Shell::OpenWindow(const char* name, bool attach_opengl)
. essa é a principal função responsável pela criação de uma janela. Para fazer com que o libRocket reutilize nossahwndSDL
variável, você deve remover / comentar todas as linhas nessa função, exceto estas:e pouco antes dessas linhas, adicione este pedaço de código:
Sei que provavelmente não é a melhor maneira de fazer um trabalho, mas tenho certeza que funcionará. e se você estiver direcionando algo diferente de janelas, basta encontrar equivalentes para o valor HWND e a função createwindow. eles certamente estão em algum lugar nos códigos, já que quase todos os sistemas de janelas, janelas ou não, compartilham a mesma lógica.
fonte