diff options
Diffstat (limited to 'demos/MiscDemos/SharedGLTest2.java')
-rwxr-xr-x | demos/MiscDemos/SharedGLTest2.java | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/demos/MiscDemos/SharedGLTest2.java b/demos/MiscDemos/SharedGLTest2.java new file mode 100755 index 0000000..e1dcb23 --- /dev/null +++ b/demos/MiscDemos/SharedGLTest2.java @@ -0,0 +1,144 @@ +import java.applet.*; +import java.awt.*; +import java.awt.event.*; +import gl4java.*; +import gl4java.awt.*; + +public class SharedGLTest2 extends Applet + implements MouseListener +{ + + MyCanvas canvas = null; + Button addButton = null; + int canvasNumber = 0; + Panel pAllCvs = null; + Dimension d = null; + + public void init() + { + d = getSize(); + setLayout(new BorderLayout()); + addButton = new Button ("add gl"); + addButton.addMouseListener(this); + add("South", addButton); + + pAllCvs = new Panel(); + pAllCvs.setLayout(new GridLayout(4,1)); + add("Center", pAllCvs); + + canvas = new MyCanvas (d.width/2, d.height/2, null); + pAllCvs.add(canvas); + canvasNumber=1; + } + + public static void main( String args[] ) + { + Frame mainFrame = new Frame("SharedGLTest2"); + + SharedGLTest2 applet = new SharedGLTest2(); + + applet.setSize(400, 400); + applet.init(); + applet.start(); + + mainFrame.add(applet); + + mainFrame.pack(); + mainFrame.setVisible(true); + } + + public void start() + { + } + + + public void stop() + { + } + + // Methods required for the implementation of MouseListener + public void mouseEntered( MouseEvent evt ) + { + } + + public void mouseExited( MouseEvent evt ) + { + } + + public void mousePressed( MouseEvent evt ) + { + } + + public void mouseReleased( MouseEvent evt ) + { + } + + public void mouseClicked( MouseEvent evt ) + { + Component comp = evt.getComponent(); + + if( canvas!=null && comp.equals(addButton) ) + { + if(canvasNumber<4) + { + MyCanvas _canvas = + new MyCanvas (d.width/2,d.height/2,canvas.getGLContext()); + pAllCvs.add(_canvas); + canvasNumber++; + pAllCvs.invalidate(); + pAllCvs.validate(); + if(canvasNumber==4) + addButton.setEnabled(false); + } + } + } + + private static int callList=0; + + protected class MyCanvas extends GLCanvas + { + public MyCanvas(int w, int h, GLContext shareWith) + { + super(w, h); + sharedGLContext = shareWith; + } + + public void init() + { + if(sharedGLContext==null && callList==0) + { + buildCallList(); // Really build something only once. + } + } + + public void display() + { + if( glj.gljMakeCurrent() == false ) { + System.out.println("problem in use() method"); + return; + } + + if(callList!=0) + gl.glCallList(callList); + + glj.gljSwap(); + glj.gljCheckGL(); + glj.gljFree(); + } + + /** + * Build only one call list for both GLCanvas. + */ + protected void buildCallList() + { + callList = gl.glGenLists(1); + + gl.glNewList(callList, gl.GL_COMPILE); + gl.glClearColor(1f, 0f, 0f, 1f); + gl.glClear(gl.GL_COLOR_BUFFER_BIT); // Clear the GLCanvas with red. + gl.glEndList(); + } + } + +} + |