1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
3*61046927SAndroid Build Coastguard Worker * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
4*61046927SAndroid Build Coastguard Worker *
5*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: SGI-B-2.0
6*61046927SAndroid Build Coastguard Worker */
7*61046927SAndroid Build Coastguard Worker
8*61046927SAndroid Build Coastguard Worker #include <assert.h>
9*61046927SAndroid Build Coastguard Worker #include "glxclient.h"
10*61046927SAndroid Build Coastguard Worker #include "indirect.h"
11*61046927SAndroid Build Coastguard Worker #include "indirect_vertex_array.h"
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard Worker /*****************************************************************************/
14*61046927SAndroid Build Coastguard Worker
15*61046927SAndroid Build Coastguard Worker #if !defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)
16*61046927SAndroid Build Coastguard Worker static void
do_enable_disable(GLenum array,GLboolean val)17*61046927SAndroid Build Coastguard Worker do_enable_disable(GLenum array, GLboolean val)
18*61046927SAndroid Build Coastguard Worker {
19*61046927SAndroid Build Coastguard Worker struct glx_context *gc = __glXGetCurrentContext();
20*61046927SAndroid Build Coastguard Worker __GLXattribute *state = (__GLXattribute *) (gc->client_state_private);
21*61046927SAndroid Build Coastguard Worker unsigned index = 0;
22*61046927SAndroid Build Coastguard Worker
23*61046927SAndroid Build Coastguard Worker if (array == GL_TEXTURE_COORD_ARRAY) {
24*61046927SAndroid Build Coastguard Worker index = __glXGetActiveTextureUnit(state);
25*61046927SAndroid Build Coastguard Worker }
26*61046927SAndroid Build Coastguard Worker
27*61046927SAndroid Build Coastguard Worker if (!__glXSetArrayEnable(state, array, index, val)) {
28*61046927SAndroid Build Coastguard Worker __glXSetError(gc, GL_INVALID_ENUM);
29*61046927SAndroid Build Coastguard Worker }
30*61046927SAndroid Build Coastguard Worker }
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Worker void
__indirect_glEnableClientState(GLenum array)33*61046927SAndroid Build Coastguard Worker __indirect_glEnableClientState(GLenum array)
34*61046927SAndroid Build Coastguard Worker {
35*61046927SAndroid Build Coastguard Worker do_enable_disable(array, GL_TRUE);
36*61046927SAndroid Build Coastguard Worker }
37*61046927SAndroid Build Coastguard Worker
38*61046927SAndroid Build Coastguard Worker void
__indirect_glDisableClientState(GLenum array)39*61046927SAndroid Build Coastguard Worker __indirect_glDisableClientState(GLenum array)
40*61046927SAndroid Build Coastguard Worker {
41*61046927SAndroid Build Coastguard Worker do_enable_disable(array, GL_FALSE);
42*61046927SAndroid Build Coastguard Worker }
43*61046927SAndroid Build Coastguard Worker
44*61046927SAndroid Build Coastguard Worker /************************************************************************/
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker void
__indirect_glPushClientAttrib(GLuint mask)47*61046927SAndroid Build Coastguard Worker __indirect_glPushClientAttrib(GLuint mask)
48*61046927SAndroid Build Coastguard Worker {
49*61046927SAndroid Build Coastguard Worker struct glx_context *gc = __glXGetCurrentContext();
50*61046927SAndroid Build Coastguard Worker __GLXattribute *state = (__GLXattribute *) (gc->client_state_private);
51*61046927SAndroid Build Coastguard Worker __GLXattribute **spp = gc->attributes.stackPointer, *sp;
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker if (spp < &gc->attributes.stack[__GL_CLIENT_ATTRIB_STACK_DEPTH]) {
54*61046927SAndroid Build Coastguard Worker if (!(sp = *spp)) {
55*61046927SAndroid Build Coastguard Worker sp = malloc(sizeof(__GLXattribute));
56*61046927SAndroid Build Coastguard Worker if (sp == NULL) {
57*61046927SAndroid Build Coastguard Worker __glXSetError(gc, GL_OUT_OF_MEMORY);
58*61046927SAndroid Build Coastguard Worker return;
59*61046927SAndroid Build Coastguard Worker }
60*61046927SAndroid Build Coastguard Worker *spp = sp;
61*61046927SAndroid Build Coastguard Worker }
62*61046927SAndroid Build Coastguard Worker sp->mask = mask;
63*61046927SAndroid Build Coastguard Worker gc->attributes.stackPointer = spp + 1;
64*61046927SAndroid Build Coastguard Worker if (mask & GL_CLIENT_PIXEL_STORE_BIT) {
65*61046927SAndroid Build Coastguard Worker sp->storePack = state->storePack;
66*61046927SAndroid Build Coastguard Worker sp->storeUnpack = state->storeUnpack;
67*61046927SAndroid Build Coastguard Worker }
68*61046927SAndroid Build Coastguard Worker if (mask & GL_CLIENT_VERTEX_ARRAY_BIT) {
69*61046927SAndroid Build Coastguard Worker __glXPushArrayState(state);
70*61046927SAndroid Build Coastguard Worker }
71*61046927SAndroid Build Coastguard Worker }
72*61046927SAndroid Build Coastguard Worker else {
73*61046927SAndroid Build Coastguard Worker __glXSetError(gc, GL_STACK_OVERFLOW);
74*61046927SAndroid Build Coastguard Worker return;
75*61046927SAndroid Build Coastguard Worker }
76*61046927SAndroid Build Coastguard Worker }
77*61046927SAndroid Build Coastguard Worker
78*61046927SAndroid Build Coastguard Worker void
__indirect_glPopClientAttrib(void)79*61046927SAndroid Build Coastguard Worker __indirect_glPopClientAttrib(void)
80*61046927SAndroid Build Coastguard Worker {
81*61046927SAndroid Build Coastguard Worker struct glx_context *gc = __glXGetCurrentContext();
82*61046927SAndroid Build Coastguard Worker __GLXattribute *state = (__GLXattribute *) (gc->client_state_private);
83*61046927SAndroid Build Coastguard Worker __GLXattribute **spp = gc->attributes.stackPointer, *sp;
84*61046927SAndroid Build Coastguard Worker GLuint mask;
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Worker if (spp > &gc->attributes.stack[0]) {
87*61046927SAndroid Build Coastguard Worker --spp;
88*61046927SAndroid Build Coastguard Worker sp = *spp;
89*61046927SAndroid Build Coastguard Worker assert(sp != 0);
90*61046927SAndroid Build Coastguard Worker mask = sp->mask;
91*61046927SAndroid Build Coastguard Worker gc->attributes.stackPointer = spp;
92*61046927SAndroid Build Coastguard Worker
93*61046927SAndroid Build Coastguard Worker if (mask & GL_CLIENT_PIXEL_STORE_BIT) {
94*61046927SAndroid Build Coastguard Worker state->storePack = sp->storePack;
95*61046927SAndroid Build Coastguard Worker state->storeUnpack = sp->storeUnpack;
96*61046927SAndroid Build Coastguard Worker }
97*61046927SAndroid Build Coastguard Worker if (mask & GL_CLIENT_VERTEX_ARRAY_BIT) {
98*61046927SAndroid Build Coastguard Worker __glXPopArrayState(state);
99*61046927SAndroid Build Coastguard Worker }
100*61046927SAndroid Build Coastguard Worker
101*61046927SAndroid Build Coastguard Worker sp->mask = 0;
102*61046927SAndroid Build Coastguard Worker }
103*61046927SAndroid Build Coastguard Worker else {
104*61046927SAndroid Build Coastguard Worker __glXSetError(gc, GL_STACK_UNDERFLOW);
105*61046927SAndroid Build Coastguard Worker return;
106*61046927SAndroid Build Coastguard Worker }
107*61046927SAndroid Build Coastguard Worker }
108*61046927SAndroid Build Coastguard Worker #endif
109