From 4d493ac36bd5d763d2af3243e799bbaef3679594 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 17 Oct 2009 13:44:12 -0700 Subject: All tracker are aggregated in the GLContext now and used within the GL*Impl. New GLStateTracker: - Tracking client/server states - Currently supports PixelStorei - Prologued in glPixelStorei and glGetIntegerv, the latter will return the tracked state if available and not call the GL method. Impacts performance and ES1 compatibility (supports ALIGNMENT). Fixed 'imageSizeInBytes' calculation: - skipPixels and skipRows is a static one time offset --- .../com/sun/opengl/impl/GLStateTracker.java | 112 ++++++++++++--------- 1 file changed, 63 insertions(+), 49 deletions(-) (limited to 'src/jogl/classes/com/sun/opengl/impl/GLStateTracker.java') diff --git a/src/jogl/classes/com/sun/opengl/impl/GLStateTracker.java b/src/jogl/classes/com/sun/opengl/impl/GLStateTracker.java index 997951faf..698d20c47 100755 --- a/src/jogl/classes/com/sun/opengl/impl/GLStateTracker.java +++ b/src/jogl/classes/com/sun/opengl/impl/GLStateTracker.java @@ -52,22 +52,6 @@ import javax.media.opengl.*; public class GLStateTracker { private static final boolean DEBUG = Debug.debug("GLStateTracker"); - private static final Integer GL_PACK_ALIGNMENT = new Integer(GL.GL_PACK_ALIGNMENT); - private static final Integer GL_PACK_ROW_LENGTH = new Integer(GL2.GL_PACK_ROW_LENGTH); - private static final Integer GL_PACK_SKIP_ROWS = new Integer(GL2.GL_PACK_SKIP_ROWS); - private static final Integer GL_PACK_SKIP_PIXELS = new Integer(GL2.GL_PACK_SKIP_PIXELS); - private static final Integer GL_PACK_IMAGE_HEIGHT = new Integer(GL2.GL_PACK_IMAGE_HEIGHT); - private static final Integer GL_PACK_SKIP_IMAGES = new Integer(GL2.GL_PACK_SKIP_IMAGES); - - private static final Integer GL_UNPACK_ALIGNMENT = new Integer(GL.GL_UNPACK_ALIGNMENT); - private static final Integer GL_UNPACK_ROW_LENGTH = new Integer(GL2.GL_UNPACK_ROW_LENGTH); - private static final Integer GL_UNPACK_SKIP_ROWS = new Integer(GL2.GL_UNPACK_SKIP_ROWS); - private static final Integer GL_UNPACK_SKIP_PIXELS = new Integer(GL2.GL_UNPACK_SKIP_PIXELS); - private static final Integer GL_UNPACK_IMAGE_HEIGHT = new Integer(GL2.GL_UNPACK_IMAGE_HEIGHT); - private static final Integer GL_UNPACK_SKIP_IMAGES = new Integer(GL2.GL_UNPACK_SKIP_IMAGES); - - private static final Integer zero = new Integer(0); - private boolean enabled = true; private Map/**/ pixelStateMap = new HashMap/**/(); @@ -91,24 +75,6 @@ public class GLStateTracker { resetStates(); } - public void resetStates() { - pixelStateMap.clear(); - - pixelStateMap.put(GL_PACK_ALIGNMENT, new Integer(4)); - pixelStateMap.put(GL_PACK_ROW_LENGTH, zero); - pixelStateMap.put(GL_PACK_SKIP_ROWS, zero); - pixelStateMap.put(GL_PACK_SKIP_PIXELS, zero); - pixelStateMap.put(GL_PACK_IMAGE_HEIGHT, zero); - pixelStateMap.put(GL_PACK_SKIP_IMAGES, zero); - - pixelStateMap.put(GL_UNPACK_ALIGNMENT, new Integer(4)); - pixelStateMap.put(GL_UNPACK_ROW_LENGTH, zero); - pixelStateMap.put(GL_UNPACK_SKIP_ROWS, zero); - pixelStateMap.put(GL_UNPACK_SKIP_PIXELS, zero); - pixelStateMap.put(GL_UNPACK_IMAGE_HEIGHT, zero); - pixelStateMap.put(GL_UNPACK_SKIP_IMAGES, zero); - } - public void clearStates() { pixelStateMap.clear(); } @@ -155,7 +121,7 @@ public class GLStateTracker { public void pushAttrib(int flags) { if(enabled) { SavedState state = new SavedState(); - if( 0 != (flags&GL_CLIENT_PIXEL_STORE_BIT) ) { + if( 0 != (flags&GL2.GL_CLIENT_PIXEL_STORE_BIT) ) { state.putPixelStateMap(pixelStateMap); } stack.add(0, state); @@ -180,30 +146,78 @@ public class GLStateTracker { } } + private static final Integer GL_PACK_SWAP_BYTES = new Integer(GL2GL3.GL_PACK_SWAP_BYTES); + private static final Integer GL_PACK_LSB_FIRST = new Integer(GL2GL3.GL_PACK_LSB_FIRST); + private static final Integer GL_PACK_ROW_LENGTH = new Integer(GL2GL3.GL_PACK_ROW_LENGTH); + private static final Integer GL_PACK_SKIP_ROWS = new Integer(GL2GL3.GL_PACK_SKIP_ROWS); + private static final Integer GL_PACK_SKIP_PIXELS = new Integer(GL2GL3.GL_PACK_SKIP_PIXELS); + private static final Integer GL_PACK_ALIGNMENT = new Integer(GL.GL_PACK_ALIGNMENT); + private static final Integer GL_PACK_IMAGE_HEIGHT = new Integer(GL2GL3.GL_PACK_IMAGE_HEIGHT); + private static final Integer GL_PACK_SKIP_IMAGES = new Integer(GL2GL3.GL_PACK_SKIP_IMAGES); + + private static final Integer GL_UNPACK_SWAP_BYTES = new Integer(GL2GL3.GL_UNPACK_SWAP_BYTES); + private static final Integer GL_UNPACK_LSB_FIRST = new Integer(GL2GL3.GL_UNPACK_LSB_FIRST); + private static final Integer GL_UNPACK_ROW_LENGTH = new Integer(GL2GL3.GL_UNPACK_ROW_LENGTH); + private static final Integer GL_UNPACK_SKIP_ROWS = new Integer(GL2GL3.GL_UNPACK_SKIP_ROWS); + private static final Integer GL_UNPACK_SKIP_PIXELS = new Integer(GL2GL3.GL_UNPACK_SKIP_PIXELS); + private static final Integer GL_UNPACK_ALIGNMENT = new Integer(GL.GL_UNPACK_ALIGNMENT); + private static final Integer GL_UNPACK_IMAGE_HEIGHT = new Integer(GL2GL3.GL_UNPACK_IMAGE_HEIGHT); + private static final Integer GL_UNPACK_SKIP_IMAGES = new Integer(GL2GL3.GL_UNPACK_SKIP_IMAGES); + + private static final Integer zero = new Integer(0); + private static final Integer one = new Integer(1); + private static Integer boxKey(int key) { switch (key) { case 0: return zero; - case GL.GL_PACK_ALIGNMENT: return GL_PACK_ALIGNMENT; - case GL2.GL_PACK_ROW_LENGTH: return GL_PACK_ROW_LENGTH; - case GL2.GL_PACK_SKIP_ROWS: return GL_PACK_SKIP_ROWS; - case GL2.GL_PACK_SKIP_PIXELS: return GL_PACK_SKIP_PIXELS; - case GL2.GL_PACK_IMAGE_HEIGHT: return GL_PACK_IMAGE_HEIGHT; - case GL2.GL_PACK_SKIP_IMAGES: return GL_PACK_SKIP_IMAGES; - - case GL.GL_UNPACK_ALIGNMENT: return GL_UNPACK_ALIGNMENT; - case GL2.GL_UNPACK_ROW_LENGTH: return GL_UNPACK_ROW_LENGTH; - case GL2.GL_UNPACK_SKIP_ROWS: return GL_UNPACK_SKIP_ROWS; - case GL2.GL_UNPACK_SKIP_PIXELS: return GL_UNPACK_SKIP_PIXELS; - case GL2.GL_UNPACK_IMAGE_HEIGHT: return GL_UNPACK_IMAGE_HEIGHT; - case GL2.GL_UNPACK_SKIP_IMAGES: return GL_UNPACK_SKIP_IMAGES; + case GL2GL3.GL_PACK_SWAP_BYTES: return GL_PACK_SWAP_BYTES; + case GL2GL3.GL_PACK_LSB_FIRST: return GL_PACK_LSB_FIRST; + case GL2GL3.GL_PACK_ROW_LENGTH: return GL_PACK_ROW_LENGTH; + case GL2GL3.GL_PACK_SKIP_ROWS: return GL_PACK_SKIP_ROWS; + case GL2GL3.GL_PACK_SKIP_PIXELS: return GL_PACK_SKIP_PIXELS; + case GL.GL_PACK_ALIGNMENT: return GL_PACK_ALIGNMENT; + case GL2GL3.GL_PACK_IMAGE_HEIGHT: return GL_PACK_IMAGE_HEIGHT; + case GL2GL3.GL_PACK_SKIP_IMAGES: return GL_PACK_SKIP_IMAGES; + + case GL2GL3.GL_UNPACK_SWAP_BYTES: return GL_UNPACK_SWAP_BYTES; + case GL2GL3.GL_UNPACK_LSB_FIRST: return GL_UNPACK_LSB_FIRST; + case GL2GL3.GL_UNPACK_ROW_LENGTH: return GL_UNPACK_ROW_LENGTH; + case GL2GL3.GL_UNPACK_SKIP_ROWS: return GL_UNPACK_SKIP_ROWS; + case GL2GL3.GL_UNPACK_SKIP_PIXELS: return GL_UNPACK_SKIP_PIXELS; + case GL.GL_UNPACK_ALIGNMENT: return GL_UNPACK_ALIGNMENT; + case GL2GL3.GL_UNPACK_IMAGE_HEIGHT: return GL_UNPACK_IMAGE_HEIGHT; + case GL2GL3.GL_UNPACK_SKIP_IMAGES: return GL_UNPACK_SKIP_IMAGES; default: return null; } } + public void resetStates() { + pixelStateMap.clear(); + + pixelStateMap.put(GL_PACK_SWAP_BYTES, zero /* GL_FALSE */); + pixelStateMap.put(GL_PACK_LSB_FIRST, zero /* GL_FALSE */); + pixelStateMap.put(GL_PACK_ROW_LENGTH, zero); + pixelStateMap.put(GL_PACK_SKIP_ROWS, zero); + pixelStateMap.put(GL_PACK_SKIP_PIXELS, zero); + pixelStateMap.put(GL_PACK_ALIGNMENT, new Integer(4)); + pixelStateMap.put(GL_PACK_IMAGE_HEIGHT, zero); + pixelStateMap.put(GL_PACK_SKIP_IMAGES, zero); + + pixelStateMap.put(GL_UNPACK_SWAP_BYTES, zero /* GL_FALSE */); + pixelStateMap.put(GL_UNPACK_LSB_FIRST, zero /* GL_FALSE */); + pixelStateMap.put(GL_UNPACK_ROW_LENGTH, zero); + pixelStateMap.put(GL_UNPACK_SKIP_ROWS, zero); + pixelStateMap.put(GL_UNPACK_SKIP_PIXELS, zero); + pixelStateMap.put(GL_UNPACK_ALIGNMENT, new Integer(4)); + pixelStateMap.put(GL_UNPACK_IMAGE_HEIGHT, zero); + pixelStateMap.put(GL_UNPACK_SKIP_IMAGES, zero); + } + private static Integer boxInt(int value) { switch (value) { - case 0: return zero; + case 0: return zero; + case 1: return one; default: return new Integer(value); } -- cgit v1.2.3