Inline optimizations to state trackers by MatthiasM
This commit is contained in:
parent
2d7c4b20d7
commit
31aa4355ca
|
@ -40,22 +40,25 @@ class ReferencesStack {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pushState() {
|
public void pushState() {
|
||||||
stack_pos++;
|
int pos = ++stack_pos;
|
||||||
if (stack_pos == references_stack.length) {
|
if (pos == references_stack.length) {
|
||||||
|
growStack();
|
||||||
|
}
|
||||||
|
references_stack[pos].copy(references_stack[pos - 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public References popState() {
|
||||||
|
References result = references_stack[stack_pos--];
|
||||||
|
result.clear();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void growStack() {
|
||||||
References[] new_references_stack = new References[references_stack.length + 1];
|
References[] new_references_stack = new References[references_stack.length + 1];
|
||||||
System.arraycopy(references_stack, 0, new_references_stack, 0, references_stack.length);
|
System.arraycopy(references_stack, 0, new_references_stack, 0, references_stack.length);
|
||||||
references_stack = new_references_stack;
|
references_stack = new_references_stack;
|
||||||
references_stack[references_stack.length - 1] = new References();
|
references_stack[references_stack.length - 1] = new References();
|
||||||
}
|
}
|
||||||
references_stack[stack_pos].copy(references_stack[stack_pos - 1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public References popState() {
|
|
||||||
References result = references_stack[stack_pos];
|
|
||||||
references_stack[stack_pos].clear();
|
|
||||||
stack_pos--;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
ReferencesStack() {
|
ReferencesStack() {
|
||||||
references_stack = new References[1];
|
references_stack = new References[1];
|
||||||
|
|
|
@ -39,24 +39,22 @@ class StateStack {
|
||||||
return state_stack[stack_pos];
|
return state_stack[stack_pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setState(int new_state) {
|
public void pushState(int new_state) {
|
||||||
state_stack[stack_pos] = new_state;
|
int pos = ++stack_pos;
|
||||||
|
if (pos == state_stack.length) {
|
||||||
|
growState();
|
||||||
}
|
}
|
||||||
|
state_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;
|
|
||||||
}
|
|
||||||
state_stack[stack_pos] = state_stack[stack_pos - 1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int popState() {
|
public int popState() {
|
||||||
int result = state_stack[stack_pos];
|
return state_stack[stack_pos--];
|
||||||
stack_pos--;
|
}
|
||||||
return result;
|
|
||||||
|
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) {
|
StateStack(int initial_value) {
|
||||||
|
|
|
@ -55,8 +55,7 @@ final class StateTracker {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doPushAttrib(int mask) {
|
private void doPushAttrib(int mask) {
|
||||||
attrib_stack.pushState();
|
attrib_stack.pushState(mask);
|
||||||
attrib_stack.setState(mask);
|
|
||||||
if ((mask & GL11.GL_CLIENT_VERTEX_ARRAY_BIT) != 0) {
|
if ((mask & GL11.GL_CLIENT_VERTEX_ARRAY_BIT) != 0) {
|
||||||
references_stack.pushState();
|
references_stack.pushState();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue