//////////////////////////////// programHandle =glCreateProgram(); glAttachShader(programHandle, vShader); glAttachShader(programHandle, fShader); glLinkProgram(programHandle); glGetProgramiv(programHandle, GL_INFO_LOG_LENGTH, &infoLogLength); if(infoLogLength >0) { infoLog =(char *)malloc(infoLogLength); glGetProgramInfoLog(programHandle, infoLogLength, &charWritten, infoLog); printf(%s , infoLog); printf(************************************************************************** ); free(infoLog); } glUseProgram(programHandle); } ///////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// void InitVBO() { glGenBuffers(2, vboHandles); positionBufferHandle =vboHandles[0]; //colorBufferHandle =vboHandles[1]; ////////////////////////////////////// glBindBuffer(GL_ARRAY_BUFFER, positionBufferHandle); glBufferData(GL_ARRAY_BUFFER, sizeof(positionData), positionData,GL_STATIC_DRAW); //glBindBuffer(GL_ARRAY_BUFFER, colorBufferHandle); //glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW); ////////////////////////////////////////// glGenVertexArrays(1, &vaoHandle); glBindVertexArray(vaoHandle); ///////////////////////////////////////////// glEnableVertexAttribArray(0); //glEnableVertexAttribArray(1); /////////////////////////////////// glBindBuffer(GL_ARRAY_BUFFER, positionBufferHandle); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); //glBindBuffer(GL_ARRAY_BUFFER, colorBufferHandle); //glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL); } ///////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// void SetupRC() { glewInit(); SetupShader(); InitVBO(); glClearColor(1.0, 0.0, 0.0, 1.0); } ///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// void RenderScene() { glClear(GL_COLOR_BUFFER_BIT ); glBindVertexArray(vaoHandle); glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(0); elapseTimeUniformLocation =glGetUniformLocation(programHandle, time); fragLoopDurationLocation =glGetUniformLocation(programHandle,fragLoopDuration); loopDurationLocation =glGetUniformLocation(programHandle, loopDuration); //printf(%d %d ,elapseTimeUniformLocation, loopDurationLocation); glUniform1f(loopDurationLocation, 5.0f); glUniform1f(fragLoopDurationLocation, 10.0f); glUniform1f(elapseTimeUniformLocation, glutGet(GLUT_ELAPSED_TIME)/1000.0f ); glutSwapBuffers(); glutPostRedisplay(); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); glutInitWindowSize(800, 600); glutInitWindowPosition(0,0); glutCreateWindow(second triangle:active!); SetupRC(); glutDisplayFunc(RenderScene); glutMainLoop(); return 0; }
triangle.vert
#version 400
layout(location =0) in vec3 vertexPosition;
|