Skip to content

Instantly share code, notes, and snippets.

@alexmercerind
Created May 16, 2020 09:41
Show Gist options
  • Save alexmercerind/9e293ad01560e8db040d552939dbdd04 to your computer and use it in GitHub Desktop.
Save alexmercerind/9e293ad01560e8db040d552939dbdd04 to your computer and use it in GitHub Desktop.
Hello Triangle in SFML and GLEW C++
#include <iostream>
#include <string>
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
//////////Vertex And Fragment 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(0.0, 0.0, 0.0, 1.0);\n"
"}\0";
int main() {
sf::RenderWindow window(sf::VideoMode(800, 800), "C++ GLEW SFML", sf::Style::Default);
window.setFramerateLimit(60);
//////////glewInit()//////////
glewInit();
glewExperimental = GL_TRUE;
GLint success;
GLchar infoLog[512];
//////////Vertex Shader//////////
GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShaderID, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShaderID);
glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(vertexShaderID, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
};
//////////Fragment Shader//////////
GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShaderID, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShaderID);
glGetProgramiv(fragmentShaderID, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(fragmentShaderID, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
};
//////////Shader Program//////////
GLuint shaderProgramID = glCreateProgram();
glAttachShader(shaderProgramID, vertexShaderID);
glAttachShader(shaderProgramID, fragmentShaderID);
glLinkProgram(shaderProgramID);
glGetProgramiv(shaderProgramID, GL_LINK_STATUS, &success);
if (!success) {
glGetProgramInfoLog(shaderProgramID, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
};
//////////VBO//////////
float vertices[6] = {
-0.5f, -0.5f,
0.5f, -0.5f,
0.0f, 0.5f,
};
GLuint VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
//////////VAO And Vertex Attrib Pointer//////////
GLuint VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (GLvoid*)0);
glEnableVertexAttribArray(0);
//////////Unbind And Delete Used Stuff//////////
glDeleteShader(vertexShaderID);
glDeleteShader(fragmentShaderID);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
};
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgramID);
glDrawArrays(GL_TRIANGLES, 0, 3);
};
window.display();
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment