From eed8508ae1132e5f45f788e9cb3f3d5a1050ac70 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Mon, 2 Jul 2012 19:42:52 +0200 Subject: GLAutoDrawable: Refine API doc; Use new abstract impl. GLAutoDrawableBase (GLWindow, ..); Add new GLAutoDrawableDelegate. - Refine API doc - 'void setContext(GLContext)' -> 'GLContext setContext(GLContext)' - Add note to createContext(GLContext) override -Use new abstract impl. GLAutoDrawableBase, used by: - GLWindow - GLAutoDrawableDelegate - GLPbufferImpl - Add new GLAutoDrawableDelegate incl. unit test --- .../classes/com/jogamp/newt/opengl/GLWindow.java | 332 +++------------------ 1 file changed, 34 insertions(+), 298 deletions(-) (limited to 'src/newt/classes') diff --git a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java index bff1efcb5..6a328ed07 100644 --- a/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java +++ b/src/newt/classes/com/jogamp/newt/opengl/GLWindow.java @@ -34,8 +34,6 @@ package com.jogamp.newt.opengl; -import java.io.PrintStream; - import javax.media.nativewindow.AbstractGraphicsConfiguration; import javax.media.nativewindow.CapabilitiesChooser; import javax.media.nativewindow.CapabilitiesImmutable; @@ -53,16 +51,15 @@ import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLCapabilitiesImmutable; import javax.media.opengl.GLContext; -import javax.media.opengl.GLDrawable; import javax.media.opengl.GLDrawableFactory; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLException; import javax.media.opengl.GLProfile; -import javax.media.opengl.GLRunnable; import jogamp.newt.WindowImpl; -import jogamp.opengl.FPSCounterImpl; -import jogamp.opengl.GLDrawableHelper; +import jogamp.opengl.GLAutoDrawableBase; +import jogamp.opengl.GLContextImpl; +import jogamp.opengl.GLDrawableImpl; import com.jogamp.common.GlueGenVersion; import com.jogamp.common.util.VersionUtil; @@ -78,7 +75,6 @@ import com.jogamp.newt.event.WindowEvent; import com.jogamp.newt.event.WindowListener; import com.jogamp.newt.event.WindowUpdateEvent; import com.jogamp.opengl.JoglVersion; -import com.jogamp.opengl.util.Animator; /** * An implementation of {@link GLAutoDrawable} and {@link Window} interface, @@ -100,30 +96,25 @@ import com.jogamp.opengl.util.Animator; GLAutoDrawable implementations, she is safe due to the implicit locked state. *

*/ -public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSCounter { +public class GLWindow extends GLAutoDrawableBase implements GLAutoDrawable, Window, NEWTEventConsumer, FPSCounter { private final WindowImpl window; /** * Constructor. Do not call this directly -- use {@link #create()} instead. */ protected GLWindow(Window window) { - resetFPSCounter(); + super(null, null); this.window = (WindowImpl) window; this.window.setHandleDestroyNotify(false); window.addWindowListener(new WindowAdapter() { @Override public void windowRepaint(WindowUpdateEvent e) { - if( !GLWindow.this.window.isWindowLockedByOtherThread() && !GLWindow.this.helper.isAnimatorAnimating() ) { - display(); - } + defaultRepaintOp(); } @Override public void windowResized(WindowEvent e) { - sendReshape = true; - if( !GLWindow.this.window.isWindowLockedByOtherThread() && !GLWindow.this.helper.isAnimatorAnimating() ) { - display(); - } + defaultReshapeOp(); } @Override @@ -132,7 +123,7 @@ public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSC // Is an animator thread perform rendering? if (GLWindow.this.helper.isExternalAnimatorRunning()) { // Pause animations before initiating safe destroy. - GLAnimatorControl ctrl = GLWindow.this.helper.getAnimator(); + final GLAnimatorControl ctrl = GLWindow.this.helper.getAnimator(); boolean isPaused = ctrl.pause(); destroy(); if(isPaused) { @@ -342,6 +333,26 @@ public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSC return window.getInsets(); } + @Override + public final int getX() { + return window.getX(); + } + + @Override + public final int getY() { + return window.getY(); + } + + @Override + public final int getWidth() { + return window.getWidth(); + } + + @Override + public final int getHeight() { + return window.getHeight(); + } + @Override public final void setPosition(int x, int y) { window.setPosition(x, y); @@ -495,10 +506,10 @@ public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSC factory = GLDrawableFactory.getFactory(glCaps.getGLProfile()); } if(null==drawable) { - drawable = factory.createGLDrawable(nw); + drawable = (GLDrawableImpl) factory.createGLDrawable(nw); } drawable.setRealized(true); - context = drawable.createContext(sharedContext); + context = (GLContextImpl) drawable.createContext(sharedContext); context.setContextCreationFlags(additionalCtxCreationFlags); } if(Window.DEBUG_IMPLEMENTATION) { @@ -531,20 +542,6 @@ public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSC // private GLContext sharedContext = null; - private int additionalCtxCreationFlags = 0; - private GLDrawableFactory factory; - private GLDrawable drawable; - private GLContext context; - private GLDrawableHelper helper = new GLDrawableHelper(); - // To make reshape events be sent immediately before a display event - private boolean sendReshape=false; - private boolean sendDestroy=false; - private final FPSCounterImpl fpsCounter = new FPSCounterImpl(); - - @Override - public GLDrawableFactory getFactory() { - return factory; - } /** * Specifies an {@link javax.media.opengl.GLContext OpenGL context} to share with.
@@ -558,79 +555,6 @@ public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSC this.sharedContext = sharedContext; } - @Override - public void setContext(GLContext newCtx) { - context = newCtx; - if(null != context) { - context.setContextCreationFlags(additionalCtxCreationFlags); - } - } - - @Override - public GLContext getContext() { - return context; - } - - @Override - public GL getGL() { - if (context == null) { - return null; - } - return context.getGL(); - } - - @Override - public GL setGL(GL gl) { - if (context != null) { - context.setGL(gl); - return gl; - } - return null; - } - - @Override - public void addGLEventListener(GLEventListener listener) { - if(null!=helper) { - helper.addGLEventListener(listener); - } - } - - @Override - public void addGLEventListener(int index, GLEventListener listener) { - if(null!=helper) { - helper.addGLEventListener(index, listener); - } - } - - @Override - public void removeGLEventListener(GLEventListener listener) { - if(null!=helper) { - helper.removeGLEventListener(listener); - } - } - - @Override - public void setAnimator(GLAnimatorControl animatorControl) { - if(null!=helper) { - helper.setAnimator(animatorControl); - } - } - - @Override - public GLAnimatorControl getAnimator() { - if(null!=helper) { - return helper.getAnimator(); - } - return null; - } - - @Override - public void invoke(boolean wait, GLRunnable glRunnable) { - if(null!=helper) { - helper.invoke(this, wait, glRunnable); - } - } - @Override public void display() { if( !isNativeValid() || !isVisible() ) { return; } @@ -650,215 +574,27 @@ public class GLWindow implements GLAutoDrawable, Window, NEWTEventConsumer, FPSC if( null != context ) { // surface is locked/unlocked implicit by context's makeCurrent/release - helper.invokeGL(drawable, context, displayAction, initAction); + helper.invokeGL(drawable, context, defaultDisplayAction, defaultInitAction); } } finally { window.unlockWindow(); } } - @Override - public void setAutoSwapBufferMode(boolean enable) { - if(null!=helper) { - helper.setAutoSwapBufferMode(enable); - } - } - - @Override - public boolean getAutoSwapBufferMode() { - if(null!=helper) { - return helper.getAutoSwapBufferMode(); - } - return false; - } - - /** - * @param t the thread for which context release shall be skipped, usually the animation thread, - * ie. {@link Animator#getThread()}. - * @deprecated this is an experimental feature, - * intended for measuring performance in regards to GL context switch - */ - @Deprecated - public void setSkipContextReleaseThread(Thread t) { - if(null!=helper) { - helper.setSkipContextReleaseThread(t); - } - } - - /** - * @deprecated see {@link #setSkipContextReleaseThread(Thread)} - */ - @Deprecated - public Thread getSkipContextReleaseThread() { - if(null!=helper) { - return helper.getSkipContextReleaseThread(); - } - return null; - } - - @Override - public void swapBuffers() { - if(drawable!=null && context != null) { - drawable.swapBuffers(); - } - } - - @Override - public void setContextCreationFlags(int flags) { - additionalCtxCreationFlags = flags; - } - - @Override - public int getContextCreationFlags() { - return additionalCtxCreationFlags; - } - - private class InitAction implements Runnable { - @Override - public final void run() { - // Lock: Locked Surface/Window by MakeCurrent/Release - helper.init(GLWindow.this); - resetFPSCounter(); - } - } - private InitAction initAction = new InitAction(); - - private class DisplayAction implements Runnable { - @Override - public final void run() { - // Lock: Locked Surface/Window by display _and_ MakeCurrent/Release - if (sendReshape) { - helper.reshape(GLWindow.this, 0, 0, getWidth(), getHeight()); - sendReshape = false; - } - - helper.display(GLWindow.this); - - fpsCounter.tickFPS(); - } - } - private DisplayAction displayAction = new DisplayAction(); - - @Override - public final void setUpdateFPSFrames(int frames, PrintStream out) { - fpsCounter.setUpdateFPSFrames(frames, out); - } - - @Override - public final void resetFPSCounter() { - fpsCounter.resetFPSCounter(); - } - - @Override - public final int getUpdateFPSFrames() { - return fpsCounter.getUpdateFPSFrames(); - } - - @Override - public final long getFPSStartTime() { - return fpsCounter.getFPSStartTime(); - } - - @Override - public final long getLastFPSUpdateTime() { - return fpsCounter.getLastFPSUpdateTime(); - } - - @Override - public final long getLastFPSPeriod() { - return fpsCounter.getLastFPSPeriod(); - } - - @Override - public final float getLastFPS() { - return fpsCounter.getLastFPS(); - } - - @Override - public final int getTotalFPSFrames() { - return fpsCounter.getTotalFPSFrames(); - } - - @Override - public final long getTotalFPSDuration() { - return fpsCounter.getTotalFPSDuration(); - } - - @Override - public final float getTotalFPS() { - return fpsCounter.getTotalFPS(); - } - //---------------------------------------------------------------------- // GLDrawable methods // + private GLDrawableFactory factory; @Override - public final NativeSurface getNativeSurface() { - return null!=drawable ? drawable.getNativeSurface() : null; - } - - @Override - public final long getHandle() { - return null!=drawable ? drawable.getHandle() : 0; - } - - @Override - public final int getX() { - return window.getX(); - } - - @Override - public final int getY() { - return window.getY(); - } - - @Override - public final int getWidth() { - return window.getWidth(); - } - - @Override - public final int getHeight() { - return window.getHeight(); - } - - //---------------------------------------------------------------------- - // GLDrawable methods that are not really needed - // - - @Override - public final GLContext createContext(GLContext shareWith) { - return drawable.createContext(shareWith); + public GLDrawableFactory getFactory() { + return factory; } @Override public final void setRealized(boolean realized) { } - @Override - public final boolean isRealized() { - return ( null != drawable ) ? drawable.isRealized() : false; - } - - @Override - public final GLCapabilitiesImmutable getChosenGLCapabilities() { - if (drawable == null) { - throw new GLException("No drawable yet"); - } - - return drawable.getChosenGLCapabilities(); - } - - @Override - public final GLProfile getGLProfile() { - if (drawable == null) { - throw new GLException("No drawable yet"); - } - - return drawable.getGLProfile(); - } - //---------------------------------------------------------------------- // NEWTEventConsumer // -- cgit v1.2.3