VirtualBox

source: vbox/trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c@ 20485

Last change on this file since 20485 was 20467, checked in by vboxsync, 16 years ago

crOpenGL: aliases for pre opengl2.0 arb extensions

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 7.8 KB
Line 
1/* $Id: server_getshaders.c 20467 2009-06-10 16:09:27Z vboxsync $ */
2
3/** @file
4 * VBox OpenGL DRI driver functions
5 */
6
7/*
8 * Copyright (C) 2009 Sun Microsystems, Inc.
9 *
10 * Sun Microsystems, Inc. confidential
11 * All rights reserved
12 */
13
14#include "cr_spu.h"
15#include "chromium.h"
16#include "cr_error.h"
17#include "cr_mem.h"
18#include "cr_net.h"
19#include "server_dispatch.h"
20#include "server.h"
21
22#ifdef CR_OPENGL_VERSION_2_0
23
24typedef struct _crGetActive_t
25{
26 GLsizei length;
27 GLint size;
28 GLenum type;
29} crGetActive_t;
30
31void SERVER_DISPATCH_APIENTRY crServerDispatchGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, char *name)
32{
33 crGetActive_t *pLocal;
34
35 pLocal = (crGetActive_t*) crAlloc(bufSize+sizeof(crGetActive_t));
36 if (!pLocal)
37 {
38 crGetActive_t zero;
39 zero.length = 0;
40 crServerReturnValue(&zero, sizeof(zero));
41 }
42 cr_server.head_spu->dispatch_table.GetActiveAttrib(program, index, bufSize, &pLocal->length, &pLocal->size, &pLocal->type, (char*)&pLocal[1]);
43 crServerReturnValue(pLocal, pLocal->length+1+sizeof(crGetActive_t));
44 crFree(pLocal);
45}
46
47void SERVER_DISPATCH_APIENTRY crServerDispatchGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, char *name)
48{
49 crGetActive_t *pLocal;
50
51 pLocal = (crGetActive_t*) crAlloc(bufSize+sizeof(crGetActive_t));
52 if (!pLocal)
53 {
54 crGetActive_t zero;
55 zero.length = 0;
56 crServerReturnValue(&zero, sizeof(zero));
57 }
58 cr_server.head_spu->dispatch_table.GetActiveUniform(program, index, bufSize, &pLocal->length, &pLocal->size, &pLocal->type, (char*)&pLocal[1]);
59 crServerReturnValue(pLocal, pLocal->length+1+sizeof(crGetActive_t));
60 crFree(pLocal);
61}
62
63void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders)
64{
65 GLsizei *pLocal;
66
67 pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLuint)+sizeof(GLsizei));
68 if (!pLocal)
69 {
70 GLsizei zero=0;
71 crServerReturnValue(&zero, sizeof(zero));
72 }
73 cr_server.head_spu->dispatch_table.GetAttachedShaders(program, maxCount, pLocal, (GLuint*)&pLocal[1]);
74 crServerReturnValue(pLocal, (*pLocal)*sizeof(GLuint)+sizeof(GLsizei));
75 crFree(pLocal);
76}
77
78void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj)
79{
80 GLsizei *pLocal;
81
82 pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLhandleARB)+sizeof(GLsizei));
83 if (!pLocal)
84 {
85 GLsizei zero=0;
86 crServerReturnValue(&zero, sizeof(zero));
87 }
88 cr_server.head_spu->dispatch_table.GetAttachedObjectsARB(containerObj, maxCount, pLocal, (GLhandleARB*)&pLocal[1]);
89 crServerReturnValue(pLocal, (*pLocal)*sizeof(GLhandleARB)+sizeof(GLsizei));
90 crFree(pLocal);
91}
92
93void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
94{
95 GLsizei *pLocal;
96
97 pLocal = (GLsizei*) crAlloc(maxLength+sizeof(GLsizei));
98 if (!pLocal)
99 {
100 GLsizei zero=0;
101 crServerReturnValue(&zero, sizeof(zero));
102 }
103 cr_server.head_spu->dispatch_table.GetInfoLogARB(obj, maxLength, pLocal, (char*)&pLocal[1]);
104 crServerReturnValue(pLocal, (*pLocal)+1+sizeof(GLsizei));
105 crFree(pLocal);
106}
107
108void SERVER_DISPATCH_APIENTRY crServerDispatchGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, char *infoLog)
109{
110 GLsizei *pLocal;
111
112 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
113 if (!pLocal)
114 {
115 GLsizei zero=0;
116 crServerReturnValue(&zero, sizeof(zero));
117 }
118 cr_server.head_spu->dispatch_table.GetShaderInfoLog(shader, bufSize, pLocal, (char*)&pLocal[1]);
119 crServerReturnValue(pLocal, (*pLocal)+1+sizeof(GLsizei));
120 crFree(pLocal);
121}
122
123void SERVER_DISPATCH_APIENTRY crServerDispatchGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei *length, char *infoLog)
124{
125 GLsizei *pLocal;
126
127 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
128 if (!pLocal)
129 {
130 GLsizei zero=0;
131 crServerReturnValue(&zero, sizeof(zero));
132 }
133 cr_server.head_spu->dispatch_table.GetProgramInfoLog(program, bufSize, pLocal, (char*)&pLocal[1]);
134 crServerReturnValue(pLocal, (*pLocal)+1+sizeof(GLsizei));
135 crFree(pLocal);
136}
137
138void SERVER_DISPATCH_APIENTRY crServerDispatchGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, char *source)
139{
140 GLsizei *pLocal;
141
142 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
143 if (!pLocal)
144 {
145 GLsizei zero=0;
146 crServerReturnValue(&zero, sizeof(zero));
147 }
148 cr_server.head_spu->dispatch_table.GetShaderSource(shader, bufSize, pLocal, (char*)pLocal+1);
149 crServerReturnValue(pLocal, (*pLocal)+1+sizeof(GLsizei));
150 crFree(pLocal);
151}
152
153static GLint __GetUniformSize(GLuint program, GLint location)
154{
155 GLint size;
156 GLenum type;
157
158 /*@todo: check if index and location is the same*/
159 cr_server.head_spu->dispatch_table.GetActiveUniform(program, location, 0, NULL, &size, &type, NULL);
160
161 switch (type)
162 {
163 case GL_FLOAT:
164 size = 1;
165 break;
166 case GL_FLOAT_VEC2:
167 size = 2;
168 break;
169 case GL_FLOAT_VEC3:
170 size = 3;
171 break;
172 case GL_FLOAT_VEC4:
173 size = 4;
174 break;
175 case GL_INT:
176 size = 1;
177 break;
178 case GL_INT_VEC2:
179 size = 2;
180 break;
181 case GL_INT_VEC3:
182 size = 3;
183 break;
184 case GL_INT_VEC4:
185 size = 4;
186 break;
187 case GL_BOOL:
188 size = 1;
189 break;
190 case GL_BOOL_VEC2:
191 size = 2;
192 break;
193 case GL_BOOL_VEC3:
194 size = 3;
195 break;
196 case GL_BOOL_VEC4:
197 size = 4;
198 break;
199 case GL_FLOAT_MAT2:
200 size = 8;
201 break;
202 case GL_FLOAT_MAT3:
203 size = 12;
204 break;
205 case GL_FLOAT_MAT4:
206 size = 16;
207 break;
208 case GL_SAMPLER_1D:
209 case GL_SAMPLER_2D:
210 case GL_SAMPLER_3D:
211 case GL_SAMPLER_CUBE:
212 case GL_SAMPLER_1D_SHADOW:
213 case GL_SAMPLER_2D_SHADOW:
214 size = 1;
215 break;
216#ifdef CR_OPENGL_VERSION_2_1
217 case GL_FLOAT_MAT2x3:
218 size = 8;
219 break;
220 case GL_FLOAT_MAT2x4:
221 size = 8;
222 break;
223 case GL_FLOAT_MAT3x2:
224 size = 12;
225 break;
226 case GL_FLOAT_MAT3x4:
227 size = 12;
228 break;
229 case GL_FLOAT_MAT4x2:
230 size = 16;
231 break;
232 case GL_FLOAT_MAT4x3:
233 size = 16;
234 break;
235#endif
236 default:
237 crWarning("__GetUniformSize: unknown uniform type 0x%x", (GLint)type);
238 size = 16;
239 break;
240 }
241
242 return size;
243}
244
245void SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformfv(GLuint program, GLint location, GLfloat *params)
246{
247 int size = __GetUniformSize(program, location) * sizeof(GLfloat);
248 GLfloat *pLocal;
249
250 pLocal = (GLfloat*) crAlloc(size);
251 if (!pLocal)
252 {
253 GLsizei zero=0;
254 crServerReturnValue(&zero, sizeof(zero));
255 }
256
257 cr_server.head_spu->dispatch_table.GetUniformfv(program, location, pLocal);
258
259 crServerReturnValue(pLocal, size);
260 crFree(pLocal);
261}
262
263void SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformiv(GLuint program, GLint location, GLint *params)
264{
265 int size = __GetUniformSize(program, location) * sizeof(GLint);
266 GLint *pLocal;
267
268 pLocal = (GLint*) crAlloc(size);
269 if (!pLocal)
270 {
271 GLsizei zero=0;
272 crServerReturnValue(&zero, sizeof(zero));
273 }
274
275 cr_server.head_spu->dispatch_table.GetUniformiv(program, location, pLocal);
276
277 crServerReturnValue(pLocal, size);
278 crFree(pLocal);
279}
280
281#endif /* #ifdef CR_OPENGL_VERSION_2_0 */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette