2017-05-07 4 views
0

J'essaie d'utiliser SFML + OpenGL ensemble, mais je ne le comprends pas bien. Dans les tutoriels, il a été écrit que je devrais utiliser window.setActive (false).SFML + OpenGL: Comment travailler avec eux en même temps?

Mon code:

#include <SFML/Graphics.hpp> 
#include <SFML/OpenGL.hpp> 
#include <iostream> 
#include <sstream> 
#include <math.h> 

using namespace std; 

int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(640, 480), "SFML works!"); 

    sf::FloatRect frect; 
    sf::Font font; 
    font.loadFromFile("PaPYRUS.ttf"); 
    int z=45; 
    int x=0, y=0; 
    stringstream l; 
    l<<z; 
    cout<<l.str()<<endl; 
    string s="Lololololooooooooooooooooooooooooo0000000000oooooooooo\nlololololol "+l.str()+" lololo"; 
    sf::Text text(s, font, 20); 
    text.setPosition(20, 40); 
    frect=text.getGlobalBounds(); 
    cout<<frect.height<<" "<<frect.left<<" "<<frect.top<<" "<<frect.width; 

    bool running=true; 
    int x2=0, y2=0; 
    sf::CircleShape shape(30); 
    shape.setFillColor(sf::Color::Green); 


    while (running) 
    { 
     sf::Event event; 
     while (window.pollEvent(event)) 
     { 
      x2+=2; 
      y2++; 
      shape.setPosition(x2, y2); 
      if (event.type == sf::Event::Closed) 
       running=false; 
     } 

     // From that place problems begin 
     window.setActive(true); 
      glClearColor(0.0f, 0.0f, 0.1f, 0.0f); 
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     window.setActive(false); 
     window.draw(shape); 
     window.draw(text); 

     window.setActive(true); 
      glColor3f(1.0f, 0.0f, 0.1f); 
      glBegin(GL_POLYGON); 
      for (float i = 0; i<2 * 3.14; i += float(3.14/4)) 
      { 
       glVertex2f(20 + 5*sinf(i), 40 + 6*cosf(i)); 
      } 
     window.setActive(false); 

     window.display(); 
    } 
    return 0; 
} 

Lorsque je commente une partie OpenGL avec le dessin du cercle, tout est ok. Je mets window.setActive (false) dans d'autres endroits du code, mais cela ne fonctionne pas.

Erreurs: « Impossible d'activer le contexte de la fenêtre » « Impossible de désactiver le contexte OpenGL: Un »

S'il vous plaît, si vous le pouvez, montrer comment faire ce code à droite.

+0

L'utilisation de window.setActive (false) est une erreur. Plus tard essayé avec window.pushGLStates(); et window.popGLStates() ;, mais rien de bon –

Répondre

0

pushGLStates et popGLStates sont ce que vous devriez utiliser. Selon le tutorial vous devez pousser les états avant de tirer avec le module graphique SFML, pop alors les états lorsque vous avez terminé et que vous souhaitez revenir à l'utilisation opengl brut:

glDraw... 

window.pushGLStates(); 

window.draw(...); 

window.popGLStates(); 

glDraw... 

Si vous avez encore des problèmes, il y a une example inclus avec la source, que vous pouvez utiliser pour vérifier qu'il n'y a pas de problème plus sérieux