Domanda

Ho un numero indefinito di contesto di visualizzazione e ognuno mostrerà una trama. Quando chiamo glGenTextures ottengo lo stesso nome restituito in tutti i contesti di visualizzazione. Funzionerà? Anche se hanno lo stesso nome, memorizzeranno e visualizzeranno trame diverse? In caso contrario, cosa dovrebbe fare per aggirare questo?

È stato utile?

Soluzione

Ottenere lo stesso nome da glGenTexture e avere la stessa trama visualizzata non è la stessa cosa.

I nomi delle trame sono solo numeri interi a discrezione di un contesto, di solito a partire da 1 e incrementando con ogni glGenTexture, ma non necessariamente. Un'implementazione non è richiesta per funzionare in questo modo (sebbene la maggior parte lo faccia). Tuttavia, in teoria potresti anche ottenere più o meno "casuali" numero, ad esempio un numero intero che incrementa per qualsiasi tipo di oggetto (cioè non solo trame, ma anche buffer e shader), o anche un indirizzo di puntatore a 32 bit nello spazio degli indirizzi del conducente, o qualche altra cosa esoterica. Non è richiesto che un nome debba essere qualcosa di specifico.

In OpenGL legacy, potresti persino creare i tuoi nomi invece di utilizzare glGenTexture, ma ora non è più legale. Non sono sicuro di cosa abbiano pensato quando è stato permesso, ma comunque ... :)

Lo stesso numero (nome) in un contesto diverso di solito sarà una trama diversa, o forse nessuna trama. Quindi, se vedi la stessa trama in un contesto diverso con lo stesso nome di trama, allora hai contesti condivisi o il driver è difettoso.

Nota che se usi wglCreateContextAttribsARB, il secondo parametro è l'handle di un contesto già esistente (o null). Se fornisci un handle di contesto qui, avrai contesti condivisi anche senza chiamando esplicitamente glShareLists. Forse è quello che è successo per caso.

Altri suggerimenti

Le trame non sono (per impostazione predefinita) condivise tra contesti: devi abilitarlo esplicitamente, ma il modo in cui lo fai è specifico della piattaforma.

Su win32, è wglShareLists e sulla maggior parte delle altre piattaforme viene specificato quando si crea il contesto (ad es. con il parametro share su aglCreateContext su OS-X).

Per quanto ne so, non ho abilitato alcuna condivisione delle trame. tuttavia, la stessa trama viene visualizzata in tutti i contesti di visualizzazione.

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