Java-Gaming.org Java4K winners: [ by our judges | by the community ]         
Featured games (67)
games approved by the League of Dukes
Games in Showcase (∞)
games submitted by our members



News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  Print  
  (GL)JPanel w/o GLEventListener  (Read 1214 times)
0 Members and 2 Guests are viewing this topic.
Offline Walrabe

JGO n00b
*

Posts: 4



« on: 2008-10-19 05:53:22 »

Hello Javagaming-People,

is there a simple solution to connect OpenGL-Renderings to the JPanel Buffer? I dont want to use the GLEventListener/single-thread. I think of single-buffered OGL to double-buffered JPanel (if ogl to jpanel-(front/back)buffer-switch goes fast) or double-buffer OGL to single-buffered JPanel (if there are some advantages). Does anyone have experience with this.

I have read the sources (GLJPanel.java) but there seem to be many graca-vendor spec. "hacks" (sorry). So, before i do longtime-experiments, i ask here for some solutions (should be small & simple).

Eventually, the best aprroach is the combination of JPanel/BufferStrategy/direct OGL to JPanel-Buffer rendering?!

Thanks for your ideas! Cheers, Chris

PS: Sorry for my english...
Offline mgianota

JGO n00b
*

Posts: 45



« Reply #1 on: 2008-10-19 10:42:08 »

There's a reasonably simple approach called active rendering which permits you to dispense with the GLEventListener call-back method. http://fivedots.coe.psu.ac.th/~ad/jg2/ch15/jogl1v4.pdf explains the technique in detail.

--Mario
Offline Mithrandir

Sr. Member
**

Posts: 463
Medals: 1


Cut from being on the bleeding edge too long


« Reply #2 on: 2008-10-19 21:14:28 »

Yes, it's a little tricky doing your own context management, particularly working with JOGL's lazy loading. We do this in the core of Aviatrix3D with a fair amount of success. Occasionally it falls over, particularly on OS/X, but it works.

The site for 3D Graphics information http://www.j3d.org/
Aviatrix3D JOGL Scenegraph http://aviatrix3d.j3d.org/
Programming is essentially a markup language surrounding mathematical formulae and thus, should not be patentable.
Games published by our own members! Go get 'em!
Offline Walrabe

JGO n00b
*

Posts: 4



« Reply #3 on: 2008-10-20 07:45:11 »

Following test-code doesnt work:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
import java.awt.Dimension;
import javax.media.opengl.*;
import javax.swing.*;
import com.sun.opengl.impl.Java2D;

public final class Window extends JFrame {

   public Window() {
      super("Titel");

      JPanel panel = new JPanel(null);
      panel.setPreferredSize(new Dimension(640, 480));
      panel.setSize(640, 480);
      add(panel);

      Java2D.invokeWithOGLContextCurrent(panel.getGraphics(),
         new Runnable() {

            @Override
            public void run() {
               drawable =
                  GLDrawableFactory.getFactory().createExternalGLDrawable();

               context =
                  GLDrawableFactory.getFactory().createExternalGLContext();
            }

      });

      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      pack(); setResizable(false); setVisible(true);

      try {
         context.makeCurrent();
      } catch (Exception e) {
         e.printStackTrace();
      }

      GL gl = context.getGL();

      gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity();
      gl.glOrtho(-4d / 3d, 4d / 3d, -1d, 1d, 0d, 1d);

      gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity();
      gl.glViewport(0, 0, 640, 480);

      gl.glClear(GL.GL_COLOR_BUFFER_BIT);
      gl.glRectf(-.8f, -.8f, .8f, .8f);

      gl.glFinish();

      drawable.swapBuffers(); // ?
     panel.repaint(); // ?

      context.release();
   }

   private GLDrawable drawable;
   private GLContext context;

   private static final long serialVersionUID = 0l;

   /**
    * Startet die Anwendung.
    * @param args Nicht verwendet
    */

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         @Override public void run() {new Window();}
      });
   }

}


Any ideas? Cheers, Chris
Pages: [1]
  Print  
 
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Page created in 0.054 seconds with 20 queries.