Reputation: 991
I was trying to make 5 vertex array objects(vao) using 1 array for init() function.
However, glGenVertexArrays( 5, &vao ) throws me an error and I don't understand why it does.
I guess I don't fully understand the behavior of the function.
Can anyone tell me what's going on here?
Here is my original code:
void
init(){
// Subdivide a tetrahedron into a sphere
Index = 0; tetrahedron( 1, 0, NumTimesToSubdivide-4 );
Index = 0; tetrahedron( 0, 1, NumTimesToSubdivide-3 );
Index = 0; tetrahedron( 0, 2, NumTimesToSubdivide-2 );
Index = 0; tetrahedron( 0, 3, NumTimesToSubdivide-1);
Index = 0; tetrahedron( 0, 4, NumTimesToSubdivide );
// Create a vertex array object
**glGenVertexArrays( 5, &vao ); // Error occurs on this line**
for ( int i=0; i<5; i++ )
{
glBindVertexArray( vao[i] );
GLuint buffer;
glGenBuffers( 1, &buffer );
glBindBuffer( GL_ARRAY_BUFFER, buffer );
glBufferData( GL_ARRAY_BUFFER, sizeof(points[i]) + sizeof(normals[i]),NULL, GL_STATIC_DRAW );
glBufferSubData( GL_ARRAY_BUFFER, 0, sizeof(points[i]), &(points[i]) );
glBufferSubData( GL_ARRAY_BUFFER, sizeof(points[i]),sizeof(normals[i]), &(normals[i]) );
}
// Load shaders and use the resulting shader program
GLuint program = InitShader( "vshader.glsl", "fshader.glsl" );
glUseProgram( program );
// set up vertex arrays
GLuint vPosition = glGetAttribLocation( program, "vPosition" );
glEnableVertexAttribArray( vPosition );
glVertexAttribPointer( vPosition, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0) );
GLuint vNormal = glGetAttribLocation( program, "vNormal" );
glEnableVertexAttribArray( vNormal );
glVertexAttribPointer( vNormal, 3, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(sizeof(points)) );
AmbientProduct = glGetUniformLocation(program, "AmbientProduct");
DiffuseProduct = glGetUniformLocation(program, "DiffuseProduct");
SpecularProduct = glGetUniformLocation(program, "SpecularProduct");
LightPosition = glGetUniformLocation(program, "LightPosition");
Shininess = glGetUniformLocation(program, "Shininess");
Transformation = glGetUniformLocation( program, "Transformation" );
View = glGetUniformLocation( program, "View" );
Projection = glGetUniformLocation( program, "Projection" );
glEnable( GL_DEPTH_TEST );
glClearColor(0.0, 0.0, 0.0, 0.0 ); /* Black background */
}
Here is the error messages:
error C2664: 'void (GLsizei,GLuint *)' : cannot convert parameter 2 from 'GLuint (*)[5]' to 'GLuint *'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
error C2664: 'void (GLsizei,GLuint *)' : cannot convert parameter 1 from 'GLuint (*)[5]' to 'GLsizei'
1> There is no context in which this conversion is possible
Upvotes: 3
Views: 1706
Reputation: 52164
Arrays are already pointers. You don't need the &
:
glGenVertexArrays( 5, vao );
Upvotes: 3