int main() { SDL_Window *window = NULL; int width = 480, height = 480; int flags; int quit = 0; // Initialize SDL, then get the current video mode and use it to create a SDL window. if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "Video initialization failed: %s\n", SDL_GetError()); SDL_Quit(); exit(1); } // Request GL context to be OpenGL 3.2 Core Profile SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); // Other GL attributes SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); //SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN; window = SDL_CreateWindow("AntTweakBar example using OpenGL Core Profile and SDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, flags); if (window == NULL) { fprintf(stderr, "Video mode set failed: %s\n", SDL_GetError()); SDL_Quit(); exit(1); } // Initialize AntTweakBar if (!TwInit(TW_OPENGL_CORE, NULL)) { fprintf(stderr, "AntTweakBar initialization failed: %s\n", TwGetLastError()); SDL_Quit(); exit(1); } // Tell the window size to AntTweakBar TwWindowSize(width, height); // Create a tweak bar CreateTweakBar(); // Set OpenGL viewport glViewport(0, 0, width, height); // Prepare GL shaders and programs for drawing InitRender(); // Main loop: // - Draw scene // - Process events while (!quit) { SDL_Event event; int handled; GLenum error; // Clear screen glClearColor(0.5f, 0.75f, 0.8f, 1); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // Update angle and draw geometry angle = (float)SDL_GetTicks()/25.0f * (FLOAT_PI/180.0f); quat[0] = quat[1] = 0; quat[2] = (float)sin(angle/2.0f); quat[3] = (float)cos(angle/2.0f); Render(); // Draw tweak bars TwDraw(); // Present frame buffer SDL_GL_SwapWindow(window); // Process incoming events while (SDL_PollEvent(&event)) { // Send event to AntTweakBar handled = TwEventSDL(&event); // If event has not been handled by AntTweakBar, process it if (!handled) { switch (event.type) { case SDL_QUIT: // Window is closed quit = 1; break; case SDL_WINDOWEVENT: // Window size has changed // Resize SDL video mode if (event.window.event == SDL_WINDOWEVENT_RESIZED) { width = event.window.data1; height = event.window.data2; // Resize OpenGL viewport glViewport(0, 0, width, height); // Restore OpenGL states InitRender(); // TwWindowSize has been called by TwEventSDL, // so it is not necessary to call it again here. } break; } } } while ((error = glGetError()) != GL_NO_ERROR) fprintf(stderr, "GL error detected: 0x%04X\n", error); } // End of main loop // Terminate AntTweakBar TwTerminate(); // Delete GL shaders and buffer UninitRender(); // Terminate SDL SDL_Quit(); return 0; }
int main() { const SDL_VideoInfo* video = NULL; int width = 480, height = 480; int bpp, flags; int quit = 0; // Initialize SDL, then get the current video mode and use it to create a SDL window. if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "Video initialization failed: %s\n", SDL_GetError()); SDL_Quit(); exit(1); } video = SDL_GetVideoInfo(); if (!video) { fprintf(stderr, "Video query failed: %s\n", SDL_GetError()); SDL_Quit(); exit(1); } // Request GL context to be OpenGL 3.2 Core Profile SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); // Other GL attributes SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); //SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); bpp = video->vfmt->BitsPerPixel; flags = SDL_OPENGL | SDL_HWSURFACE; if (!SDL_SetVideoMode(width, height, bpp, flags)) { fprintf(stderr, "Video mode set failed: %s\n", SDL_GetError()); SDL_Quit(); exit(1); } SDL_WM_SetCaption("AntTweakBar example using OpenGL Core Profile and SDL", "AntTweakBar+GLCore+SDL"); // Enable SDL unicode and key-repeat SDL_EnableUNICODE(1); SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); // Load some OpenGL core functions if (!LoadGLCoreFunctions()) { fprintf(stderr, "OpenGL 3.2 not supported.\n"); SDL_Quit(); exit(1); } // Initialize AntTweakBar if (!TwInit(TW_OPENGL_CORE, NULL)) { fprintf(stderr, "AntTweakBar initialization failed: %s\n", TwGetLastError()); SDL_Quit(); exit(1); } // Tell the window size to AntTweakBar TwWindowSize(width, height); // Create a tweak bar CreateTweakBar(); // Set OpenGL viewport glViewport(0, 0, width, height); // Prepare GL shaders and programs for drawing InitRender(); // Main loop: // - Draw scene // - Process events while (!quit) { SDL_Event event; int handled; GLenum error; // Clear screen glClearColor(0.5f, 0.75f, 0.8f, 1); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); // Update angle and draw geometry angle = (float)SDL_GetTicks()/25.0f * (FLOAT_PI/180.0f); quat[0] = quat[1] = 0; quat[2] = (float)sin(angle/2.0f); quat[3] = (float)cos(angle/2.0f); Render(); // Draw tweak bars TwDraw(); // Present frame buffer SDL_GL_SwapBuffers(); // Process incoming events while (SDL_PollEvent(&event)) { // Send event to AntTweakBar handled = TwEventSDL(&event, SDL_MAJOR_VERSION, SDL_MINOR_VERSION); // If event has not been handled by AntTweakBar, process it if (!handled) { switch (event.type) { case SDL_QUIT: // Window is closed quit = 1; break; case SDL_VIDEORESIZE: // Window size has changed // Resize SDL video mode width = event.resize.w; height = event.resize.h; if (!SDL_SetVideoMode(width, height, bpp, flags)) fprintf(stderr, "WARNING: Video mode set failed: %s\n", SDL_GetError()); // Resize OpenGL viewport glViewport(0, 0, width, height); // Restore OpenGL states InitRender(); // TwWindowSize has been called by TwEventSDL, // so it is not necessary to call it again here. break; } } } while ((error = glGetError()) != GL_NO_ERROR) fprintf(stderr, "GL error detected: 0x%04X\n", error); } // End of main loop // Terminate AntTweakBar TwTerminate(); // Delete GL shaders and buffer UninitRender(); // Terminate SDL SDL_Quit(); return 0; }