[OpenGl] Render to Texture

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
adapto
Beiträge: 24
Registriert: 22.07.2012, 01:12
Alter Benutzername: adapto

[OpenGl] Render to Texture

Beitrag von adapto »

Hallo *,

ich will eine kleine Anwendung zum testen einer visuellen Ausgabe meiner Meshe in eine Bilddatei. Dafuer benoetige ich jedoch kein Fenster sondern will das in der Konsole machen. Ich benutze glew aber bekomme immer den Fehler: "Missing GL Version". Kann mir bitte jemand kurz erklaeren wie man das ohne GLUT-Fenster anstellt oder mir einen Link zu einem Beispiel geben.

Danke!
Benutzeravatar
mOfl
Beiträge: 37
Registriert: 23.10.2010, 21:53

Re: [OpenGl] Render to Texture

Beitrag von mOfl »

GLEW hilft dir nur dabei, Extensions zu laden, hat also nichts mit OpenGL an sich zu tun und benötigt deshalb einen bereits erstellten OpenGL-Kontext, wenn du glewInit() aufrufst, sonst wird er sich beschweren. Einen Kontext ohne Fenster kannst du bei den meisten GL-Toolkits nicht erstellen, aber du kannst dir ein Dummyfenster anlegen. Ein Beispiel, das alles ohne zusätzliche Libraries direkt mit wgl zu machen (benötigt <windows.h> als Include):

Code: Alles auswählen

// Creates a dummy window with an OpenGL context to read the device information
void PrintDeviceInfo() {
    HMODULE hInstance = GetModuleHandle(NULL);
    WNDCLASS wc;
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) GetStockObject(NULL_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "DummyWindow";
    RegisterClass(&wc);
    HWND hWnd = CreateWindow("DummyWindow", NULL, 0, 0, 0, 256, 256, NULL, NULL, hInstance, NULL);
    HDC hDC = GetDC(hWnd);
    PIXELFORMATDESCRIPTOR pfd;
    ZeroMemory(&pfd, sizeof(pfd));
    pfd.nSize = sizeof(pfd);
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = 24;
    pfd.cDepthBits = 16;
    pfd.iLayerType = PFD_MAIN_PLANE;
    int pixelFormat = ChoosePixelFormat(hDC, &pfd);
    SetPixelFormat(hDC, pixelFormat, &pfd);
    HGLRC hRC = wglCreateContext(hDC);
    wglMakeCurrent(hDC, hRC);

    // Print the device information. This ensures that the OpenGL context is valid.
    printf("Vendor: %s\n", (const char*) glGetString(GL_VENDOR));
    printf("OpenGL version: %s\n", (const char*) glGetString(GL_VERSION));

    // Destroy the OpenGL context
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(hRC);
    ReleaseDC(hWnd, hDC);
    DestroyWindow(hWnd);
}
Antworten