Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GL/glew.h>
- #include <GLFW/glfw3.h>
- #include <stdexcept>
- GLFWwindow* gWindow = NULL;
- GLint gProgram = 0;
- GLuint gVertexShader = 0;
- GLuint gFragmentShader = 0;
- GLuint gVAO = 0;
- GLuint gVBO = 0;
- int main() {
- /** Initialise GLFW **/
- glfwInit();
- glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
- glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
- gWindow = glfwCreateWindow(800, 600, "OpenGL 3.2", NULL, NULL);
- glfwMakeContextCurrent(gWindow);
- /** Initialise GLEW **/
- glewInit();
- /** Set up shaders **/
- gVertexShader = glCreateShader(GL_VERTEX_SHADER);
- gFragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- const char* vertexShaderStrings = R"(
- #version 150
- in vec3 vertexPos;
- in vec3 vertexColour;
- out vec3 colour;
- void main() {
- colour = vertexColour;
- gl_Position = vec4(vertexPos, 1);
- })";
- const char* fragmentShaderStrings = R"(
- #version 150
- in vec3 colour;
- out vec4 fragColour;
- void main() {
- fragColour = vec4(colour,1);
- })";
- glShaderSource(gVertexShader, 1, (const GLchar**)&vertexShaderStrings, NULL);
- glShaderSource(gFragmentShader, 1, (const GLchar**)&fragmentShaderStrings, NULL);
- glCompileShader(gVertexShader);
- glCompileShader(gFragmentShader);
- /** Set up program **/
- gProgram = glCreateProgram();
- glAttachShader(gProgram, gVertexShader);
- glAttachShader(gProgram, gFragmentShader);
- glLinkProgram(gProgram);
- glUseProgram(gProgram);
- glDetachShader(gProgram, gVertexShader);
- glDetachShader(gProgram, gFragmentShader);
- glDeleteShader(gVertexShader);
- glDeleteShader(gFragmentShader);
- /** Set up VAO and VBO **/
- GLfloat vertexData[] = {
- // X, Y, Z, R, G, B,
- 0.0f, 0.8f, 0.0f, 1.0f, 0.0f, 0.0f,
- -0.8f,-0.8f, 0.0f, 0.0f, 1.0f, 0.0f,
- 0.8f,-0.8f, 0.0f, 0.0f, 0.0f, 1.0f,
- };
- glGenVertexArrays(1, &gVAO);
- glBindVertexArray(gVAO);
- glGenBuffers(1, &gVBO);
- glBindBuffer(GL_ARRAY_BUFFER, gVBO);
- glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
- GLuint vertexPos = glGetAttribLocation(gProgram, "vertexPos");
- glEnableVertexAttribArray(vertexPos);
- glVertexAttribPointer(vertexPos, 3, GL_FLOAT, GL_FALSE, 6*sizeof(GL_FLOAT), NULL);
- GLuint vertexColour = glGetAttribLocation(gProgram, "vertexColour");
- glEnableVertexAttribArray(vertexColour);
- glVertexAttribPointer(vertexColour, 3, GL_FLOAT, GL_FALSE, 6*sizeof(GL_FLOAT), (const void*)(3*sizeof(GL_FLOAT)));
- /** Main Loop **/
- while (!glfwWindowShouldClose(gWindow)) {
- glfwPollEvents();
- glClearColor(0, 0, 0, 1);
- glClear(GL_COLOR_BUFFER_BIT);
- glDrawArrays(GL_TRIANGLES, 0, 3);
- glfwSwapBuffers(gWindow);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement