Inline optimizations to state trackers by MatthiasM

This commit is contained in:
Elias Naur 2007-04-22 21:29:28 +00:00
parent 2d7c4b20d7
commit 31aa4355ca
3 changed files with 27 additions and 27 deletions

View File

@ -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;

View File

@ -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) {

View File

@ -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();
}