VirtualBox

source: vbox/trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_getshaders.c@ 63942

Last change on this file since 63942 was 62521, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 6.0 KB
Line 
1/* $Id: packspu_getshaders.c 62521 2016-07-22 19:16:33Z vboxsync $ */
2
3/** @file
4 * VBox OpenGL GLSL related functions
5 */
6
7/*
8 * Copyright (C) 2009-2016 Oracle Corporation
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.virtualbox.org. 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
19#include "packspu.h"
20#include "cr_packfunctions.h"
21#include "cr_net.h"
22#include "packspu_proto.h"
23#include "cr_mem.h"
24#include <iprt/assert.h>
25
26/*@todo combine with the one from server_getshaders.c*/
27typedef struct _crGetActive_t
28{
29 GLsizei length;
30 GLint size;
31 GLenum type;
32} crGetActive_t;
33
34void PACKSPU_APIENTRY packspu_GetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, char * name)
35{
36 GET_THREAD(thread);
37 int writeback = 1;
38 crGetActive_t *pLocal;
39
40 if (!size || !type || !name) return;
41
42 pLocal = (crGetActive_t*) crAlloc(bufSize+sizeof(crGetActive_t));
43 if (!pLocal) return;
44
45 crPackGetActiveAttrib(program, index, bufSize, (GLsizei*)pLocal, NULL, NULL, NULL, &writeback);
46
47 packspuFlush((void *) thread);
48 CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
49
50 if (length) *length = pLocal->length;
51 *size = pLocal->size;
52 *type = pLocal->type;
53 crMemcpy(name, (char*)&pLocal[1], pLocal->length+1);
54 crFree(pLocal);
55}
56
57void PACKSPU_APIENTRY packspu_GetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, char * name)
58{
59 GET_THREAD(thread);
60 int writeback = 1;
61 crGetActive_t *pLocal;
62
63 if (!size || !type || !name) return;
64
65 pLocal = (crGetActive_t*) crAlloc(bufSize+sizeof(crGetActive_t));
66 if (!pLocal) return;
67
68 crPackGetActiveUniform(program, index, bufSize, (GLsizei*)pLocal, NULL, NULL, NULL, &writeback);
69
70 packspuFlush((void *) thread);
71 CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
72
73 if (length) *length = pLocal->length;
74 *size = pLocal->size;
75 *type = pLocal->type;
76 crMemcpy(name, &pLocal[1], pLocal->length+1);
77 crFree(pLocal);
78}
79
80void PACKSPU_APIENTRY packspu_GetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders)
81{
82 GET_THREAD(thread);
83 int writeback = 1;
84 GLsizei *pLocal;
85
86 if (!shaders) return;
87
88 pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLuint)+sizeof(GLsizei));
89 if (!pLocal) return;
90
91 crPackGetAttachedShaders(program, maxCount, pLocal, NULL, &writeback);
92
93 packspuFlush((void *) thread);
94 CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
95
96 if (count) *count=*pLocal;
97 crMemcpy(shaders, &pLocal[1], *pLocal*sizeof(GLuint));
98 crFree(pLocal);
99}
100
101void PACKSPU_APIENTRY packspu_GetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj)
102{
103 GET_THREAD(thread);
104 int writeback = 1;
105 GLsizei *pLocal;
106
107 if (!obj) return;
108
109 pLocal = (GLsizei*) crAlloc(maxCount*sizeof(VBoxGLhandleARB)+sizeof(GLsizei));
110 if (!pLocal) return;
111
112 crPackGetAttachedObjectsARB(containerObj, maxCount, pLocal, NULL, &writeback);
113
114 packspuFlush((void *) thread);
115 CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
116
117 if (count) *count=*pLocal;
118 crMemcpy(obj, &pLocal[1], *pLocal*sizeof(VBoxGLhandleARB));
119 crFree(pLocal);
120}
121
122AssertCompile(sizeof(GLsizei) == 4);
123
124void PACKSPU_APIENTRY packspu_GetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
125{
126 GET_THREAD(thread);
127 int writeback = 1;
128 GLsizei *pLocal;
129
130 if (!infoLog) return;
131
132 pLocal = (GLsizei*) crAlloc(maxLength+sizeof(GLsizei));
133 if (!pLocal) return;
134
135 crPackGetInfoLogARB(obj, maxLength, pLocal, NULL, &writeback);
136
137 packspuFlush((void *) thread);
138 CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
139
140 CRASSERT((pLocal[0]) <= maxLength);
141
142 if (length) *length=*pLocal;
143 crMemcpy(infoLog, &pLocal[1], (maxLength >= (pLocal[0])) ? pLocal[0] : maxLength);
144 crFree(pLocal);
145}
146
147void PACKSPU_APIENTRY packspu_GetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei * length, char * infoLog)
148{
149 GET_THREAD(thread);
150 int writeback = 1;
151 GLsizei *pLocal;
152
153 if (!infoLog) return;
154
155 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
156 if (!pLocal) return;
157
158 crPackGetProgramInfoLog(program, bufSize, pLocal, NULL, &writeback);
159
160 packspuFlush((void *) thread);
161 CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
162
163 if (length) *length=*pLocal;
164 crMemcpy(infoLog, &pLocal[1], (bufSize >= pLocal[0]) ? pLocal[0] : bufSize);
165 crFree(pLocal);
166}
167
168void PACKSPU_APIENTRY packspu_GetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei * length, char * infoLog)
169{
170 GET_THREAD(thread);
171 int writeback = 1;
172 GLsizei *pLocal;
173
174 if (!infoLog) return;
175
176 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
177 if (!pLocal) return;
178
179 crPackGetShaderInfoLog(shader, bufSize, pLocal, NULL, &writeback);
180
181 packspuFlush((void *) thread);
182 CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
183
184 if (length) *length=*pLocal;
185 crMemcpy(infoLog, &pLocal[1], (bufSize >= pLocal[0]) ? pLocal[0] : bufSize);
186 crFree(pLocal);
187}
188
189void PACKSPU_APIENTRY packspu_GetShaderSource(GLuint shader, GLsizei bufSize, GLsizei * length, char * source)
190{
191 GET_THREAD(thread);
192 int writeback = 1;
193 GLsizei *pLocal;
194
195 if (!source) return;
196
197 pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei));
198 if (!pLocal) return;
199
200 crPackGetShaderSource(shader, bufSize, pLocal, NULL, &writeback);
201
202 packspuFlush((void *) thread);
203 CRPACKSPU_WRITEBACK_WAIT(thread, writeback);
204
205 if (length) *length=*pLocal;
206 crMemcpy(source, &pLocal[1], (bufSize >= pLocal[0]) ? pLocal[0] : bufSize);
207
208 if (bufSize > pLocal[0])
209 {
210 source[pLocal[0]] = 0;
211 }
212
213 crFree(pLocal);
214}
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