Bonjour,
But:J'essaie d'implémenter dans mon moteur la possibilité de passer en mode pleine écran.
Problème rencontré: Le rendu d'origine (première création de la fenêtre) fonctionne parfaitement, en revanche lorsque je change d'état en récréant la fenêtre (RenderWindow.create) les fonctions d'OpenGL modern ne fonctionne plus (avec glGetError j'obtiens: "Unknow error") et j'obtiens juste le background avec la couleur correspondante.
Je parle bien de fonctions modern parce que par exemple glClearColor fonctionne.
Je précise que j'ai vérifié le reste du programme et les fonctions Init et ReInit sont bien appelées et que le reste du moteur s'update correctement (coordonnées des objets s'actualisent etc...)
=>Tout fonctionne sauf le rendu.
Fonction Init (lors du lancement du moteur):
//Setup settings for window
m_settings = sf::ContextSettings();
m_settings.depthBits = 24;
m_settings.stencilBits = 8;
m_settings.majorVersion = 4;
m_settings.minorVersion = 0;
m_settings.antialiasingLevel = m_winsettings.AntiAliasingLevel;
m_window.create(sf::VideoMode(m_winsettings.Size.x, m_winsettings.Size.y, 32), GetGame()->GetName(), m_winsettings.Style, m_settings);
m_window.setFramerateLimit(m_winsettings.FrameLimit);
m_window.setVerticalSyncEnabled(m_winsettings.UseSynchronisation);
m_window.setKeyRepeatEnabled(true);
//CenterScreen
m_centerscreen.x = m_winsettings.Size.x / 2.0f + m_window.getPosition().x;
m_centerscreen.y = m_winsettings.Size.y / 2.0f + m_window.getPosition().y;
//Init glew
glewExperimental = GL_TRUE;
glewInit();
//OpenGl settings
glEnable(GL_DEPTH_TEST);
glEnable(GL_STENCIL_TEST);
glDepthFunc(GL_LESS);
glDisable(GL_CULL_FACE);
//glEnable(GL_CULL_FACE);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
Fonction ToggleScreen (appelée pour changer d'état):
if (m_winsettings.Style == sf::Style::Fullscreen)
{
m_winsettings.Style = sf::Style::Close;
m_window.create(sf::VideoMode(m_winsettings.Size.x, m_winsettings.Size.y, 32), GetGame()->GetName(), m_winsettings.Style, m_settings);
}
else
{
m_winsettings.Style = sf::Style::Fullscreen;
m_window.create(sf::VideoMode(m_winsettings.Size.x, m_winsettings.Size.y, 32), GetGame()->GetName(), m_winsettings.Style, m_settings);
}
ReInit();
Et la fonction ReInit (appelée pour "Update" l'état du rendu):
//OpenGl settings
glEnable(GL_DEPTH_TEST);
glEnable(GL_STENCIL_TEST);
glDepthFunc(GL_LESS);
glDisable(GL_CULL_FACE);
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
m_window.setFramerateLimit(m_winsettings.FrameLimit);
m_window.setVerticalSyncEnabled(m_winsettings.UseSynchronisation);
m_window.setKeyRepeatEnabled(true);
m_window.setActive();
glViewport(0, 0, m_window.getSize().x, m_window.getSize().y);
m_centerscreen.x = m_window.getPosition().x + m_window.getSize().x / 2.0f;
m_centerscreen.y = m_window.getPosition().y + m_window.getSize().y / 2.0f;
GetGame()->GetEvent()->ReInit();
Merci pour votre aide !