IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Les VBO ne fonctionnent pas sans VAO :( [OpenGL 3.x]


Sujet :

OpenGL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut Les VBO ne fonctionnent pas sans VAO :(
    Bonjour,

    J'ai un petit problème. Je souhaite afficher un triangle. Je suis partie d'un exemple qui utilsie des VAO mais je ne souhaite pas utilsier de VAO, mais uniquement des VBO.
    Voici le code qui fonctionne sous QT avec VAO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    void MyGLWindow::initialize()
    { 
        m_program = new QOpenGLShaderProgram(m_context);  // create shader program
        m_program->addShaderFromSourceFile(QOpenGLShader::Vertex, "D://QTMobile//MyProjects_Desktop//vertexColors.vert"); // load vertex shader
        m_program->addShaderFromSourceFile(QOpenGLShader::Fragment, "D://QTMobile//MyProjects_Desktop//vertexColors.frag");     // load fragment shader
        m_program->link(); // compile and link shader program
     
     
    	const float vertexData[] = {
              // x    y     z    w
              0.0f, 0.5f, 0.0f, 1.0f,
              0.5f, -0.366f, 0.0f, 1.0f,
              -0.5f, -0.366f, 0.0f, 1.0f,
     
              // R    G     B    A
              1.0f, 0.0f, 0.0f, 1.0f,
              0.0f, 1.0f, 0.0f, 1.0f,
              0.0f, 0.0f, 1.0f, 1.0f,
          };
     
          // create Vertex Buffer Object
          glGenBuffers(1, &VB_Position);
          glBindBuffer(GL_ARRAY_BUFFER, VB_Position);
          glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
          glBindBuffer(GL_ARRAY_BUFFER, 0);
    }
     
     
    void MyGLWindow::render()
    {
        m_context->makeCurrent(this); // context is current
     
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        glClear(GL_COLOR_BUFFER_BIT);
     
        glUseProgram(m_program->programId()); // active shader program
        GLuint positionIndex	= glGetAttribLocation(m_program->programId(), "position");
        GLuint colorIndex		= glGetAttribLocation(m_program->programId(), "color");
     
    	glBindVertexArray(VAO);
    	glDrawArrays(GL_TRIANGLES, 0, 3);
    	glBindVertexArray(0);
     
        glUseProgram(0);
     
        m_context->swapBuffers(this);
    }
    Je l'ai modifier pour ne plus utiliser de VAO, mais j'ai un écran noir !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    void MyGLWindow::initialize()
    { 
        m_program = new QOpenGLShaderProgram(m_context);  // create shader program
        m_program->addShaderFromSourceFile(QOpenGLShader::Vertex, "D://QTMobile//MyProjects_Desktop//vertexColors.vert"); // load vertex shader
        m_program->addShaderFromSourceFile(QOpenGLShader::Fragment, "D://QTMobile//MyProjects_Desktop//vertexColors.frag");     // load fragment shader
        m_program->link(); // compile and link shader program
     
     
    	const float vertexData[] = {
              // x    y     z    w
              0.0f, 0.5f, 0.0f, 1.0f,
              0.5f, -0.366f, 0.0f, 1.0f,
              -0.5f, -0.366f, 0.0f, 1.0f,
     
              // R    G     B    A
              1.0f, 0.0f, 0.0f, 1.0f,
              0.0f, 1.0f, 0.0f, 1.0f,
              0.0f, 0.0f, 1.0f, 1.0f,
          };
     
          // create VBO
          glGenBuffers(1, &VB_Position);
          glBindBuffer(GL_ARRAY_BUFFER, VB_Position);
          glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
          glBindBuffer(GL_ARRAY_BUFFER, 0);
     
          // create VAO
          glGenVertexArrays(1, &VAO);
          glBindVertexArray(VAO);
     
          glBindBuffer(GL_ARRAY_BUFFER, VB_Position);
          glEnableVertexAttribArray(0);
          glEnableVertexAttribArray(1);
          glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
          glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (void*)48);
     
          glBindVertexArray(0);
          glBindBuffer(GL_ARRAY_BUFFER, 0);
    }
     
     
    void MyGLWindow::render()
    {
        m_context->makeCurrent(this); // context is current
     
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        glClear(GL_COLOR_BUFFER_BIT);
     
        glUseProgram(m_program->programId()); // active shader program
        GLuint positionIndex	= glGetAttribLocation(m_program->programId(), "position");
        GLuint colorIndex		= glGetAttribLocation(m_program->programId(), "color");
     
     glBindBuffer(GL_ARRAY_BUFFER, VB_Position);
     
        glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
        glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (void*)48);
        glEnableVertexAttribArray(0);
        glEnableVertexAttribArray(1);
     
        glDrawArrays(GL_TRIANGLES, 0, 3);
     
     
        glDisableVertexAttribArray(0);
        glDisableVertexAttribArray(1);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
     
        glUseProgram(0);
     
        m_context->swapBuffers(this);
    }
    Je n'ai rien modifié d'autre. Qu'est ce qui cloche ?
    J'ai essayé aussi de séparer les tabelaux de position et couleur et écran noir aussi.

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    Résolu. OpenGL 3.3 a besoin de VAO apparemment mais pas les versions antérieurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Flash 8]les liens ne fonctionnent pas ?
    Par benedict17 dans le forum Flash
    Réponses: 1
    Dernier message: 28/03/2008, 11h35
  2. Réponses: 3
    Dernier message: 05/02/2008, 10h03
  3. [2008] "Gérer les utilisateurs" ne fonctionne pas
    Par gifffftane dans le forum Mandriva / Mageia
    Réponses: 3
    Dernier message: 06/12/2007, 17h22
  4. les liens ne fonctionnent pas
    Par knopflerized dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 29/10/2007, 18h11
  5. Les EL ne fonctionnent pas !
    Par tequila13 dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 16/06/2007, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo