|
Size: 2629
Comment: Returns NULL and sets error message on error
|
Size: 3071
Comment: Minor updates to the code example
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 21: | Line 21: |
| #include <iostream> | |
| Line 23: | Line 24: |
using std::cout; |
|
| Line 26: | Line 30: |
| Line 31: | Line 35: |
| Line 33: | Line 37: |
| SDL_GLContext GLContext = SDL_GL_CreateContext(window); if(!GLContext){ // ... handle error } |
SDL_GLContext glcontext = SDL_GL_CreateContext(window); |
| Line 41: | Line 42: |
| glOrtho(-200,200,200,-200,0,1); | glOrtho(-320,320,240,-240,0,1); |
| Line 44: | Line 45: |
| SDL_Event e; while(e.type!=SDL_QUIT){ // Enter main loop. |
SDL_Event e; float x = 0.0, y = 30.0; while(e.type!=SDL_KEYDOWN&&e.type!=SDL_QUIT){ // Enter main loop. |
| Line 48: | Line 51: |
glClearColor(0,0,0,1); // Draw with OpenGL. glClear(GL_COLOR_BUFFER_BIT); glRotatef(1.0,0.0,0.0,1.0); glBegin(GL_LINE_LOOP); glColor3f(1.0,0.0,0.0); glVertex2f( 0,100); glColor3f(0.0,1.0,0.0); glVertex2f( 100,-50); glColor3f(1.0,0.0,1.0); glVertex2f(-100,-50); |
// Draw: glClearColor(0,0,0,1); // Use OpenGL commands, see the OpenGL reference. glClear(GL_COLOR_BUFFER_BIT); // clearing screen glRotatef(10.0,0.0,0.0,1.0); // rotating everything // Note that the glBegin() ... glEnd() OpenGL style used below is actually // obsolete, but it will do for example purposes. For more information, see // SDL_GL_GetProcAddress() or find an OpenGL extension loading library. glBegin(GL_TRIANGLES); // drawing a multicolored triangle glColor3f(1.0,0.0,0.0); glVertex2f(x, y+90.0); glColor3f(0.0,1.0,0.0); glVertex2f(x+90.0, y-90.0); glColor3f(0.0,0.0,1.0); glVertex2f(x-90.0, y-90.0); |
| Line 57: | Line 64: |
// Swap the window/buffer to display the result. SDL_GL_SwapWindow(window); // Pause briefly before moving on to the next cycle. SDL_Delay(10); } |
SDL_GL_SwapWindow(window); // Swap the window/buffer to display the result. SDL_Delay(10); // Pause briefly before moving on to the next cycle. } |
| Line 68: | Line 71: |
| SDL_GL_DeleteContext(GLContext); // Close the window, clean-up and exit the program. |
SDL_GL_DeleteContext(glcontext); // Done! Close the window, clean-up and exit the program. |
| Line 74: | Line 77: |
SDL_GL_CreateContext
Use this function to create an OpenGL context for use with an OpenGL window, and make it current.
Contents
Syntax
SDL_GLContext SDL_GL_CreateContext(SDL_Window* window)
Function Parameters
window |
the window to associate with the context |
Return Value
Returns the OpenGL context associated with window or NULL on error; call SDL_GetError() for more details.
Code Examples
#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
using std::cout;
int main(int argc, char* argv[]){
SDL_Init(SDL_INIT_VIDEO); // Init SDL2
// Create a window. Window mode MUST include SDL_WINDOW_OPENGL for use with OpenGL.
SDL_Window *window = SDL_CreateWindow(
"SDL2/OpenGL Demo", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE
);
// Create an OpenGL context associated with the window.
SDL_GLContext glcontext = SDL_GL_CreateContext(window);
// Now, regular OpenGL functions ...
glMatrixMode(GL_PROJECTION|GL_MODELVIEW);
glLoadIdentity();
glOrtho(-320,320,240,-240,0,1);
// ... can be used alongside SDL2.
SDL_Event e;
float x = 0.0, y = 30.0;
while(e.type!=SDL_KEYDOWN&&e.type!=SDL_QUIT){ // Enter main loop.
SDL_PollEvent(&e); // Check for events.
// Draw:
glClearColor(0,0,0,1); // Use OpenGL commands, see the OpenGL reference.
glClear(GL_COLOR_BUFFER_BIT); // clearing screen
glRotatef(10.0,0.0,0.0,1.0); // rotating everything
// Note that the glBegin() ... glEnd() OpenGL style used below is actually
// obsolete, but it will do for example purposes. For more information, see
// SDL_GL_GetProcAddress() or find an OpenGL extension loading library.
glBegin(GL_TRIANGLES); // drawing a multicolored triangle
glColor3f(1.0,0.0,0.0); glVertex2f(x, y+90.0);
glColor3f(0.0,1.0,0.0); glVertex2f(x+90.0, y-90.0);
glColor3f(0.0,0.0,1.0); glVertex2f(x-90.0, y-90.0);
glEnd();
SDL_GL_SwapWindow(window); // Swap the window/buffer to display the result.
SDL_Delay(10); // Pause briefly before moving on to the next cycle.
}
// Once finished with OpenGL functions, the SDL_GLContext can be deleted.
SDL_GL_DeleteContext(glcontext);
// Done! Close the window, clean-up and exit the program.
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
Remarks
Windows users new to OpenGL should note that, for historical reasons, GL functions added after OpenGL version 1.1 are not available by default. Those functions must be loaded at run-time, either with an OpenGL extension-handling library or with SDL_GL_GetProcAddress() and its related functions.
