void shader_draw( shader* this, unsigned int vbo_id, unsigned int vertex_count, GLenum draw_mode) {
if ( this == NULL) {
debug_warning( "[shader_draw] this cannot be NULL" ) ;
return ;
}
this-> bind( this) ; /* Not usually here. Putting it here doesn't seem to help. Makes appropriate calls to glUseProgram() */
if ( this-> vertex_array_object_id == 0 ) {
/* No VAO initialized yet, we create one just in time */
glGenVertexArrays( 1 , & this-> vertex_array_object_id) ; /* Generate and bind the VAO so we can set the values. */
glBindVertexArray( this-> vertex_array_object_id) ;
glEnableVertexAttribArray( 0 ) ; /* Enable vertex attributes. */
glEnableVertexAttribArray( 1 ) ;
glVertexAttribPointer( 0 , 2 , GL_FLOAT, GL_FALSE, sizeof ( float ) * 4 , NULL) ; /* Set up the shader vertex format (XY position, XY texcoord) */
glVertexAttribPointer( 1 , 2 , GL_FLOAT, GL_FALSE, sizeof ( float ) * 4 , ( void * ) ( sizeof ( float ) * 2 ) ) ;
}
glBindVertexArray( this-> vertex_array_object_id) ; /* Binds correct VAO. Each shader has been confirmed to have a seperate stored VAO. ? */
glBindBuffer( GL_ARRAY_BUFFER, vbo_id) ; /* Should be binding unique target VBO, passed as argument */
glDrawArrays( draw_mode, 0 , vertex_count) ; /* Draw VBO to screen. Textures are handled earlier and don't seem to be much of a problem */
/* When drawn, it seems to take VBOs from different VAOs, resulting in really odd distortion */
}
dm9pZCBzaGFkZXJfZHJhdyhzaGFkZXIqIHRoaXMsIHVuc2lnbmVkIGludCB2Ym9faWQsIHVuc2lnbmVkIGludCB2ZXJ0ZXhfY291bnQsIEdMZW51bSBkcmF3X21vZGUpIHsKICAgICAgICBpZiAodGhpcyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICBkZWJ1Z193YXJuaW5nKCJbc2hhZGVyX2RyYXddIHRoaXMgY2Fubm90IGJlIE5VTEwiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHRoaXMtPmJpbmQodGhpcyk7IC8qIE5vdCB1c3VhbGx5IGhlcmUuIFB1dHRpbmcgaXQgaGVyZSBkb2Vzbid0IHNlZW0gdG8gaGVscC4gTWFrZXMgYXBwcm9wcmlhdGUgY2FsbHMgdG8gZ2xVc2VQcm9ncmFtKCkgKi8KCiAgICAgICAgaWYgKHRoaXMtPnZlcnRleF9hcnJheV9vYmplY3RfaWQgPT0gMCkgewogICAgICAgICAgICAgICAgLyogTm8gVkFPIGluaXRpYWxpemVkIHlldCwgd2UgY3JlYXRlIG9uZSBqdXN0IGluIHRpbWUgKi8KCiAgICAgICAgICAgICAgICBnbEdlblZlcnRleEFycmF5cygxLCAmdGhpcy0+dmVydGV4X2FycmF5X29iamVjdF9pZCk7IC8qIEdlbmVyYXRlIGFuZCBiaW5kIHRoZSBWQU8gc28gd2UgY2FuIHNldCB0aGUgdmFsdWVzLiAqLwogICAgICAgICAgICAgICAgZ2xCaW5kVmVydGV4QXJyYXkodGhpcy0+dmVydGV4X2FycmF5X29iamVjdF9pZCk7CgogICAgICAgICAgICAgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsgLyogRW5hYmxlIHZlcnRleCBhdHRyaWJ1dGVzLiAqLwogICAgICAgICAgICAgICAgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKCiAgICAgICAgICAgICAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCBzaXplb2YoZmxvYXQpICogNCwgTlVMTCk7IC8qIFNldCB1cCB0aGUgc2hhZGVyIHZlcnRleCBmb3JtYXQgKFhZIHBvc2l0aW9uLCBYWSB0ZXhjb29yZCkgKi8KICAgICAgICAgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcigxLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIHNpemVvZihmbG9hdCkgKiA0LCAodm9pZCopIChzaXplb2YoZmxvYXQpICogMikpOwogICAgICAgIH0gICAgICAgCgogICAgICAgIGdsQmluZFZlcnRleEFycmF5KHRoaXMtPnZlcnRleF9hcnJheV9vYmplY3RfaWQpOyAvKiBCaW5kcyBjb3JyZWN0IFZBTy4gRWFjaCBzaGFkZXIgaGFzIGJlZW4gY29uZmlybWVkIHRvIGhhdmUgYSBzZXBlcmF0ZSBzdG9yZWQgVkFPLiA/ICovCiAgICAgICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgdmJvX2lkKTsgLyogU2hvdWxkIGJlIGJpbmRpbmcgdW5pcXVlIHRhcmdldCBWQk8sIHBhc3NlZCBhcyBhcmd1bWVudCAqLwoKICAgICAgICBnbERyYXdBcnJheXMoZHJhd19tb2RlLCAwLCB2ZXJ0ZXhfY291bnQpOyAvKiBEcmF3IFZCTyB0byBzY3JlZW4uIFRleHR1cmVzIGFyZSBoYW5kbGVkIGVhcmxpZXIgYW5kIGRvbid0IHNlZW0gdG8gYmUgbXVjaCBvZiBhIHByb2JsZW0gKi8KCiAgICAgICAgLyogV2hlbiBkcmF3biwgaXQgc2VlbXMgdG8gdGFrZSBWQk9zIGZyb20gZGlmZmVyZW50IFZBT3MsIHJlc3VsdGluZyBpbiByZWFsbHkgb2RkIGRpc3RvcnRpb24gKi8KfQo=
compilation info
prog.c:1:18: error: unknown type name ‘shader’
void shader_draw(shader* this, unsigned int vbo_id, unsigned int vertex_count, GLenum draw_mode) {
^
prog.c:1:80: error: unknown type name ‘GLenum’
void shader_draw(shader* this, unsigned int vbo_id, unsigned int vertex_count, GLenum draw_mode) {
^
stdout