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:
parent
7b7ad52f29
commit
6e1913e4df
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in New Issue