Hey all,
I've recently been in the process of moving from the DirectX/XNA camp to the OpenlGL side of things as of late. I've found the process very interesting and fun so far, but I keep running into an issue that has been irking me. Perhaps someone here can help.
I have been attempting to set up the Vertex Attribute Layout using the glBindVertexBuffer, glVertexAttribFormat, & glVertexAttribBinding commands, but I get a "0xC0000005: Access violation reading location 0x00000000" when glBindVertexBuffer is encountered. Are these commands supported in OpenGL 4.2? I tried to do some research to find what version these functions were introduced, but I haven't found anything specific as of yet.
In the case that they are supported in OpenGL 4.2, here is the setup code I am using:
[source lang="cpp"] //Interleave position, color, and UV data.
const float vertexData[] =
{
//Vertex 0
-.50f, .50f, 0.0f, 1.0f,
1.0f, 0.0, 0.0, 1.0f,
0.0f, 0.0f,
//Vertex 1
.50f, .50f, 0.0f, 1.0f,
0.0, .50, 0.0, 1.0f,
1.0f, 0.0f,
//Vertex 2
.50f, -.50f, 0.0f, 1.0f,
0.0, 0.0, 1.0, 1.0f,
1.0f, 1.0f,
//Vertex 3
-.50f, -.50f, 0.0f, 1.0f,
.50, .50, 1.0, 1.0f,
0.0f, 1.0f
};
//Build our 'vertex buffer'
glGenBuffers(1, &bufferName);
glBindBuffer(GL_ARRAY_BUFFER, bufferName);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
//Create the 'IA Layout'
//We crash right here
glBindVertexBuffer(0, bufferName, 0, sizeof(float) * 10);
glEnableVertexAttribArray(0);
glVertexAttribFormat(0, 4, GL_FLOAT, GL_FALSE, 0);
glVertexAttribBinding(0, 0);
glEnableVertexAttribArray(1);
glVertexAttribFormat(1, 4, GL_FLOAT, GL_FALSE, sizeof(float) * 4);
glVertexAttribBinding(1, 0);
glEnableVertexAttribArray(2);
glVertexAttribFormat(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 8);
glVertexAttribBinding(2, 0);
/* This will set up things fine */
//glEnableVertexAttribArray(0);
//glVertexAttribPointer(0, 4, GL_FLOAT, false, sizeof(float) * 10, reinterpret_cast<void*>(0));
//glEnableVertexAttribArray(1);
//glVertexAttribPointer(1, 4, GL_FLOAT, false, sizeof(float) * 10, reinterpret_cast<void*>(sizeof(float) * 4));
//glEnableVertexAttribArray(2);
//glVertexAttribPointer(2, 2, GL_FLOAT, false, sizeof(float) * 10, reinterpret_cast<void*>(sizeof(float) * 8));[/source]
I'm using GLEW and I'm running Visual Studio 2010. I'm guessing that it may not be supported on 4.2, and thus GLEW is returning a null pointer to the function it can't find, but I want to be sure.
Popular Topics
Advertisement