2015-10-26 5 views
2

J'utilise LWJGL 3 sous OSX. Les shaders fonctionnent correctement lors de l'utilisation d'une version < 150 mais le portage du code sur 330 ne rend rien.LWJGL 3 Shaders version 150 et supérieure ne restituant rien

Mes shaders sont aussi simples que possible:

vertex shader:

#version 330 core 

in vec3 position; 

void main(void) { 
    gl_Position = vec4(position, 1.0); 
} 

fragment shader:

#version 330 core 

out vec4 outColour; 

void main(void) { 
    outColour = vec4(1.0, 0.0, 0.0, 1.0); 
} 

créer un triangle simple comme celui-ci (Scala) :

val vertices = Array(
    0.0f, 0.5f, 0.0f, 
    -0.5f, -0.5f, 0.0f, 
    0.5f, -0.5f, 0.0f 
) 
val vertexBuffer = BufferUtils.createFloatBuffer(vertices.length) 
vertexBuffer.put(vertices) 
vertexBuffer.flip() 

val buffer = GL15.glGenBuffers() 
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, buffer) 
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexBuffer, GL15.GL_STATIC_DRAW) 

et je tire comme ceci:

GL20.glUseProgram(shader) 
GL20.glEnableVertexAttribArray(0) 

GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, buffer) 
GL20.glBindAttribLocation(shader, 0, "position") 
GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0) 
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 9) 

GL20.glDisableVertexAttribArray(0) 
GL20.glUseProgram(0) 

Les shaders fins et le compilez programme fonctionne, mais je reçois juste un écran vide! Y at-il quelque chose qui ne va pas avec mon code?

+2

Où est votre VAO? Ceux-ci sont requis dans un contexte de base. – genpfault

+3

@ j-p: Aucun index n'est impliqué lors du dessin avec glDrawArrays. Seule la famille glDrawElements utilise des indices. – BDL

+0

pourquoi le vote vers le bas? S'il vous plaît expliquer si je peux améliorer la question – Oli

Répondre

1

Vertex Array Objects (VAOs) sont requis pour le rendu dans un contexte Core. Dans les contextes de compatibilité, ils sont facultatifs.

Cependant, vous pouvez simplement générer un au démarrage et laissez lié si vous vous sentez paresseux :)