Domanda

L'estensione WGL_EXT_swap_control permette di fare questo su Windows, ma non riesco a trovare niente di neanche lontanamente cross-platform di fare lo stesso, vale a dire la sincronizzazione miei scambi di buffer con aggiornamento dello schermo. La mia applicazione utilizza GLEW, quindi qualcosa offerto da che sarebbe preferibile. supporto cross-platform per Linux, Mac e Windows è necessario, ma la mia domanda non si romperà se la sincronizzazione non è possibile impostare (ad esempio l'utente ha costretto fuori nei suoi driver grafici).

Accetterò codice di programma per farlo su molte piattaforme, con GLEW, come una risposta valida.

È stato utile?

Soluzione

Questo suona piuttosto sgradevole e ti lascia da soli per capire che chiamata passa su Mac OS X, ma questo ragazzo sembra avere un qualche tipo di soluzione.

Altri suggerimenti

C'è un motivo che non è facile trovare una soluzione cross-platform. La piattaforma in ultima analisi, possiede il display (e il comportamento alternata). Così è necessariamente parte della API piattaforma (se esposte). Non ci può essere davvero una soluzione cross-platform. Anche Glew ha alcuni pezzi specifici di piattaforma, quando si tratta di interazione con la piattaforma.

Ora si potrebbe sostenere che tutte le piattaforme devono utilizzare la stessa API per quella specifica po 'di loro interfaccia, ma dubito che si otterrebbe alcuna trazione da loro.

Ultimo, non tutti i framebuffer vengono visualizzati direttamente. Se vi capita di essere utilizzando un sistema di gestione delle finestre che si fonde in realtà i pixel framebuffer al desktop (come Aero fa quando attivo), allora non si ottiene per controllare il comportamento di swap in ogni modo.

Per riferimento, le varie API per fare questo su principali piattaforme:

  • wglSwapIntervalEXT
  • glXSwapIntervalSGI
  • AGLSetInteger

http://www.opengl.org/wiki/Swap_Interval (E indirettamente http://www.opengl.org/registry/specs/SGI /swap_control.txt ):

  

In Linux, le cose sono molto più semplici. Se    GLX_SGI_swap_control è presente nel   stringa restituita dalla    glGetString(GL_EXTENSIONS) , poi si   può usare glXSwapIntervalSGI(0) per   disabilitare VSYNC oppure è possibile utilizzare    glXSwapIntervalSGI(1) per consentire vsync   (Sincronizzazione aka verticale).

Per OS X, controlla http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSOpenGLContext_Class/Reference/Reference.html

  

NSOpenGLCPSwapInterval

     

Imposta o ottiene l'intervallo di swap. Lo swap   intervallo viene rappresentato come un tempo. Se l'intervallo di scambio è impostato su 0   (Default), il metodo flushBuffer eseguito non appena possibile,   senza riguardo per la frequenza di aggiornamento verticale del monitor. Se la   intervallo swap è impostato su 1, i buffer vengono scambiate solo durante la   ritracciamento verticale del monitor. Disponibile in Mac OS X v10.0 e   più tardi.

     

dichiarata in NSOpenGL.h.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top