I’m trying to draw a simple triangle with VBOs, however I can’t get it to work, it’s a blank screen.
What is the issue?
#include<SDL2/SDL.h>
#include<GL/glew.h>
#include<GL/gl.h>
const char* vertshaderSource = R"(
#version 120
attribute vec3 pos;
void main() {
gl_Position = vec4(pos.xyz, 1);
}
)";
const char* fragshaderSource = R"(
#version 120
void main() {
gl_FragColor = vec4(1, 0, 0, 1);
}
)";
struct vert {
float x, y, z;
};
int main(int argc, char** argv) {
SDL_Window* window = SDL_CreateWindow("A", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL);
SDL_GLContext glctx = SDL_GL_CreateContext(window);
glewExperimental = false;
glewInit();
SDL_ShowWindow(window);
glViewport(0, 0, 640, 480);
GLint vertshader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertshader, 1, &vertshaderSource, 0);
glCompileShader(vertshader);
GLint fragshader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragshader, 1, &fragshaderSource, 0);
glCompileShader(fragshader);
GLint prog = glCreateProgram();
glAttachShader(prog, vertshader);
glAttachShader(prog, fragshader);
glLinkProgram(prog);
glEnable(GL_VERTEX_ARRAY);
vert tri[3] = {{0, 0, 0}, {1, 0, 0}, {0.5f, 1, 0}};
GLuint trivbo;
glGenBuffers(1, &trivbo);
glBindBuffer(GL_ARRAY_BUFFER, trivbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(tri), tri, GL_DYNAMIC_DRAW);
glClearColor(0, 1, 0.5f, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(prog);
glBindBuffer(GL_ARRAY_BUFFER, trivbo);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, (void*) 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
SDL_GL_SwapWindow(window);
SDL_Delay(5000);
SDL_GL_DeleteContext(glctx);
SDL_DestroyWindow(window);
return 0;
}