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

This commit is contained in:
Elias Naur 2006-07-31 22:54:21 +00:00
parent 7b7ad52f29
commit 6e1913e4df
3 changed files with 19 additions and 15 deletions

View File

@ -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 @@ 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();
}
references_stack[stack_pos].copy(references_stack[stack_pos - 1]);
}
@ -51,8 +57,8 @@ class ReferencesStack {
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();

View File

@ -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 @@ class StateStack {
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 @@ class StateStack {
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;
}

View File

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