#define GL_GLEXT_PROTOTYPES #include #include #include void checkGlError() { const char *err = SDL_GetError(); if (*err != 0) { printf("OpenGL error: %s", err); } } const char *fragment_shader_source = "#version 330 core\n" "out vec4 FragColor;\n" "in vec2 uv;\n" "\n" "void main()\n" "{\n" " FragColor = vec4(gl_FragCoord.xy / 800, 0.0, 1.0);\n" "}\n"; GLuint compile_shader(GLuint type, const char *src) { GLuint id = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(id, 1, &src, 0); glCompileShader(id); int result; glGetShaderiv(id, GL_COMPILE_STATUS, &result); if (result == GL_FALSE) { int length; glGetShaderiv(id, GL_INFO_LOG_LENGTH, &result); char *message = alloca(length * sizeof(char)); glGetShaderInfoLog(id, length, &length, message); printf("failed to compile %s shader\n", type == GL_VERTEX_SHADER ? "vertex" : "fragment"); printf("%s\n", message); glDeleteShader(id); return 0; } return id; } GLuint create_shader(const char *fragment_src) { GLuint program = glCreateProgram(); GLuint fragment_shader = compile_shader(GL_FRAGMENT_SHADER, fragment_src); glAttachShader(program, fragment_shader); glLinkProgram(program); glValidateProgram(program); glDeleteShader(fragment_shader); return program; } int main() { printf("Good Morning 🍵\n"); SDL_Init(SDL_INIT_VIDEO); SDL_Window* window = SDL_CreateWindow("SDL3 OpenGL Cube", 800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); if (!window) { printf("CreateWindow Error: %s\n", SDL_GetError()); SDL_Quit(); return 1; } SDL_GLContext glContext = SDL_GL_CreateContext(window); if (!glContext) { printf("GL Context Error: %s\n", SDL_GetError()); SDL_DestroyWindow(window); SDL_Quit(); return 1; } glEnable(GL_DEPTH_TEST); SDL_Event e; int running = 1; float angle = 0.0; GLuint shader = create_shader(fragment_shader_source); glUseProgram(shader); while (running) { while (SDL_PollEvent(&e)) { if (e.type == SDL_EVENT_QUIT) running = false; } checkGlError(); // Rendorrrr glViewport(0, 0, 800, 800); glClearColor(0.1f, 0.1f, 0.1f, 1.0f); // Dark gray background glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //drawCube(); // Front glBegin(GL_QUADS); glVertex2f(-1, 1); glVertex2f(-1,-1); glVertex2f( 1,-1); glVertex2f( 1, 1); glEnd(); SDL_GL_SwapWindow(window); angle += 0.5; } checkGlError(); }