diff --git a/src/java/org/lwjgl/opengl/ReferencesStack.java b/src/java/org/lwjgl/opengl/ReferencesStack.java index 0580c323..88e7c356 100644 --- a/src/java/org/lwjgl/opengl/ReferencesStack.java +++ b/src/java/org/lwjgl/opengl/ReferencesStack.java @@ -40,23 +40,26 @@ class ReferencesStack { } 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(); + int pos = ++stack_pos; + if (pos == references_stack.length) { + growStack(); } - references_stack[stack_pos].copy(references_stack[stack_pos - 1]); + references_stack[pos].copy(references_stack[pos - 1]); } public References popState() { - References result = references_stack[stack_pos]; - references_stack[stack_pos].clear(); - stack_pos--; + References result = references_stack[stack_pos--]; + result.clear(); return result; } + private void growStack() { + 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(); + } + ReferencesStack() { references_stack = new References[1]; stack_pos = 0; diff --git a/src/java/org/lwjgl/opengl/StateStack.java b/src/java/org/lwjgl/opengl/StateStack.java index a989f60e..061efb25 100644 --- a/src/java/org/lwjgl/opengl/StateStack.java +++ b/src/java/org/lwjgl/opengl/StateStack.java @@ -39,24 +39,22 @@ class StateStack { return state_stack[stack_pos]; } - public void setState(int new_state) { - state_stack[stack_pos] = new_state; - } - - 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; + public void pushState(int new_state) { + int pos = ++stack_pos; + if (pos == state_stack.length) { + growState(); } - state_stack[stack_pos] = state_stack[stack_pos - 1]; + state_stack[pos] = new_state; } public int popState() { - int result = state_stack[stack_pos]; - stack_pos--; - return result; + return state_stack[stack_pos--]; + } + + public void growState() { + 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; } StateStack(int initial_value) { diff --git a/src/java/org/lwjgl/opengl/StateTracker.java b/src/java/org/lwjgl/opengl/StateTracker.java index 16f9bc13..8cc2ef5d 100644 --- a/src/java/org/lwjgl/opengl/StateTracker.java +++ b/src/java/org/lwjgl/opengl/StateTracker.java @@ -49,14 +49,13 @@ final class StateTracker { references_stack.popState(); } } - + static void pushAttrib(ContextCapabilities caps, int mask) { caps.tracker.doPushAttrib(mask); } private void doPushAttrib(int mask) { - attrib_stack.pushState(); - attrib_stack.setState(mask); + attrib_stack.pushState(mask); if ((mask & GL11.GL_CLIENT_VERTEX_ARRAY_BIT) != 0) { references_stack.pushState(); }