我们的应用程序崩溃..Nvidia的老司机,调用glDrawArrays异常访问冲突旧的Nvidia驱动程序
调试代码here
放眼望去,here他们说,这往往是由于不正确的顶点属性设置
这是怎么设置我的VBO和维罗:
/**
* Init Vbo/vao.
*/
float[] vertexData = new float[]{
0, 0,
1, 0,
1, 1};
debugVbo = new int[1];
gl3.glGenBuffers(1, debugVbo, 0);
gl3.glBindBuffer(GL3.GL_ARRAY_BUFFER, debugVbo[0]);
{
FloatBuffer buffer = GLBuffers.newDirectFloatBuffer(vertexData);
gl3.glBufferData(GL3.GL_ARRAY_BUFFER, vertexData.length * Float.BYTES, buffer, GL3.GL_STATIC_DRAW);
}
gl3.glBindBuffer(GL3.GL_ARRAY_BUFFER, 0);
debugVao = new int[1];
gl3.glGenVertexArrays(1, debugVao, 0);
gl3.glBindVertexArray(debugVao[0]);
{
gl3.glBindBuffer(GL3.GL_ARRAY_BUFFER, debugVbo[0]);
{
gl3.glEnableVertexAttribArray(0);
{
gl3.glVertexAttribPointer(0, 2, GL3.GL_FLOAT, false, 0, 0);
}
}
gl3.glBindBuffer(GL3.GL_ARRAY_BUFFER, 0);
}
gl3.glBindVertexArray(0);
}
这就是我的呈现方式:
public static void render(GL3 gl3) {
gl3.glClear(GL3.GL_DEPTH_BUFFER_BIT | GL3.GL_COLOR_BUFFER_BIT);
gl3.glUseProgram(textureProgram);
{
gl3.glBindVertexArray(debugVao[0]);
{
gl3.glActiveTexture(GL3.GL_TEXTURE0);
gl3.glBindTexture(GL3.GL_TEXTURE_2D, texture[0]);
gl3.glBindSampler(0, EC_Samplers.pool[EC_Samplers.Id.clampToEdge_nearest_0maxAn.ordinal()]);
{
gl3.glDrawArrays(GL3.GL_TRIANGLES, 0, 3);
}
gl3.glBindTexture(GL3.GL_TEXTURE_2D, 0);
gl3.glBindSampler(0, 0);
}
gl3.glBindVertexArray(0);
}
gl3.glUseProgram(0);
}
这是我的VS:
#version 330
layout (location = 0) in vec2 position;
uniform mat4 modelToCameraMatrix;
uniform mat4 cameraToClipMatrix;
out vec2 fragmentUV;
void main()
{
gl_Position = cameraToClipMatrix * modelToCameraMatrix * vec4(position, 0, 1);
fragmentUV = position;
}
我的FS:
#version 330
in vec2 fragmentUV;
out vec4 outputColor;
uniform sampler2D textureNode;
void main()
{
outputColor = texture(textureNode, fragmentUV);
}
我读和重读,因为现在2天相同的代码,我无法找到任何东西错误。 我也试着定义一个2 * 4 = 8的步幅,但是结果相同..
到目前为止,您的代码看起来正确,但我建议您使用glGetError调用(每个常规OpenGL调用后调用它)看看它究竟在哪里失败。有些奇怪的事情正在发生。另外对于快速测试,我建议你在* drawing *代码中设置一个完整的顶点attrib指针,而不是依赖于VAO;如果这样的话,你知道VAO正在发生什么。 – datenwolf
尝试完整的顶点attrib指针设置。我会尝试glGetError喷涂,谢谢 – elect
谁-1ed,你介意解释吗? – elect