//prepare shader program ZFile* vsFile = [[ZFile alloc] initWithFile: vsName]; ZFile* fsFile = [[ZFile alloc] initWithFile: fsName]; const char * vs = [vsFile buffer]; const char * fs = [fsFile buffer]; //setup shaders GLuint myVertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(myVertexShader, 1, &vs, NULL); glCompileShader(myVertexShader); GLuint myFragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(myFragmentShader, 1, &fs, NULL); glCompileShader(myFragmentShader); GLuint myProgram = glCreateProgram(); glAttachShader(myProgram, myVertexShader); glAttachShader(myProgram, myVertexShader); glLinkProgram(myProgram); glUseProgram(myProgram); //setup VBO // generate a new VBO and get the associated ID glGenBuffers(1, &vboId1); // bind VBO in order to use glBindBuffer(GL_ARRAY_BUFFER, vboId1); // upload data to VBO glBufferData(GL_ARRAY_BUFFER, 3*vCount*sizeof(GLfloat), vertices, GL_STATIC_DRAW); // it is safe to delete after copying data to VBO // generate a new VBO and get the associated ID glGenBuffers(1, &vboId2); // bind VBO in order to use glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboId2); // upload data to VBO glBufferData(GL_ELEMENT_ARRAY_BUFFER, 3*pCount*sizeof(GLuint), polygons, GL_STATIC_DRAW); [ leaf setVboIDv: vboId1 ]; [ leaf setNumberOfVertices: vCount ]; [ leaf setVboIDp: vboId2 ]; [ leaf setNumberOfPolygons: pCount ]; //draw glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glBindBuffer(GL_ARRAY_BUFFER, [ leaf vboIDv ]); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, [ leaf vboIDp ]); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, 0); glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0); glDisableClientState(GL_VERTEX_ARRAY); // bind with 0, so, switch back to normal pointer operation glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glUseProgram(0); //with out this line: black screen, with: fixed function rendering
I seriously appreciate your help,
-Tobey












