Created
February 14, 2016 13:39
-
-
Save zehel2892/f9867f2d25ca045acc9f to your computer and use it in GitHub Desktop.
This is the first code that ran correctly with correct shaders and mesh creation for SDL2 and modern OpenGL. Display class is taken from previous project.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<iostream> | |
#include"display.h" | |
#include<SDL2/SDL.h> | |
#include<GL/glew.h> | |
//#include "shader.h" | |
//#include "mesh.h" | |
using namespace ns_OCTAD::ns_display; | |
// we use int argc , char * argv[] to make the software to be run by cmd | |
int main(int argc, char * argv[]) | |
{ | |
// Shaders | |
const GLchar* vertexShaderSource = "#version 330 core\n" | |
"layout (location = 0) in vec3 position;\n" | |
"void main()\n" | |
"{\n" | |
"gl_Position = vec4(position.x, position.y, position.z, 1.0);\n" | |
"}\0"; | |
const GLchar* fragmentShaderSource = "#version 330 core\n" | |
"out vec4 color;\n" | |
"void main()\n" | |
"{\n" | |
"color = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" | |
"}\n\0"; | |
std::cout<<"Hello World!"<<std::endl; | |
Display d(640,480,"My main window"); | |
// Shader shader("./res/basicShader"); | |
// Vertex vertices[] = { Vertex(glm::vec3(-0.5,-0.5,0.0)), | |
// Vertex(glm::vec3(0.0,0.5,0.0)), | |
// Vertex(glm::vec3(0.5,-0.5,0.0)) | |
// }; | |
//Mesh mesh(vertices,sizeof(vertices)/sizeof(vertices[0])); | |
// Build and compile our shader program | |
// Vertex shader | |
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); | |
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); | |
glCompileShader(vertexShader); | |
// Check for compile time errors | |
GLint success; | |
GLchar infoLog[512]; | |
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); | |
if (!success) | |
{ | |
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); | |
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl; | |
} | |
// Fragment shader | |
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); | |
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); | |
glCompileShader(fragmentShader); | |
// Check for compile time errors | |
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); | |
if (!success) | |
{ | |
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); | |
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl; | |
} | |
// Link shaders | |
GLuint shaderProgram = glCreateProgram(); | |
glAttachShader(shaderProgram, vertexShader); | |
glAttachShader(shaderProgram, fragmentShader); | |
glLinkProgram(shaderProgram); | |
// Check for linking errors | |
glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); | |
if (!success) { | |
glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog); | |
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl; | |
} | |
glDeleteShader(vertexShader); | |
glDeleteShader(fragmentShader); | |
GLfloat vertices[] = { | |
0.5f, 0.5f, 0.0f, // Top Right | |
0.5f, -0.5f, 0.0f, // Bottom Right | |
-0.5f, -0.5f, 0.0f, // Bottom Left | |
-0.5f, 0.5f, 0.0f // Top Left | |
}; | |
GLuint indices[] = { // Note that we start from 0! | |
0, 1, 3, // First Triangle | |
1, 2, 3 // Second Triangle | |
}; | |
GLuint VBO, VAO, EBO; | |
glGenVertexArrays(1, &VAO); | |
glGenBuffers(1, &VBO); | |
glGenBuffers(1, &EBO); | |
// Bind the Vertex Array Object first, then bind and set vertex buffer(s) and attribute pointer(s). | |
glBindVertexArray(VAO); | |
glBindBuffer(GL_ARRAY_BUFFER, VBO); | |
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); | |
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); | |
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); | |
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0); | |
glEnableVertexAttribArray(0); | |
glBindBuffer(GL_ARRAY_BUFFER, 0); // Note that this is allowed, the call to glVertexAttribPointer registered VBO as the currently bound vertex buffer object so afterwards we can safely unbind | |
glBindVertexArray(0); // Unbind VAO (it's always a good thing to unbind any buffer/array to prevent strange bugs), remember: do NOT unbind the EBO, keep it bound to this VAO | |
while(d.isDisplayActive()== true) | |
{ | |
d.Update(); | |
// Render | |
// Clear the colorbuffer | |
glClearColor(0.2f, 0.3f, 0.3f, 1.0f); | |
glClear(GL_COLOR_BUFFER_BIT); | |
// Draw our first triangle | |
glUseProgram(shaderProgram); | |
glBindVertexArray(VAO); | |
//glDrawArrays(GL_TRIANGLES, 0, 6); | |
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); | |
glBindVertexArray(0); | |
// Swap the screen buffers | |
// glfwSwapBuffers(window); | |
SDL_GL_SwapWindow(d.m_window); | |
} | |
// Properly de-allocate all resources once they've outlived their purpose | |
glDeleteVertexArrays(1, &VAO); | |
glDeleteBuffers(1, &VBO); | |
glDeleteBuffers(1, &EBO); | |
// Terminate GLFW, clearing any resources allocated by GLFW. | |
//glfwTerminate(); | |
SDL_Quit(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment