From: <eli...@us...> - 2006-07-31 22:54:29
|
Revision: 2539 Author: elias_naur Date: 2006-07-31 15:54:21 -0700 (Mon, 31 Jul 2006) ViewCVS: http://svn.sourceforge.net/java-game-lib/?rev=2539&view=rev Log Message: ----------- Don't trust GL_MAX_CLIENT_ATTRIB_STACK_DEPTH since it is 0 on Xgl in linux. Instead make sure the state trackers are sized according to demand Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/ReferencesStack.java trunk/LWJGL/src/java/org/lwjgl/opengl/StateStack.java trunk/LWJGL/src/java/org/lwjgl/opengl/StateTracker.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/ReferencesStack.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/ReferencesStack.java 2006-07-31 22:37:31 UTC (rev 2538) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/ReferencesStack.java 2006-07-31 22:54:21 UTC (rev 2539) @@ -32,7 +32,7 @@ package org.lwjgl.opengl; class ReferencesStack { - private final References[] references_stack; + private References[] references_stack; private int stack_pos; public References getReferences() { @@ -41,6 +41,12 @@ public void pushState() { stack_pos++; + if (stack_pos == references_stack.length) { + References[] new_references_stack = new References[references_stack.length + 1]; + System.arraycopy(references_stack, 0, new_references_stack, 0, references_stack.length); + references_stack = new_references_stack; + references_stack[references_stack.length - 1] = new References(); + } references_stack[stack_pos].copy(references_stack[stack_pos - 1]); } @@ -51,8 +57,8 @@ return result; } - ReferencesStack(int stack_size) { - references_stack = new References[stack_size]; + ReferencesStack() { + references_stack = new References[1]; stack_pos = 0; for (int i = 0; i < references_stack.length; i++) references_stack[i] = new References(); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/StateStack.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/StateStack.java 2006-07-31 22:37:31 UTC (rev 2538) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/StateStack.java 2006-07-31 22:54:21 UTC (rev 2539) @@ -32,9 +32,7 @@ package org.lwjgl.opengl; class StateStack { - - /** Only int state is tracked */ - private final int[] state_stack; + private int[] state_stack; private int stack_pos; public int getState() { @@ -47,6 +45,11 @@ public void pushState() { stack_pos++; + if (stack_pos == state_stack.length) { + int[] new_state_stack = new int[state_stack.length + 1]; + System.arraycopy(state_stack, 0, new_state_stack, 0, state_stack.length); + state_stack = new_state_stack; + } state_stack[stack_pos] = state_stack[stack_pos - 1]; } @@ -56,8 +59,8 @@ return result; } - StateStack(int stack_size, int initial_value) { - state_stack = new int[stack_size]; + StateStack(int initial_value) { + state_stack = new int[1]; stack_pos = 0; state_stack[stack_pos] = initial_value; } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/StateTracker.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/StateTracker.java 2006-07-31 22:37:31 UTC (rev 2538) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/StateTracker.java 2006-07-31 22:54:21 UTC (rev 2539) @@ -31,19 +31,14 @@ */ package org.lwjgl.opengl; - -/** Track Vertex Buffer Objects by context. */ final class StateTracker { private final ReferencesStack references_stack; private final StateStack attrib_stack; StateTracker() { - int stack_size = Math.max(1, Util.glGetInteger(GL11.GL_MAX_CLIENT_ATTRIB_STACK_DEPTH)); - - references_stack = new ReferencesStack(stack_size); - - attrib_stack = new StateStack(stack_size, 0); + references_stack = new ReferencesStack(); + attrib_stack = new StateStack(0); } static void popAttrib() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |