Erstellen von OpenGL-Kontext ohne Fenster

Ich versuche, herauszufinden, was ist die einfachste Möglichkeit zum erstellen eines fensterlosen OpenGL-Programm für offscreen-rendering.

Derzeit nutze ich dieses, und es funktioniert gut so weit: - (Fehler-checks entfernt, hier für Klarheit)

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);
}

Ist diese sicher zu verwenden? Was ist die "standard" - Weg, um erstellen Sie eine fensterlose OpenGL-Programm?

Edit: ich bin mit der FBO für die offscreen-rendering.

  • Es ist das tragbare Ding, genannt EGL, aber ich bin mir nicht wirklich sicher, ob es nutzbar auf Windows, wie der jetzt
  • Wo kommt die "off-screen" - Teil her? GetDC(0) gibt einen Gerätekontext für den gesamten Bildschirm, nicht für ein off-screen-Einheit
  • möglich, Duplikat der Können Sie erstellen, OpenGL-Kontext, ohne ein Fenster zu öffnen?
  • Auch Sie müssen nie das pixelformat des root-Fensters, und erstellen Sie eine OpenGL-Kontext ist nicht so eine gute Idee.
  • habe ich das root-Fenster pixelformat? o.O oh gut... irgendwelche Vorschläge, wie es sein sollte dann geschehen?
  • Erstellen eines normalen Fensters, aber nicht dem Benutzer anzeigen, d.h. weglassen Formate WS_VISIBLE-flag beim erstellen des Fensters. Erstellen des OpenGL-Kontext auf das Fenster.
  • okay, aber ist das die einzige Möglichkeit? mein Ziel ist die Optimierung der Fenster/Rahmen-Erstellung, denn derzeit dauert es (im schlechtesten Fall) 3/4 der Zeit mein Programm läuft die Zeit, die ist ein bisschen albern. Ist es möglich, das "Fenster" einmal, und dann irgendwie merken Sie sich für alle Programme, die ausgeführt werden? edit: i dont sogar WS_VISIBLE derzeit (noch meinem Fenster aus sichtbar ist), wo soll das denn gehen? ich verwendet ShowWindow(hWnd, SW_SHOW); obwohl.
  • Das erstellen eines Fensters ist ein schneller Prozess. Kontext-Erstellung jedoch Recht kostspielig werden kann, und das ist unabhängig davon, ob es ein Fenster benutzt oder nicht. Wenn Ihr problem ist die Programm-Start-und Initialisierungsphase, dann Sie eindeutig umsetzen sollten, diese als client-server-system. Man müsste einen server-Prozess (begann eine Zeit und läuft weiter), die nicht alle die GPU-Operationen für die clients, die leicht sind Programme, die nur übergeben die Aufgaben an den server und gibt das Ergebnis aus, um Ihre Anrufer.
  • wie funktioniert das client-server-system genau? muss ich zum senden der Daten über sockets, oder was?
  • Sie können verwenden, was auch immer IPC (Inter Process Communication) Schema der Ihnen am besten passt. Wenn ich so zu gestalten, ein system, das ich verwenden würde, ein segment SHM (SHared Memory) for data exchange und einige RPC - (remote-procedure-call-Mechanismus zum aufrufen von Funktionen in den server, dass intern Daten im SHM. Du bist auf Windows, also ich kann nicht empfehlen, alles in allem (ich bin ein Unix/Linux-Typ). Unter Unix/Linux eine brauchbare RPC-system D-Bus, obwohl ich persönlich glaube nicht, wie eine Reihe von Aspekten, die in seinem design, aber D-Bus ist der de-facto-standard-RPC-Mechanismus auf Linux.

InformationsquelleAutor Rookie | 2012-09-18
Schreibe einen Kommentar