Prima di ridurre questo ad un esempio ragionevole Speravo che qualcuno potrebbe aver funzionato in questo prima e può far luce sul problema.OpenGL massimo di 32 finestre sullo schermo con Vista/7
Ho un'applicazione basata su 32 bit C che utilizza un contesto OpenGL per ogni finestra, tutti i contesti e le finestre sono impostati in modo identico. Il formato pixel richiesto è a colori a 32 bit, alfa, buffer di profondità, accelerato. Tutto funziona perfettamente su Windows 2000 e XP.
Tutto funziona perfettamente su Vista e 7 fino alla creazione della 33a finestra/coppia di contesto. La creazione della finestra non ha errori, la creazione del contesto non ha errori, rendendo il contesto corrente non ha errori, il disegno non produce errori, SwapBuffers non genera un errore. Tuttavia, i contesti OpenGL non riescono a produrre alcun output, con Aero le finestre sono bianche, con la modalità classica che non disegnano e sono solo spazzatura schermo. Killing the DWM non risolve il problema, provando diversi formati di pixel (buffer singolo, profondità diverse, ecc.) E PFD_SUPPORT_COMPOSITION non risolve il problema. Questo è su un numero di macchine diverse con Vista/7, mai XP.
Posso glReadPixels il buffer posteriore e sono i pixel corretti. Il rendering in un pbuffer con lo stesso contesto funziona bene, il rendering in> 32 pbuffers va bene.
Se riesco a utilizzare i contesti/finestre su schermo, le finestre non funzionanti riprendono a funzionare. È come se Vista/7 smettesse semplicemente di mostrare il rendering di OpenGL dopo che 32 finestre sono sullo schermo facendo questo.
Se il descrittore di formato pixel include PFD_SUPPORT_GDI tutto è ok, ma che sta utilizzando il renderer software che è inaccettabile.
Mi chiedo se questa è una limitazione del sistema operativo o la limitazione del driver in Vista/7. Grazie per qualsiasi intuizione.
Qual è il comportamento se si crea 33 Windows collegati al medesimo contesto unico? – Luca
Sospetto che questa sia una particolare implementazione del driver che è la colpa. Stai vedendo lo stesso comportamento su più schede/produttori? – eodabash