Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating OpenGL context without window

I'm trying to figure out what is the simplest way to create a windowless OpenGL program for offscreen rendering.

Currently I use this, and it works fine so far: (error checks removed here for clarity)

BOOL create_opengl_context(){
    GLuint PixelFormat;
    static PIXELFORMATDESCRIPTOR pfd;
    hDC = GetDC(NULL);
    PixelFormat = ChoosePixelFormat(hDC, &pfd);
    SetPixelFormat(hDC, PixelFormat, &pfd);
    hRC = wglCreateContext(hDC);
    wglMakeCurrent(hDC, hRC);
}

Is this safe to use? What is the "standard" way to create a windowless OpenGL program?

Edit: I'm using FBO for the offscreen rendering.

like image 610
Rookie Avatar asked Sep 18 '12 17:09

Rookie


1 Answers

The old method for purely windowless OpenGL is using a PBuffer. On Windows this requires the creation of a intermediate OpenGL context using a regular window to obtain the required extension function pointers. On X11/GLX it works without further ado.

The modern way to implement off-screen rendering is using a regular, but hidden window with the usual OpenGL context and a FBO as render target.

The bleeding edge, and yet not very well supported method (except on certain embedded devices) is using EGL for drawable creation.

like image 141
datenwolf Avatar answered Sep 28 '22 06:09

datenwolf