Ich möchte wissen, ob es möglich ist, OpenGL 3.1 + Kern-Profil mit Vertex-Arrays (Client-Seite Rendering nicht Sofort-Modus) ohne Verwendung der VBO zu zeichnen. Ich weiß in opengl 3.1+ Kernprofil Verwendung von VAO ist von wesentlicher Bedeutung. Ich möchte wissen, ob es möglich ist, ohne VBO zu zeichnen, indem Vertexarrays (clientseitige Vertexarray nicht Sofortmodus) verwendet.Rendering in opengl 3.1 + ohne VBO mit clientseitige Vertex Array
PS Ich spreche über Client-Vertex-Array nicht Sofort-Modus. Ich möchte wissen, ob ich einen VAO ohne VBO erstellen kann
Ich habe dies irgendwo in opengl spec Immediate-Modus Vertex-Attribut-Spezifikation gelesen, clientseitige Vertex-Arrays ist entzogen. Vertex-Attribute müssen in einem oder mehreren Buffer-Objekten gespeichert oder explizit mit glVertexAttrib *() angegeben werden. Seit OpenGL 3.2 Vertex Array-Objekte verwenden ist obligatorisch. So bedeutet dies bedeutet, dass ich Vertex-Array-Daten unter Verwendung der glVertexAttriPointer wie diese
glBindVertexArray(m_vaoHandle);
glEnableVertexAttribArray(m_attributes[POSITION_HANDLE]);
glVertexAttribPointer(m_attributes[POSITION_HANDLE], 3, GL_FLOAT, false, 0,vertexArray);
glEnableVertexAttribArray(m_attributes[TEXCOORDINATE_HANDLE]);
glVertexAttribPointer(m_attributes[TEXCOORDINATE_HANDLE], 2, GL_FLOAT, false, 0, textureArray);
glBindVertexArray(0);
Hier vertexArray und textureArray sind zwei Arrays auf CPU nicht VBO angeben. Dann, während sie
glUseProgram(m_Program);
// Explicitly unbind buffer so attrib pointer knows to slurp in array.
glBindBuffer(GL_ARRAY_BUFFER, 0);
//bind vertex array object
glBindVertexArray(m_vaoHandle);
glDrawArrays(mode, 0, numVertices);
glBindVertexArray(0);
Wenn seine mögliche in OpenGL 3.1 + zeichnen, würde ich auch wenn ihr möglich in OpenGLES 3.0
Nein. Lesen Sie [die Dokumente] (https://www.opengl.org/sdk/docs/man/html/glVertexAttribPointer.xhtml). Insbesondere über den letzten Parameter. – Drop
Es bedeutet genau was du aus der Spezifikation zitierst. Keine clientseitigen Vertex-Arrays. 'glVertexAttrib *()' bezieht sich auf Aufrufe wie 'glVertexAttrib4fv()', mit denen Sie "konstante" Werte für Vertexattribute angeben können, d. h. Attribute, bei denen alle Vertices den gleichen Wert haben. –