Skip to content

Instantly share code, notes, and snippets.

@alexmercerind
Created May 19, 2020 17:07
Show Gist options
  • Save alexmercerind/a532509cf7c5ffc962308582d17eb2a7 to your computer and use it in GitHub Desktop.
Save alexmercerind/a532509cf7c5ffc962308582d17eb2a7 to your computer and use it in GitHub Desktop.
Multiple VAOs and VBOs in SFML GLEW C++
#include <GL/glew.h>
#include <SFML/Graphics.hpp>
#include <iostream>
const char* vertexShaderSource =
"#version 330 core\n"
"layout (location = 0) in vec3 position;\n"
"void main() {\n"
" gl_Position = vec4(position.x, position.y, position.z, 1.0);\n"
"};\0";
const char* fragmentShaderSource =
"#version 330 core\n"
"out vec4 color;\n"
"void main() {\n"
" color = vec4(1.0, 1.0, 1.0, 1.0);\n"
"};\0";
GLint vertexBool;
GLint fragmentBool;
int main() {
sf::RenderWindow window(sf::VideoMode(800, 800), "Alex Mercer", sf::Style::Default);
window.setFramerateLimit(20);
glewInit();
GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShaderID, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShaderID);
glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &vertexBool);
GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShaderID, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShaderID);
glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &fragmentBool);
if (vertexBool && fragmentBool) {
std::cout << "Vertex and fragment shaders successfully compiled.";
}
else {
std::cout << "Vertex and fragment shaders could not be compiled.";
};
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShaderID);
glAttachShader(shaderProgram, fragmentShaderID);
glLinkProgram(shaderProgram);
GLfloat vertices1[9] = {
0.0f, 0.0f, 0.0f,
-0.5f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f,
};
GLfloat vertices2[9] = {
0.0f, 0.0f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
};
GLuint VAO1;
GLuint VBO1;
glGenBuffers(1, &VBO1);
glBindBuffer(GL_ARRAY_BUFFER, VBO1);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices1), vertices1, GL_STATIC_DRAW);
glGenVertexArrays(1, &VAO1);
glBindVertexArray(VAO1);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 3*sizeof(float), NULL);
glEnableVertexAttribArray(0);
GLuint VAO2;
GLuint VBO2;
glGenBuffers(1, &VBO2);
glBindBuffer(GL_ARRAY_BUFFER, VBO2);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices2), vertices2, GL_STATIC_DRAW);
glGenVertexArrays(1, &VAO2);
glBindVertexArray(VAO2);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 3 * sizeof(float), NULL);
glEnableVertexAttribArray(0);
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
};
};
glUseProgram(shaderProgram);
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.0, 0.0, 0.0, 1.0);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBindVertexArray(VAO1);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(VAO2);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
window.display();
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment