#include #include #include const unsigned int SCR_WIDTH = 800; const unsigned int SCR_HEIGHT = 600; typedef void (*GL_CLEARCOLOR_F)(GLfloat, GLfloat, GLfloat, GLfloat); typedef void (*GL_CLEAR_F)(GLbitfield); typedef void (*GL_VIEWPORT_F)(GLint, GLint, GLsizei, GLsizei); int main() { GL_CLEARCOLOR_F glClearColor = (GL_CLEARCOLOR_F)glXGetProcAddress((const GLubyte*)"glClearColor"); GL_CLEAR_F glClear = (GL_CLEAR_F)glXGetProcAddress((const GLubyte*)"glCLear"); GL_VIEWPORT_F glViewport = (GL_VIEWPORT_F)glXGetProcAddress((const GLubyte*)"glViewport"); if (!SDL_Init(SDL_INIT_VIDEO)) std::cout << "Can't init SDL: " << SDL_GetError() << std::endl; SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_Window* window = SDL_CreateWindow("Test", SCR_WIDTH, SCR_HEIGHT, SDL_WINDOW_OPENGL); if (!window) std::cout << "Can't create window: " << SDL_GetError() << std::endl; SDL_GLContext context = SDL_GL_CreateContext(window); if (!context) std::cout << "Can't create context: " << SDL_GetError() << std::endl; SDL_GL_SetSwapInterval(1); glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT); bool shouldQuit = false; SDL_Event event; while (!shouldQuit) { while (SDL_PollEvent(&event)) if (event.type == SDL_EVENT_QUIT) shouldQuit = true; glClearColor(1.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); SDL_GL_SwapWindow(window); } SDL_GL_DestroyContext(context); SDL_DestroyWindow(window); SDL_Quit(); return 0; }