|
From: <eli...@us...> - 2007-04-22 21:29:29
|
Revision: 2795
http://svn.sourceforge.net/java-game-lib/?rev=2795&view=rev
Author: elias_naur
Date: 2007-04-22 14:29:28 -0700 (Sun, 22 Apr 2007)
Log Message:
-----------
Inline optimizations to state trackers by MatthiasM
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 2007-04-19 23:13:52 UTC (rev 2794)
+++ trunk/LWJGL/src/java/org/lwjgl/opengl/ReferencesStack.java 2007-04-22 21:29:28 UTC (rev 2795)
@@ -40,23 +40,26 @@
}
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;
Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/StateStack.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opengl/StateStack.java 2007-04-19 23:13:52 UTC (rev 2794)
+++ trunk/LWJGL/src/java/org/lwjgl/opengl/StateStack.java 2007-04-22 21:29:28 UTC (rev 2795)
@@ -39,26 +39,24 @@
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) {
state_stack = new int[1];
stack_pos = 0;
Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/StateTracker.java
===================================================================
--- trunk/LWJGL/src/java/org/lwjgl/opengl/StateTracker.java 2007-04-19 23:13:52 UTC (rev 2794)
+++ trunk/LWJGL/src/java/org/lwjgl/opengl/StateTracker.java 2007-04-22 21:29:28 UTC (rev 2795)
@@ -49,14 +49,13 @@
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();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|