#include #include "UI.h" #include "Spiral.h" using namespace std; #include "vgl.h" #include "LoadShaders.h" enum VAO_IDs {Triangles, NumVAOs}; enum Buffer_IDs {ArrayBuffer, NumBuffers}; enum Attrib_IDs {vPosition = 0}; GLuint VAOs[NumVAOs]; GLuint Buffers[NumBuffers]; const GLuint NumVertices = 6; // globals Spiral mySpiral_G; GLuint program_G; bool DisplayHex_G = true; GLint thetaLoc; void init(void); void display(void); int main(int argc, char * argv[]){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(512, 512); glutInitContextVersion(3,0); glutInitContextProfile(GLUT_CORE_PROFILE); glutCreateWindow(argv[0]); if (glewInit()) { cerr<< "Unable to initialize GLEW " << endl; return -1; } init(); glutDisplayFunc(display); glutKeyboardFunc(Keypress); glutSpecialFunc(SpecialKeypress); glutKeyboardUpFunc(KeyUp); glutSpecialUpFunc(SpecialUp); KeyHelp(); glutMainLoop(); return 0; } void init(void) { glClearColor(1,1,1,1); glEnable(GL_PROGRAM_POINT_SIZE); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glGenVertexArrays(NumVAOs, VAOs); glBindVertexArray(VAOs[Triangles]); GLfloat vertices[NumVertices][2] = { { -0.90, 0.0}, { -0.60, 0.90}, { 0.60, 0.90}, { 0.90, 0.00}, { 0.60, -0.90}, { -0.60, -0.90} }; glGenBuffers(NumBuffers, Buffers); glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); ShaderInfo shaders [] = { { GL_VERTEX_SHADER, "triangles.vert"}, { GL_FRAGMENT_SHADER, "triangles.frag"}, { GL_NONE, NULL} }; program_G = LoadShaders(shaders); glUseProgram(program_G); thetaLoc = glGetUniformLocation(program_G, "theta"); glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); glEnableVertexAttribArray(vPosition); mySpiral_G.BindSpiral(program_G); return; } void display(void){ glClear(GL_COLOR_BUFFER_BIT); if(DisplayHex_G) { glUniform1f(thetaLoc, 0); glBindVertexArray(VAOs[Triangles]); glDrawArrays(GL_LINE_LOOP, 0, NumVertices); } mySpiral_G.Display(); glFlush(); return; }