blob: d877ebdc4535a3effd17a71c57832c9916e8e120 [file] [log] [blame]
Jason Samsaeb094b2010-05-18 13:35:45 -07001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "rsContext.h"
18#include "rsScriptC.h"
19#include "rsMatrix.h"
Jason Samsaeb094b2010-05-18 13:35:45 -070020
Jason Samsaeb094b2010-05-18 13:35:45 -070021#include "utils/Timers.h"
22
23#define GL_GLEXT_PROTOTYPES
24
25#include <GLES/gl.h>
26#include <GLES/glext.h>
27#include <GLES2/gl2.h>
28#include <GLES2/gl2ext.h>
29
30#include <time.h>
31
32using namespace android;
33using namespace android::renderscript;
34
35#define GET_TLS() Context::ScriptTLSStruct * tls = \
36 (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \
37 Context * rsc = tls->mContext; \
38 ScriptC * sc = (ScriptC *) tls->mScript
39
40
41//////////////////////////////////////////////////////////////////////////////
Jason Samsaeb094b2010-05-18 13:35:45 -070042// Context
43//////////////////////////////////////////////////////////////////////////////
44
45static void SC_bindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va)
46{
Jason Sams605048a2010-09-30 18:15:52 -070047 CHECK_OBJ_OR_NULL(va);
48 CHECK_OBJ(vpf);
Jason Samsaeb094b2010-05-18 13:35:45 -070049 GET_TLS();
50 rsi_ProgramBindTexture(rsc,
51 static_cast<ProgramFragment *>(vpf),
52 slot,
53 static_cast<Allocation *>(va));
54
55}
56
57static void SC_bindSampler(RsProgramFragment vpf, uint32_t slot, RsSampler vs)
58{
Jason Sams605048a2010-09-30 18:15:52 -070059 CHECK_OBJ_OR_NULL(vs);
60 CHECK_OBJ(vpf);
Jason Samsaeb094b2010-05-18 13:35:45 -070061 GET_TLS();
62 rsi_ProgramBindSampler(rsc,
63 static_cast<ProgramFragment *>(vpf),
64 slot,
65 static_cast<Sampler *>(vs));
66
67}
68
69static void SC_bindProgramStore(RsProgramStore pfs)
70{
Jason Sams605048a2010-09-30 18:15:52 -070071 CHECK_OBJ_OR_NULL(pfs);
Jason Samsaeb094b2010-05-18 13:35:45 -070072 GET_TLS();
73 rsi_ContextBindProgramStore(rsc, pfs);
74}
75
76static void SC_bindProgramFragment(RsProgramFragment pf)
77{
Jason Sams605048a2010-09-30 18:15:52 -070078 CHECK_OBJ_OR_NULL(pf);
Jason Samsaeb094b2010-05-18 13:35:45 -070079 GET_TLS();
80 rsi_ContextBindProgramFragment(rsc, pf);
81}
82
83static void SC_bindProgramVertex(RsProgramVertex pv)
84{
Jason Sams605048a2010-09-30 18:15:52 -070085 CHECK_OBJ_OR_NULL(pv);
Jason Samsaeb094b2010-05-18 13:35:45 -070086 GET_TLS();
87 rsi_ContextBindProgramVertex(rsc, pv);
88}
89
90static void SC_bindProgramRaster(RsProgramRaster pv)
91{
Jason Sams605048a2010-09-30 18:15:52 -070092 CHECK_OBJ_OR_NULL(pv);
Jason Samsaeb094b2010-05-18 13:35:45 -070093 GET_TLS();
94 rsi_ContextBindProgramRaster(rsc, pv);
95}
96
97//////////////////////////////////////////////////////////////////////////////
98// VP
99//////////////////////////////////////////////////////////////////////////////
100
Jim Millera490f102010-07-28 14:46:22 -0700101static void SC_vpLoadProjectionMatrix(const rsc_Matrix *m)
102{
103 GET_TLS();
Alex Sakhartchouk383e5b12010-09-23 16:16:33 -0700104 rsc->getVertex()->setProjectionMatrix(rsc, m);
Jim Millera490f102010-07-28 14:46:22 -0700105}
106
Jason Samsaeb094b2010-05-18 13:35:45 -0700107static void SC_vpLoadModelMatrix(const rsc_Matrix *m)
108{
109 GET_TLS();
Alex Sakhartchouk383e5b12010-09-23 16:16:33 -0700110 rsc->getVertex()->setModelviewMatrix(rsc, m);
Jason Samsaeb094b2010-05-18 13:35:45 -0700111}
112
113static void SC_vpLoadTextureMatrix(const rsc_Matrix *m)
114{
115 GET_TLS();
Alex Sakhartchouk383e5b12010-09-23 16:16:33 -0700116 rsc->getVertex()->setTextureMatrix(rsc, m);
Jason Samsaeb094b2010-05-18 13:35:45 -0700117}
118
119
Jason Sams6445e522010-08-04 17:50:20 -0700120static void SC_pfConstantColor(RsProgramFragment vpf, float r, float g, float b, float a)
121{
Alex Sakhartchouk383e5b12010-09-23 16:16:33 -0700122 GET_TLS();
Jason Sams605048a2010-09-30 18:15:52 -0700123 CHECK_OBJ(vpf);
Jason Sams6445e522010-08-04 17:50:20 -0700124 ProgramFragment *pf = static_cast<ProgramFragment *>(vpf);
Alex Sakhartchouk383e5b12010-09-23 16:16:33 -0700125 pf->setConstantColor(rsc, r, g, b, a);
Jason Sams6445e522010-08-04 17:50:20 -0700126}
127
Alex Sakhartchouk95333f92010-08-16 17:40:10 -0700128static void SC_vpGetProjectionMatrix(rsc_Matrix *m)
129{
130 GET_TLS();
Alex Sakhartchouk383e5b12010-09-23 16:16:33 -0700131 rsc->getVertex()->getProjectionMatrix(rsc, m);
Alex Sakhartchouk95333f92010-08-16 17:40:10 -0700132}
133
Jason Samsaeb094b2010-05-18 13:35:45 -0700134
135//////////////////////////////////////////////////////////////////////////////
136// Drawing
137//////////////////////////////////////////////////////////////////////////////
138
Jason Samsaeb094b2010-05-18 13:35:45 -0700139static void SC_drawQuadTexCoords(float x1, float y1, float z1,
140 float u1, float v1,
141 float x2, float y2, float z2,
142 float u2, float v2,
143 float x3, float y3, float z3,
144 float u3, float v3,
145 float x4, float y4, float z4,
146 float u4, float v4)
147{
148 GET_TLS();
149 if (!rsc->setupCheck()) {
150 return;
151 }
152
153 //LOGE("Quad");
154 //LOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1);
155 //LOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2);
156 //LOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3);
157 //LOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4);
158
159 float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4};
160 const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4};
161
Alex Sakhartchouk54929cc2010-11-08 15:10:52 -0800162 VertexArray::Attrib attribs[2];
163 attribs[0].set(GL_FLOAT, 3, 12, false, (uint32_t)vtx, "ATTRIB_position");
164 attribs[1].set(GL_FLOAT, 2, 8, false, (uint32_t)tex, "ATTRIB_texture0");
165
166 VertexArray va(attribs, 2);
Jason Sams79f52df2010-06-01 15:47:01 -0700167 va.setupGL2(rsc, &rsc->mStateVertexArray, &rsc->mShaderCache);
Jason Samsaeb094b2010-05-18 13:35:45 -0700168
169 glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
170}
171
172static void SC_drawQuad(float x1, float y1, float z1,
173 float x2, float y2, float z2,
174 float x3, float y3, float z3,
175 float x4, float y4, float z4)
176{
177 SC_drawQuadTexCoords(x1, y1, z1, 0, 1,
178 x2, y2, z2, 1, 1,
179 x3, y3, z3, 1, 0,
180 x4, y4, z4, 0, 0);
181}
182
183static void SC_drawSpriteScreenspace(float x, float y, float z, float w, float h)
184{
185 GET_TLS();
186 ObjectBaseRef<const ProgramVertex> tmp(rsc->getVertex());
187 rsc->setVertex(rsc->getDefaultProgramVertex());
188 //rsc->setupCheck();
189
190 //GLint crop[4] = {0, h, w, -h};
191
192 float sh = rsc->getHeight();
193
194 SC_drawQuad(x, sh - y, z,
195 x+w, sh - y, z,
196 x+w, sh - (y+h), z,
197 x, sh - (y+h), z);
198 rsc->setVertex((ProgramVertex *)tmp.get());
199}
Jason Samsbdb04602010-06-17 18:05:38 -0700200/*
Jason Samsaeb094b2010-05-18 13:35:45 -0700201static void SC_drawSprite(float x, float y, float z, float w, float h)
202{
203 GET_TLS();
204 float vin[3] = {x, y, z};
205 float vout[4];
206
207 //LOGE("ds in %f %f %f", x, y, z);
208 rsc->getVertex()->transformToScreen(rsc, vout, vin);
209 //LOGE("ds out %f %f %f %f", vout[0], vout[1], vout[2], vout[3]);
210 vout[0] /= vout[3];
211 vout[1] /= vout[3];
212 vout[2] /= vout[3];
213
214 vout[0] *= rsc->getWidth() / 2;
215 vout[1] *= rsc->getHeight() / 2;
216 vout[0] += rsc->getWidth() / 2;
217 vout[1] += rsc->getHeight() / 2;
218
219 vout[0] -= w/2;
220 vout[1] -= h/2;
221
222 //LOGE("ds out2 %f %f %f", vout[0], vout[1], vout[2]);
223
224 // U, V, W, H
225 SC_drawSpriteScreenspace(vout[0], vout[1], z, h, w);
226 //rsc->setupCheck();
227}
Jason Samsbdb04602010-06-17 18:05:38 -0700228*/
Jason Samsaeb094b2010-05-18 13:35:45 -0700229
230static void SC_drawRect(float x1, float y1,
231 float x2, float y2, float z)
232{
233 //LOGE("SC_drawRect %f,%f %f,%f %f", x1, y1, x2, y2, z);
234 SC_drawQuad(x1, y2, z,
235 x2, y2, z,
236 x2, y1, z,
237 x1, y1, z);
238}
239
Alex Sakhartchouk4e9a7a82010-07-01 16:14:06 -0700240static void SC_drawMesh(RsMesh vsm)
241{
Jason Sams605048a2010-09-30 18:15:52 -0700242 CHECK_OBJ(vsm);
Alex Sakhartchouk4e9a7a82010-07-01 16:14:06 -0700243 GET_TLS();
244 Mesh *sm = static_cast<Mesh *>(vsm);
Jason Samsaeb094b2010-05-18 13:35:45 -0700245 if (!rsc->setupCheck()) {
246 return;
247 }
248 sm->render(rsc);
249}
250
Alex Sakhartchouk4e9a7a82010-07-01 16:14:06 -0700251static void SC_drawMeshPrimitive(RsMesh vsm, uint32_t primIndex)
Jason Samsaeb094b2010-05-18 13:35:45 -0700252{
Jason Sams605048a2010-09-30 18:15:52 -0700253 CHECK_OBJ(vsm);
Jason Samsaeb094b2010-05-18 13:35:45 -0700254 GET_TLS();
Alex Sakhartchouk4e9a7a82010-07-01 16:14:06 -0700255 Mesh *sm = static_cast<Mesh *>(vsm);
Jason Samsaeb094b2010-05-18 13:35:45 -0700256 if (!rsc->setupCheck()) {
257 return;
258 }
Alex Sakhartchouk4e9a7a82010-07-01 16:14:06 -0700259 sm->renderPrimitive(rsc, primIndex);
260}
261
262static void SC_drawMeshPrimitiveRange(RsMesh vsm, uint32_t primIndex, uint32_t start, uint32_t len)
263{
Jason Sams605048a2010-09-30 18:15:52 -0700264 CHECK_OBJ(vsm);
Alex Sakhartchouk4e9a7a82010-07-01 16:14:06 -0700265 GET_TLS();
266 Mesh *sm = static_cast<Mesh *>(vsm);
267 if (!rsc->setupCheck()) {
268 return;
269 }
270 sm->renderPrimitiveRange(rsc, primIndex, start, len);
Jason Samsaeb094b2010-05-18 13:35:45 -0700271}
272
Alex Sakhartchoukba4aa5c2010-08-13 14:32:23 -0700273static void SC_meshComputeBoundingBox(RsMesh vsm, float *minX, float *minY, float *minZ,
274 float *maxX, float *maxY, float *maxZ)
275{
Jason Sams605048a2010-09-30 18:15:52 -0700276 CHECK_OBJ(vsm);
Alex Sakhartchoukba4aa5c2010-08-13 14:32:23 -0700277 GET_TLS();
278 Mesh *sm = static_cast<Mesh *>(vsm);
279 sm->computeBBox();
280 *minX = sm->mBBoxMin[0];
281 *minY = sm->mBBoxMin[1];
282 *minZ = sm->mBBoxMin[2];
283 *maxX = sm->mBBoxMax[0];
284 *maxY = sm->mBBoxMax[1];
285 *maxZ = sm->mBBoxMax[2];
286}
287
Jason Samsaeb094b2010-05-18 13:35:45 -0700288
289//////////////////////////////////////////////////////////////////////////////
290//
291//////////////////////////////////////////////////////////////////////////////
292
293
294static void SC_color(float r, float g, float b, float a)
295{
296 GET_TLS();
Jason Sams6445e522010-08-04 17:50:20 -0700297 ProgramFragment *pf = (ProgramFragment *)rsc->getFragment();
Alex Sakhartchouk383e5b12010-09-23 16:16:33 -0700298 pf->setConstantColor(rsc, r, g, b, a);
Jason Samsaeb094b2010-05-18 13:35:45 -0700299}
300
Jason Sams22fa3712010-05-19 17:22:57 -0700301static void SC_uploadToTexture2(RsAllocation va, uint32_t baseMipLevel)
Jason Samsaeb094b2010-05-18 13:35:45 -0700302{
Jason Sams605048a2010-09-30 18:15:52 -0700303 CHECK_OBJ(va);
Jason Samsaeb094b2010-05-18 13:35:45 -0700304 GET_TLS();
305 rsi_AllocationUploadToTexture(rsc, va, false, baseMipLevel);
306}
Jason Sams22fa3712010-05-19 17:22:57 -0700307static void SC_uploadToTexture(RsAllocation va)
308{
Jason Sams605048a2010-09-30 18:15:52 -0700309 CHECK_OBJ(va);
Jason Sams22fa3712010-05-19 17:22:57 -0700310 GET_TLS();
311 rsi_AllocationUploadToTexture(rsc, va, false, 0);
312}
Jason Samsaeb094b2010-05-18 13:35:45 -0700313
314static void SC_uploadToBufferObject(RsAllocation va)
315{
Jason Sams605048a2010-09-30 18:15:52 -0700316 CHECK_OBJ(va);
Jason Samsaeb094b2010-05-18 13:35:45 -0700317 GET_TLS();
318 rsi_AllocationUploadToBufferObject(rsc, va);
319}
320
Jason Samsaeb094b2010-05-18 13:35:45 -0700321static void SC_ClearColor(float r, float g, float b, float a)
322{
Jason Samsaeb094b2010-05-18 13:35:45 -0700323 GET_TLS();
Alex Sakhartchouk889fe502010-10-01 10:54:06 -0700324 rsc->setupProgramStore();
Jason Sams22fa3712010-05-19 17:22:57 -0700325
326 glClearColor(r, g, b, a);
327 glClear(GL_COLOR_BUFFER_BIT);
328}
329
330static void SC_ClearDepth(float v)
331{
332 GET_TLS();
Alex Sakhartchouk889fe502010-10-01 10:54:06 -0700333 rsc->setupProgramStore();
Jason Sams22fa3712010-05-19 17:22:57 -0700334
335 glClearDepthf(v);
336 glClear(GL_DEPTH_BUFFER_BIT);
Jason Samsaeb094b2010-05-18 13:35:45 -0700337}
338
339static uint32_t SC_getWidth()
340{
341 GET_TLS();
342 return rsc->getWidth();
343}
344
345static uint32_t SC_getHeight()
346{
347 GET_TLS();
348 return rsc->getHeight();
349}
350
Alex Sakhartchoukd3e0ad42010-06-24 17:15:34 -0700351static void SC_DrawTextAlloc(RsAllocation va, int x, int y)
352{
Jason Sams605048a2010-09-30 18:15:52 -0700353 CHECK_OBJ(va);
Alex Sakhartchoukd3e0ad42010-06-24 17:15:34 -0700354 GET_TLS();
355 Allocation *alloc = static_cast<Allocation *>(va);
Alex Sakhartchouk09c67352010-10-05 11:33:27 -0700356 const char *text = (const char *)alloc->getPtr();
357 size_t allocSize = alloc->getType()->getSizeBytes();
358 rsc->mStateFont.renderText(text, allocSize, x, y);
Alex Sakhartchoukd3e0ad42010-06-24 17:15:34 -0700359}
360
361static void SC_DrawText(const char *text, int x, int y)
362{
363 GET_TLS();
Alex Sakhartchouk09c67352010-10-05 11:33:27 -0700364 size_t textLen = strlen(text);
365 rsc->mStateFont.renderText(text, textLen, x, y);
366}
367
368static void SC_setMetrics(Font::Rect *metrics,
369 int32_t *left, int32_t *right,
370 int32_t *top, int32_t *bottom)
371{
372 if(left) {
373 *left = metrics->left;
374 }
375 if(right) {
376 *right = metrics->right;
377 }
378 if(top) {
379 *top = metrics->top;
380 }
381 if(bottom) {
382 *bottom = metrics->bottom;
383 }
384}
385
386static void SC_MeasureTextAlloc(RsAllocation va,
387 int32_t *left, int32_t *right,
388 int32_t *top, int32_t *bottom)
389{
390 CHECK_OBJ(va);
391 GET_TLS();
392 Allocation *alloc = static_cast<Allocation *>(va);
393 const char *text = (const char *)alloc->getPtr();
394 size_t textLen = alloc->getType()->getSizeBytes();
395 Font::Rect metrics;
396 rsc->mStateFont.measureText(text, textLen, &metrics);
397 SC_setMetrics(&metrics, left, right, top, bottom);
398}
399
400static void SC_MeasureText(const char *text,
401 int32_t *left, int32_t *right,
402 int32_t *top, int32_t *bottom)
403{
404 GET_TLS();
405 size_t textLen = strlen(text);
406 Font::Rect metrics;
407 rsc->mStateFont.measureText(text, textLen, &metrics);
408 SC_setMetrics(&metrics, left, right, top, bottom);
Alex Sakhartchoukd3e0ad42010-06-24 17:15:34 -0700409}
410
411static void SC_BindFont(RsFont font)
412{
Jason Sams605048a2010-09-30 18:15:52 -0700413 CHECK_OBJ(font);
Alex Sakhartchoukd3e0ad42010-06-24 17:15:34 -0700414 GET_TLS();
415 rsi_ContextBindFont(rsc, font);
416}
Jason Samsaeb094b2010-05-18 13:35:45 -0700417
Alex Sakhartchouk9fc9f032010-08-04 14:45:48 -0700418static void SC_FontColor(float r, float g, float b, float a)
419{
420 GET_TLS();
421 rsc->mStateFont.setFontColor(r, g, b, a);
422}
423
Jason Samsaeb094b2010-05-18 13:35:45 -0700424//////////////////////////////////////////////////////////////////////////////
425// Class implementation
426//////////////////////////////////////////////////////////////////////////////
427
428// llvm name mangling ref
429// <builtin-type> ::= v # void
430// ::= b # bool
431// ::= c # char
432// ::= a # signed char
433// ::= h # unsigned char
434// ::= s # short
435// ::= t # unsigned short
436// ::= i # int
437// ::= j # unsigned int
438// ::= l # long
439// ::= m # unsigned long
440// ::= x # long long, __int64
441// ::= y # unsigned long long, __int64
442// ::= f # float
443// ::= d # double
444
445static ScriptCState::SymbolTable_t gSyms[] = {
Jason Sams6bfc1b92010-11-01 14:26:30 -0700446 { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_bindProgramFragment, false },
447 { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_bindProgramStore, false },
448 { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_bindProgramVertex, false },
449 { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_bindProgramRaster, false },
450 { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_bindSampler, false },
451 { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_bindTexture, false },
Jason Sams22fa3712010-05-19 17:22:57 -0700452
Jason Sams6bfc1b92010-11-01 14:26:30 -0700453 { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadProjectionMatrix, false },
454 { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix, false },
455 { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix, false },
Jason Sams22fa3712010-05-19 17:22:57 -0700456
Jason Sams6bfc1b92010-11-01 14:26:30 -0700457 { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_vpGetProjectionMatrix, false },
Alex Sakhartchouk95333f92010-08-16 17:40:10 -0700458
Jason Sams6bfc1b92010-11-01 14:26:30 -0700459 { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_pfConstantColor, false },
Jason Sams6445e522010-08-04 17:50:20 -0700460
Jason Sams6bfc1b92010-11-01 14:26:30 -0700461 { "_Z11rsgGetWidthv", (void *)&SC_getWidth, false },
462 { "_Z12rsgGetHeightv", (void *)&SC_getHeight, false },
Jason Sams22fa3712010-05-19 17:22:57 -0700463
Jason Sams6bfc1b92010-11-01 14:26:30 -0700464 { "_Z18rsgUploadToTexture13rs_allocationj", (void *)&SC_uploadToTexture2, false },
465 { "_Z18rsgUploadToTexture13rs_allocation", (void *)&SC_uploadToTexture, false },
466 { "_Z23rsgUploadToBufferObject13rs_allocation", (void *)&SC_uploadToBufferObject, false },
Jason Sams22fa3712010-05-19 17:22:57 -0700467
Jason Sams6bfc1b92010-11-01 14:26:30 -0700468 { "_Z11rsgDrawRectfffff", (void *)&SC_drawRect, false },
469 { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_drawQuad, false },
470 { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_drawQuadTexCoords, false },
471 { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_drawSpriteScreenspace, false },
Jason Sams22fa3712010-05-19 17:22:57 -0700472
Jason Sams6bfc1b92010-11-01 14:26:30 -0700473 { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_drawMesh, false },
474 { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_drawMeshPrimitive, false },
475 { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_drawMeshPrimitiveRange, false },
476 { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_meshComputeBoundingBox, false },
Alex Sakhartchouk4e9a7a82010-07-01 16:14:06 -0700477
Jason Sams6bfc1b92010-11-01 14:26:30 -0700478 { "_Z13rsgClearColorffff", (void *)&SC_ClearColor, false },
479 { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth, false },
Jason Sams22fa3712010-05-19 17:22:57 -0700480
Jason Sams6bfc1b92010-11-01 14:26:30 -0700481 { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText, false },
482 { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc, false },
483 { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText, false },
484 { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc, false },
Alex Sakhartchoukd3e0ad42010-06-24 17:15:34 -0700485
Jason Sams6bfc1b92010-11-01 14:26:30 -0700486 { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont, false },
487 { "_Z12rsgFontColorffff", (void *)&SC_FontColor, false },
Alex Sakhartchoukd3e0ad42010-06-24 17:15:34 -0700488
Jason Samsaeb094b2010-05-18 13:35:45 -0700489 // misc
Jason Sams6bfc1b92010-11-01 14:26:30 -0700490 { "_Z5colorffff", (void *)&SC_color, false },
Jason Samsaeb094b2010-05-18 13:35:45 -0700491
Jason Sams6bfc1b92010-11-01 14:26:30 -0700492 { NULL, NULL, false }
Jason Samsaeb094b2010-05-18 13:35:45 -0700493};
494
495const ScriptCState::SymbolTable_t * ScriptCState::lookupSymbolGL(const char *sym)
496{
497 ScriptCState::SymbolTable_t *syms = gSyms;
498
499 while (syms->mPtr) {
500 if (!strcmp(syms->mName, sym)) {
501 return syms;
502 }
503 syms++;
504 }
505 return NULL;
506}
507