2010-11-22 8 views
6

Sto cercando di presentare una domanda di swing che rende a schermo intero, seguendo la descrizione qui http://download.oracle.com/javase/tutorial/extra/fullscreen/exclusivemode.html e il codice sorgente qui http://download.oracle.com/javase/tutorial/extra/fullscreen/example-1dot4/DisplayModeTest.javaFull Swing schermo con JOGL

Questo funziona abbastanza bene, ma non appena ho goccia in un GLCanvas oggetto come uno dei componenti del frame, tutto ciò che appare è uno schermo nero. Uscendo da schermo intero, posso vedere l'immagine OpenGL per un momento a schermo intero, quindi si presenta di nuovo bene in una finestra. Anche se non viene visualizzato nulla, posso interagire con i componenti dello swing, come i pulsanti, come se lo fossero.

Mi sembra quasi che un altro buffer vuoto venga disegnato sopra l'effettiva app dello swing, ma non riesco a capire perché lo sarebbe. In alternativa, mi chiedo se non è un problema con lo schermo intero gestito dalla scheda grafica che gestisce anche JOGL?

non ho bisogno l'accelerazione hardware schermo intero, anche se potrebbe essere bello - se questo è irrisolvibile, c'è qualche modo più robusto per implementare schermo intero in un'applicazione Java?

+0

OS? Fornitore di implementazione OpenGL? – genpfault

+0

Scusa, ho assunto (sciocco da parte mia) che questo sarebbe indipendente dalla piattaforma. Sto usando Windows 7 con una Nvidia GForce 9600M GT. – dimo414

risposta

4

Provare a disabilitare -Dsun.java2d.noddraw=true come this FAQ dice.

+0

Grazie, ha funzionato perfettamente. Ora devo andare a capire il modo migliore per forzare questo argomento da linea di comando da includere ogni volta che viene eseguito. – dimo414

+2

Test impostando 'System.setProperty (" sun.java2d.noddraw "," true ");' – dacwe

+0

Glorioso, grazie./Ora/Ho solo bisogno di capire come abilitare e disabilitare la decorazione del frame ('setUndecorated()'?) Dopo che il frame è stato visualizzato. Andrò a chiedere/lo cerco da solo, a meno che tu non voglia aiutarmi ancora un po '? : P – dimo414

0

Non è possibile chiamare setUndecorated (...) su una finestra visualizzabile, è necessario eliminarlo prima, ma questo eliminerà anche il canvas. Utilizzare un drawable condiviso per fare ciò e rimuoverlo prima di chiamare dispose() sul frame.

+0

Sì, ho incontrato questo problema. Per fortuna è solo un piccolo inconveniente per la mia applicazione, ma mi piacerebbe farlo funzionare correttamente. Potresti approfondire cosa intendi con "Usa un drawable condiviso per fare ciò e rimuoverlo"? – dimo414

+0

Ho affrontato lo stesso problema. Se si utilizza solo un contesto condiviso, quando si rimuove una tela da una finestra, questo contesto verrà distrutto tranne se si utilizza NEWT anziché AWT/Swing. Puoi vedere un esempio di elementi da usare condivisi lì: http://jogamp.org/git/?p=jogl.git;a=blob;f=src/junit/com/jogamp/test/junit/jogl/acore/TestSharedContextListAWT .java; h = b44158dce98537b7e12e4a354a702d0082f2b4ef; hb = de2a30104098216963132ed02b3dd66acd799d9e # l65 – gouessej

+1

Ho scoperto che la vera causa del problema che stavo eseguendo era un codice di installazione run-once che era in init() del pannello OpenGL. Dal momento che init() viene richiamato di nuovo durante la visualizzazione del pannello, è stato rieseguendolo. Spostando il codice run-once nel costruttore, ho risolto i problemi che stavo vedendo, e ora funziona perfettamente: D – dimo414