VirtualBox

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

Last change on this file since 23277 was 23275, checked in by vboxsync, 16 years ago

crOpenGL: evil tabs sneaked in

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 8.4 KB
Line 
1/* $Id: server_getshaders.c 23275 2009-09-24 09:34:18Z vboxsync $ */
2
3/** @file
4 * VBox OpenGL GLSL related get functions
5 */
6
7/*
8 * Copyright (C) 2009 Sun Microsystems, Inc.
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.215389.xyz. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License (GPL) as published by the Free Software
14 * Foundation, in version 2 as it comes in the "COPYING" file of the
15 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17 *
18 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
19 * Clara, CA 95054 USA or visit http://www.sun.com if you need
20 * additional information or have any questions.
21 */
22
23#include "cr_spu.h"
24#include "chromium.h"
25#include "cr_error.h"
26#include "cr_mem.h"
27#include "cr_net.h"
28#include "server_dispatch.h"
29#include "server.h"
30
31#ifdef CR_OPENGL_VERSION_2_0
32
33typedef struct _crGetActive_t
34{
35 GLsizei length;
36 GLint size;
37 GLenum type;
38} crGetActive_t;
39
40void SERVER_DISPATCH_APIENTRY crServerDispatchGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, char *name)
41{
42 crGetActive_t *pLocal;
43
44 pLocal = (crGetActive_t*) crAlloc(bufSize+sizeof(crGetActive_t));
45 if (!pLocal)
46 {
47 crGetActive_t zero;
48 zero.length = 0;
49 crServerReturnValue(&zero, sizeof(zero));
50 }
51 cr_server.head_spu->dispatch_table.GetActiveAttrib(crStateGetProgramHWID(program), index, bufSize, &pLocal->length, &pLocal->size, &pLocal->type, (char*)&pLocal[1]);
52 crServerReturnValue(pLocal, pLocal->length+1+sizeof(crGetActive_t));
53 crFree(pLocal);
54}
55
56void SERVER_DISPATCH_APIENTRY crServerDispatchGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, char *name)
57{
58 crGetActive_t *pLocal;
59
60 pLocal = (crGetActive_t*) crAlloc(bufSize+sizeof(crGetActive_t));
61 if (!pLocal)
62 {
63 crGetActive_t zero;
64 zero.length = 0;
65 crServerReturnValue(&zero, sizeof(zero));
66 }
67 cr_server.head_spu->dispatch_table.GetActiveUniform(crStateGetProgramHWID(program), index, bufSize, &pLocal->length, &pLocal->size, &pLocal->type, (char*)&pLocal[1]);
68 crServerReturnValue(pLocal, pLocal->length+1+sizeof(crGetActive_t));
69 crFree(pLocal);
70}
71
72void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders)
73{
74 GLsizei *pLocal;
75
76 pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLuint)+sizeof(GLsizei));
77 if (!pLocal)
78 {
79 GLsizei zero=0;
80 crServerReturnValue(&zero, sizeof(zero));
81 }
82 cr_server.head_spu->dispatch_table.GetAttachedShaders(crStateGetProgramHWID(program), maxCount, pLocal, (GLuint*)&pLocal[1]);
83
84 {
85 GLsizei i;
86 GLuint *ids=(GLuint*)&pLocal[1];
87
88 for (i=0; i<*pLocal; ++i);
89 ids[i] = crStateGLSLShaderHWIDtoID(ids[i]);
90 }
91
92 crServerReturnValue(pLocal, (*pLocal)*sizeof(GLuint)+sizeof(GLsizei));
93 crFree(pLocal);
94}
95
96void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj)
97{
98 GLsizei *pLocal;
99
100 pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLhandleARB)+sizeof(GLsizei));
101 if (!pLocal)
102 {
103 GLsizei zero=0;
104 crServerReturnValue(&zero, sizeof(zero));
105 }
106 cr_server.head_spu->dispatch_table.GetAttachedObjectsARB(crStateGetProgramHWID(containerObj), maxCount, pLocal, (GLhandleARB*)&pLocal[1]);
107
108 {
109 GLsizei i;
110 GLuint *ids=(GLuint*)&pLocal[1];
111
112 for (i=0; i<*pLocal; ++i);
113 ids[i] = crStateGLSLShaderHWIDtoID(ids[i]);
114 }
115
116 crServerReturnValue(pLocal, (*pLocal)*sizeof(GLhandleARB)+sizeof(GLsizei));
117 crFree(pLocal);
118}
119
120void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
121{
122 GLsizei *pLocal;
123 GLuint hwid;
124
125 pLocal = (GLsizei*) crAlloc(maxLength+sizeof(GLsizei));
126 if (!pLocal)
127 {
128 GLsizei zero=0;
129 crServerReturnValue(&zero, sizeof(zero));
130 }
131 /*@todo: recheck*/
132 hwid = crStateGetProgramHWID(obj);
133 if (!hwid) hwid = crStateGetShaderHWID(obj);
134 cr_server.head_spu->dispatch_table.GetInfoLogARB(hwid, maxLength, pLocal, (char*)&pLocal[1]);
135 crServerReturnValue(pLocal, (*pLocal)+1+sizeof(GLsizei));
136 crFree(pLocal);
137}
138
139void SERVER_DISPATCH_APIENTRY crServerDispatchGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, char *infoLog)
140{
141 GLsizei *pLocal;
142
143 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
144 if (!pLocal)
145 {
146 GLsizei zero=0;
147 crServerReturnValue(&zero, sizeof(zero));
148 }
149 cr_server.head_spu->dispatch_table.GetShaderInfoLog(crStateGetShaderHWID(shader), bufSize, pLocal, (char*)&pLocal[1]);
150 crServerReturnValue(pLocal, (*pLocal)+1+sizeof(GLsizei));
151 crFree(pLocal);
152}
153
154void SERVER_DISPATCH_APIENTRY crServerDispatchGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei *length, char *infoLog)
155{
156 GLsizei *pLocal;
157
158 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
159 if (!pLocal)
160 {
161 GLsizei zero=0;
162 crServerReturnValue(&zero, sizeof(zero));
163 }
164 cr_server.head_spu->dispatch_table.GetProgramInfoLog(crStateGetProgramHWID(program), bufSize, pLocal, (char*)&pLocal[1]);
165 crServerReturnValue(pLocal, (*pLocal)+1+sizeof(GLsizei));
166 crFree(pLocal);
167}
168
169void SERVER_DISPATCH_APIENTRY crServerDispatchGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, char *source)
170{
171 GLsizei *pLocal;
172
173 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
174 if (!pLocal)
175 {
176 GLsizei zero=0;
177 crServerReturnValue(&zero, sizeof(zero));
178 }
179 cr_server.head_spu->dispatch_table.GetShaderSource(crStateGetShaderHWID(shader), bufSize, pLocal, (char*)pLocal+1);
180 crServerReturnValue(pLocal, (*pLocal)+1+sizeof(GLsizei));
181 crFree(pLocal);
182}
183
184static GLint __GetUniformSize(GLuint program, GLint location)
185{
186 GLint size;
187 GLenum type;
188
189 /*@todo: check if index and location is the same*/
190 cr_server.head_spu->dispatch_table.GetActiveUniform(crStateGetProgramHWID(program), location, 0, NULL, &size, &type, NULL);
191
192 return crStateGetUniformSize(type);
193}
194
195void SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformfv(GLuint program, GLint location, GLfloat *params)
196{
197 int size = __GetUniformSize(program, location) * sizeof(GLfloat);
198 GLfloat *pLocal;
199
200 pLocal = (GLfloat*) crAlloc(size);
201 if (!pLocal)
202 {
203 GLsizei zero=0;
204 crServerReturnValue(&zero, sizeof(zero));
205 }
206
207 cr_server.head_spu->dispatch_table.GetUniformfv(crStateGetProgramHWID(program), location, pLocal);
208
209 crServerReturnValue(pLocal, size);
210 crFree(pLocal);
211}
212
213void SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformiv(GLuint program, GLint location, GLint *params)
214{
215 int size = __GetUniformSize(program, location) * sizeof(GLint);
216 GLint *pLocal;
217
218 pLocal = (GLint*) crAlloc(size);
219 if (!pLocal)
220 {
221 GLsizei zero=0;
222 crServerReturnValue(&zero, sizeof(zero));
223 }
224
225 cr_server.head_spu->dispatch_table.GetUniformiv(crStateGetProgramHWID(program), location, pLocal);
226
227 crServerReturnValue(pLocal, size);
228 crFree(pLocal);
229}
230
231GLuint SERVER_DISPATCH_APIENTRY crServerDispatchCreateShader(GLenum type)
232{
233 GLuint retval;
234 retval = cr_server.head_spu->dispatch_table.CreateShader(type);
235 crStateCreateShader(retval, type);
236 crServerReturnValue(&retval, sizeof(retval));
237 return retval; /* ignored */
238}
239
240GLuint SERVER_DISPATCH_APIENTRY crServerDispatchCreateProgram(void)
241{
242 GLuint retval;
243 retval = cr_server.head_spu->dispatch_table.CreateProgram();
244 crStateCreateProgram(retval);
245 crServerReturnValue(&retval, sizeof(retval));
246 return retval; /* ignored */
247}
248
249GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsShader(GLuint shader)
250{
251 GLboolean retval;
252 retval = cr_server.head_spu->dispatch_table.IsShader(crStateGetShaderHWID(shader));
253 crServerReturnValue(&retval, sizeof(retval));
254 return retval; /* ignored */
255}
256
257GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsProgram(GLuint program)
258{
259 GLboolean retval;
260 retval = cr_server.head_spu->dispatch_table.IsProgram(crStateGetProgramHWID(program));
261 crServerReturnValue(&retval, sizeof(retval));
262 return retval; /* ignored */
263}
264
265#endif /* #ifdef CR_OPENGL_VERSION_2_0 */
Note: See TracBrowser for help on using the repository browser.

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