b23636c9 |
// Lab 1-1.
// This is the same as the first simple example in the course book,
// but with a few error checks.
// Remember to copy your file to a new on appropriate places during the lab so you keep old results.
// Note that the files "lab1-1.frag", "lab1-1.vert" are required.
#include "GL_utilities.h"
#include "MicroGlut.h"
// uses framework OpenGL
// uses framework Cocoa
// Globals
// Data would normally be read from files
GLfloat vertices[] =
{
-0.5f,-0.5f,0.0f,
-0.5f,0.5f,0.0f,
0.5f,-0.5f,0.0f
};
// vertex array object
unsigned int vertexArrayObjID;
void init(void)
{
// vertex buffer object, used for uploading the geometry
unsigned int vertexBufferObjID;
// Reference to shader program
GLuint program;
dumpInfo();
// GL inits
glClearColor(0.2,0.2,0.5,0);
glDisable(GL_DEPTH_TEST);
printError("GL inits");
// Load and compile shader
program = loadShaders("lab1-1.vert", "lab1-1.frag");
printError("init shader");
// Upload geometry to the GPU:
// Allocate and activate Vertex Array Object
glGenVertexArrays(1, &vertexArrayObjID);
glBindVertexArray(vertexArrayObjID);
// Allocate Vertex Buffer Objects
glGenBuffers(1, &vertexBufferObjID);
// VBO for vertex data
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID);
glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(glGetAttribLocation(program, "in_Position"), 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(glGetAttribLocation(program, "in_Position"));
// End of upload of geometry
printError("init arrays");
}
void display(void)
{
printError("pre display");
// clear the screen
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(vertexArrayObjID); // Select VAO
glDrawArrays(GL_TRIANGLES, 0, 3); // draw object
printError("display");
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitContextVersion(3, 2);
glutInitWindowSize(600, 600);
glutCreateWindow ("GL3 white triangle example");
glutDisplayFunc(display);
init ();
glutMainLoop();
return 0;
}
|