rsScriptC_LibGL.cpp revision feede2aee6fe3e721ee71ffc35b277f1d9260e03
1536923df75eb53a2c27e889526b200e170e45492Jason Sams/*
2536923df75eb53a2c27e889526b200e170e45492Jason Sams * Copyright (C) 2009 The Android Open Source Project
3536923df75eb53a2c27e889526b200e170e45492Jason Sams *
4536923df75eb53a2c27e889526b200e170e45492Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5536923df75eb53a2c27e889526b200e170e45492Jason Sams * you may not use this file except in compliance with the License.
6536923df75eb53a2c27e889526b200e170e45492Jason Sams * You may obtain a copy of the License at
7536923df75eb53a2c27e889526b200e170e45492Jason Sams *
8536923df75eb53a2c27e889526b200e170e45492Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9536923df75eb53a2c27e889526b200e170e45492Jason Sams *
10536923df75eb53a2c27e889526b200e170e45492Jason Sams * Unless required by applicable law or agreed to in writing, software
11536923df75eb53a2c27e889526b200e170e45492Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12536923df75eb53a2c27e889526b200e170e45492Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13536923df75eb53a2c27e889526b200e170e45492Jason Sams * See the License for the specific language governing permissions and
14536923df75eb53a2c27e889526b200e170e45492Jason Sams * limitations under the License.
15536923df75eb53a2c27e889526b200e170e45492Jason Sams */
16536923df75eb53a2c27e889526b200e170e45492Jason Sams
17536923df75eb53a2c27e889526b200e170e45492Jason Sams#include "rsContext.h"
18536923df75eb53a2c27e889526b200e170e45492Jason Sams#include "rsScriptC.h"
19536923df75eb53a2c27e889526b200e170e45492Jason Sams#include "rsMatrix.h"
20536923df75eb53a2c27e889526b200e170e45492Jason Sams
21536923df75eb53a2c27e889526b200e170e45492Jason Sams#include "utils/Timers.h"
22536923df75eb53a2c27e889526b200e170e45492Jason Sams
23536923df75eb53a2c27e889526b200e170e45492Jason Sams#define GL_GLEXT_PROTOTYPES
24536923df75eb53a2c27e889526b200e170e45492Jason Sams
25536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <GLES/gl.h>
26536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <GLES/glext.h>
27536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <GLES2/gl2.h>
28536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <GLES2/gl2ext.h>
29536923df75eb53a2c27e889526b200e170e45492Jason Sams
30536923df75eb53a2c27e889526b200e170e45492Jason Sams#include <time.h>
31536923df75eb53a2c27e889526b200e170e45492Jason Sams
32536923df75eb53a2c27e889526b200e170e45492Jason Samsusing namespace android;
33536923df75eb53a2c27e889526b200e170e45492Jason Samsusing namespace android::renderscript;
34536923df75eb53a2c27e889526b200e170e45492Jason Sams
35536923df75eb53a2c27e889526b200e170e45492Jason Sams#define GET_TLS()  Context::ScriptTLSStruct * tls = \
36536923df75eb53a2c27e889526b200e170e45492Jason Sams    (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \
37536923df75eb53a2c27e889526b200e170e45492Jason Sams    Context * rsc = tls->mContext; \
38536923df75eb53a2c27e889526b200e170e45492Jason Sams    ScriptC * sc = (ScriptC *) tls->mScript
39536923df75eb53a2c27e889526b200e170e45492Jason Sams
40536923df75eb53a2c27e889526b200e170e45492Jason Sams
41536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
42536923df75eb53a2c27e889526b200e170e45492Jason Sams// Context
43536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
44536923df75eb53a2c27e889526b200e170e45492Jason Sams
45536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va)
46536923df75eb53a2c27e889526b200e170e45492Jason Sams{
47f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ_OR_NULL(va);
48f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(vpf);
49536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
50536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsi_ProgramBindTexture(rsc,
51536923df75eb53a2c27e889526b200e170e45492Jason Sams                           static_cast<ProgramFragment *>(vpf),
52536923df75eb53a2c27e889526b200e170e45492Jason Sams                           slot,
53536923df75eb53a2c27e889526b200e170e45492Jason Sams                           static_cast<Allocation *>(va));
54536923df75eb53a2c27e889526b200e170e45492Jason Sams
55536923df75eb53a2c27e889526b200e170e45492Jason Sams}
56536923df75eb53a2c27e889526b200e170e45492Jason Sams
57536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindSampler(RsProgramFragment vpf, uint32_t slot, RsSampler vs)
58536923df75eb53a2c27e889526b200e170e45492Jason Sams{
59f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ_OR_NULL(vs);
60f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(vpf);
61536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
62536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsi_ProgramBindSampler(rsc,
63536923df75eb53a2c27e889526b200e170e45492Jason Sams                           static_cast<ProgramFragment *>(vpf),
64536923df75eb53a2c27e889526b200e170e45492Jason Sams                           slot,
65536923df75eb53a2c27e889526b200e170e45492Jason Sams                           static_cast<Sampler *>(vs));
66536923df75eb53a2c27e889526b200e170e45492Jason Sams
67536923df75eb53a2c27e889526b200e170e45492Jason Sams}
68536923df75eb53a2c27e889526b200e170e45492Jason Sams
69536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindProgramStore(RsProgramStore pfs)
70536923df75eb53a2c27e889526b200e170e45492Jason Sams{
71f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ_OR_NULL(pfs);
72536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
73536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsi_ContextBindProgramStore(rsc, pfs);
74536923df75eb53a2c27e889526b200e170e45492Jason Sams}
75536923df75eb53a2c27e889526b200e170e45492Jason Sams
76536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindProgramFragment(RsProgramFragment pf)
77536923df75eb53a2c27e889526b200e170e45492Jason Sams{
78f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ_OR_NULL(pf);
79536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
80536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsi_ContextBindProgramFragment(rsc, pf);
81536923df75eb53a2c27e889526b200e170e45492Jason Sams}
82536923df75eb53a2c27e889526b200e170e45492Jason Sams
83536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindProgramVertex(RsProgramVertex pv)
84536923df75eb53a2c27e889526b200e170e45492Jason Sams{
85f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ_OR_NULL(pv);
86536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
87536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsi_ContextBindProgramVertex(rsc, pv);
88536923df75eb53a2c27e889526b200e170e45492Jason Sams}
89536923df75eb53a2c27e889526b200e170e45492Jason Sams
90536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_bindProgramRaster(RsProgramRaster pv)
91536923df75eb53a2c27e889526b200e170e45492Jason Sams{
92f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ_OR_NULL(pv);
93536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
94536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsi_ContextBindProgramRaster(rsc, pv);
95536923df75eb53a2c27e889526b200e170e45492Jason Sams}
96536923df75eb53a2c27e889526b200e170e45492Jason Sams
97536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
98536923df75eb53a2c27e889526b200e170e45492Jason Sams// VP
99536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
100536923df75eb53a2c27e889526b200e170e45492Jason Sams
101d8e76204555e5739df495f92061cd3861ad83bb9Jim Millerstatic void SC_vpLoadProjectionMatrix(const rsc_Matrix *m)
102d8e76204555e5739df495f92061cd3861ad83bb9Jim Miller{
103d8e76204555e5739df495f92061cd3861ad83bb9Jim Miller    GET_TLS();
104b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    rsc->getVertex()->setProjectionMatrix(rsc, m);
105d8e76204555e5739df495f92061cd3861ad83bb9Jim Miller}
106d8e76204555e5739df495f92061cd3861ad83bb9Jim Miller
107536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_vpLoadModelMatrix(const rsc_Matrix *m)
108536923df75eb53a2c27e889526b200e170e45492Jason Sams{
109536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
110b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    rsc->getVertex()->setModelviewMatrix(rsc, m);
111536923df75eb53a2c27e889526b200e170e45492Jason Sams}
112536923df75eb53a2c27e889526b200e170e45492Jason Sams
113536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_vpLoadTextureMatrix(const rsc_Matrix *m)
114536923df75eb53a2c27e889526b200e170e45492Jason Sams{
115536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
116b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    rsc->getVertex()->setTextureMatrix(rsc, m);
117536923df75eb53a2c27e889526b200e170e45492Jason Sams}
118536923df75eb53a2c27e889526b200e170e45492Jason Sams
119536923df75eb53a2c27e889526b200e170e45492Jason Sams
120442a647424e6537e94341654e3ae5d52efd84862Jason Samsstatic void SC_pfConstantColor(RsProgramFragment vpf, float r, float g, float b, float a)
121442a647424e6537e94341654e3ae5d52efd84862Jason Sams{
122b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    GET_TLS();
123f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(vpf);
124442a647424e6537e94341654e3ae5d52efd84862Jason Sams    ProgramFragment *pf = static_cast<ProgramFragment *>(vpf);
125b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    pf->setConstantColor(rsc, r, g, b, a);
126442a647424e6537e94341654e3ae5d52efd84862Jason Sams}
127442a647424e6537e94341654e3ae5d52efd84862Jason Sams
128cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchoukstatic void SC_vpGetProjectionMatrix(rsc_Matrix *m)
129cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk{
130cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk    GET_TLS();
131b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    rsc->getVertex()->getProjectionMatrix(rsc, m);
132cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk}
133cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk
134536923df75eb53a2c27e889526b200e170e45492Jason Sams
135536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
136536923df75eb53a2c27e889526b200e170e45492Jason Sams// Drawing
137536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
138536923df75eb53a2c27e889526b200e170e45492Jason Sams
139536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawQuadTexCoords(float x1, float y1, float z1,
140536923df75eb53a2c27e889526b200e170e45492Jason Sams                                 float u1, float v1,
141536923df75eb53a2c27e889526b200e170e45492Jason Sams                                 float x2, float y2, float z2,
142536923df75eb53a2c27e889526b200e170e45492Jason Sams                                 float u2, float v2,
143536923df75eb53a2c27e889526b200e170e45492Jason Sams                                 float x3, float y3, float z3,
144536923df75eb53a2c27e889526b200e170e45492Jason Sams                                 float u3, float v3,
145536923df75eb53a2c27e889526b200e170e45492Jason Sams                                 float x4, float y4, float z4,
146536923df75eb53a2c27e889526b200e170e45492Jason Sams                                 float u4, float v4)
147536923df75eb53a2c27e889526b200e170e45492Jason Sams{
148536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
149536923df75eb53a2c27e889526b200e170e45492Jason Sams    if (!rsc->setupCheck()) {
150536923df75eb53a2c27e889526b200e170e45492Jason Sams        return;
151536923df75eb53a2c27e889526b200e170e45492Jason Sams    }
152536923df75eb53a2c27e889526b200e170e45492Jason Sams
153536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("Quad");
154536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1);
155536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2);
156536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3);
157536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4);
158536923df75eb53a2c27e889526b200e170e45492Jason Sams
159536923df75eb53a2c27e889526b200e170e45492Jason Sams    float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4};
160536923df75eb53a2c27e889526b200e170e45492Jason Sams    const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4};
161536923df75eb53a2c27e889526b200e170e45492Jason Sams
162536923df75eb53a2c27e889526b200e170e45492Jason Sams    VertexArray va;
1634378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk    va.add(GL_FLOAT, 3, 12, false, (uint32_t)vtx, "ATTRIB_position");
1644378f1175546616c76ecb7f0b1159940ab22d5f4Alex Sakhartchouk    va.add(GL_FLOAT, 2, 8, false, (uint32_t)tex, "ATTRIB_texture0");
1658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    va.setupGL2(rsc, &rsc->mStateVertexArray, &rsc->mShaderCache);
166536923df75eb53a2c27e889526b200e170e45492Jason Sams
167536923df75eb53a2c27e889526b200e170e45492Jason Sams    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
168536923df75eb53a2c27e889526b200e170e45492Jason Sams}
169536923df75eb53a2c27e889526b200e170e45492Jason Sams
170536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawQuad(float x1, float y1, float z1,
171536923df75eb53a2c27e889526b200e170e45492Jason Sams                        float x2, float y2, float z2,
172536923df75eb53a2c27e889526b200e170e45492Jason Sams                        float x3, float y3, float z3,
173536923df75eb53a2c27e889526b200e170e45492Jason Sams                        float x4, float y4, float z4)
174536923df75eb53a2c27e889526b200e170e45492Jason Sams{
175536923df75eb53a2c27e889526b200e170e45492Jason Sams    SC_drawQuadTexCoords(x1, y1, z1, 0, 1,
176536923df75eb53a2c27e889526b200e170e45492Jason Sams                         x2, y2, z2, 1, 1,
177536923df75eb53a2c27e889526b200e170e45492Jason Sams                         x3, y3, z3, 1, 0,
178536923df75eb53a2c27e889526b200e170e45492Jason Sams                         x4, y4, z4, 0, 0);
179536923df75eb53a2c27e889526b200e170e45492Jason Sams}
180536923df75eb53a2c27e889526b200e170e45492Jason Sams
181536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawSpriteScreenspace(float x, float y, float z, float w, float h)
182536923df75eb53a2c27e889526b200e170e45492Jason Sams{
183536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
184536923df75eb53a2c27e889526b200e170e45492Jason Sams    ObjectBaseRef<const ProgramVertex> tmp(rsc->getVertex());
185536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsc->setVertex(rsc->getDefaultProgramVertex());
186536923df75eb53a2c27e889526b200e170e45492Jason Sams    //rsc->setupCheck();
187536923df75eb53a2c27e889526b200e170e45492Jason Sams
188536923df75eb53a2c27e889526b200e170e45492Jason Sams    //GLint crop[4] = {0, h, w, -h};
189536923df75eb53a2c27e889526b200e170e45492Jason Sams
190536923df75eb53a2c27e889526b200e170e45492Jason Sams    float sh = rsc->getHeight();
191536923df75eb53a2c27e889526b200e170e45492Jason Sams
192536923df75eb53a2c27e889526b200e170e45492Jason Sams    SC_drawQuad(x,   sh - y,     z,
193536923df75eb53a2c27e889526b200e170e45492Jason Sams                x+w, sh - y,     z,
194536923df75eb53a2c27e889526b200e170e45492Jason Sams                x+w, sh - (y+h), z,
195536923df75eb53a2c27e889526b200e170e45492Jason Sams                x,   sh - (y+h), z);
196536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsc->setVertex((ProgramVertex *)tmp.get());
197536923df75eb53a2c27e889526b200e170e45492Jason Sams}
1986d1cf4148cbaec21cbc7d200894f6c7923075ed0Jason Sams/*
199536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawSprite(float x, float y, float z, float w, float h)
200536923df75eb53a2c27e889526b200e170e45492Jason Sams{
201536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
202536923df75eb53a2c27e889526b200e170e45492Jason Sams    float vin[3] = {x, y, z};
203536923df75eb53a2c27e889526b200e170e45492Jason Sams    float vout[4];
204536923df75eb53a2c27e889526b200e170e45492Jason Sams
205536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("ds  in %f %f %f", x, y, z);
206536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsc->getVertex()->transformToScreen(rsc, vout, vin);
207536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("ds  out %f %f %f %f", vout[0], vout[1], vout[2], vout[3]);
208536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[0] /= vout[3];
209536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[1] /= vout[3];
210536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[2] /= vout[3];
211536923df75eb53a2c27e889526b200e170e45492Jason Sams
212536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[0] *= rsc->getWidth() / 2;
213536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[1] *= rsc->getHeight() / 2;
214536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[0] += rsc->getWidth() / 2;
215536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[1] += rsc->getHeight() / 2;
216536923df75eb53a2c27e889526b200e170e45492Jason Sams
217536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[0] -= w/2;
218536923df75eb53a2c27e889526b200e170e45492Jason Sams    vout[1] -= h/2;
219536923df75eb53a2c27e889526b200e170e45492Jason Sams
220536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("ds  out2 %f %f %f", vout[0], vout[1], vout[2]);
221536923df75eb53a2c27e889526b200e170e45492Jason Sams
222536923df75eb53a2c27e889526b200e170e45492Jason Sams    // U, V, W, H
223536923df75eb53a2c27e889526b200e170e45492Jason Sams    SC_drawSpriteScreenspace(vout[0], vout[1], z, h, w);
224536923df75eb53a2c27e889526b200e170e45492Jason Sams    //rsc->setupCheck();
225536923df75eb53a2c27e889526b200e170e45492Jason Sams}
2266d1cf4148cbaec21cbc7d200894f6c7923075ed0Jason Sams*/
227536923df75eb53a2c27e889526b200e170e45492Jason Sams
228536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_drawRect(float x1, float y1,
229536923df75eb53a2c27e889526b200e170e45492Jason Sams                        float x2, float y2, float z)
230536923df75eb53a2c27e889526b200e170e45492Jason Sams{
231536923df75eb53a2c27e889526b200e170e45492Jason Sams    //LOGE("SC_drawRect %f,%f  %f,%f  %f", x1, y1, x2, y2, z);
232536923df75eb53a2c27e889526b200e170e45492Jason Sams    SC_drawQuad(x1, y2, z,
233536923df75eb53a2c27e889526b200e170e45492Jason Sams                x2, y2, z,
234536923df75eb53a2c27e889526b200e170e45492Jason Sams                x2, y1, z,
235536923df75eb53a2c27e889526b200e170e45492Jason Sams                x1, y1, z);
236536923df75eb53a2c27e889526b200e170e45492Jason Sams}
237536923df75eb53a2c27e889526b200e170e45492Jason Sams
238164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void SC_drawMesh(RsMesh vsm)
239164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
240f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(vsm);
241164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    GET_TLS();
242164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    Mesh *sm = static_cast<Mesh *>(vsm);
243536923df75eb53a2c27e889526b200e170e45492Jason Sams    if (!rsc->setupCheck()) {
244536923df75eb53a2c27e889526b200e170e45492Jason Sams        return;
245536923df75eb53a2c27e889526b200e170e45492Jason Sams    }
246536923df75eb53a2c27e889526b200e170e45492Jason Sams    sm->render(rsc);
247536923df75eb53a2c27e889526b200e170e45492Jason Sams}
248536923df75eb53a2c27e889526b200e170e45492Jason Sams
249164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void SC_drawMeshPrimitive(RsMesh vsm, uint32_t primIndex)
250536923df75eb53a2c27e889526b200e170e45492Jason Sams{
251f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(vsm);
252536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
253164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    Mesh *sm = static_cast<Mesh *>(vsm);
254536923df75eb53a2c27e889526b200e170e45492Jason Sams    if (!rsc->setupCheck()) {
255536923df75eb53a2c27e889526b200e170e45492Jason Sams        return;
256536923df75eb53a2c27e889526b200e170e45492Jason Sams    }
257164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    sm->renderPrimitive(rsc, primIndex);
258164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk}
259164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
260164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchoukstatic void SC_drawMeshPrimitiveRange(RsMesh vsm, uint32_t primIndex, uint32_t start, uint32_t len)
261164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk{
262f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(vsm);
263164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    GET_TLS();
264164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    Mesh *sm = static_cast<Mesh *>(vsm);
265164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    if (!rsc->setupCheck()) {
266164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk        return;
267164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    }
268164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    sm->renderPrimitiveRange(rsc, primIndex, start, len);
269536923df75eb53a2c27e889526b200e170e45492Jason Sams}
270536923df75eb53a2c27e889526b200e170e45492Jason Sams
271a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchoukstatic void SC_meshComputeBoundingBox(RsMesh vsm, float *minX, float *minY, float *minZ,
272a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk                                                     float *maxX, float *maxY, float *maxZ)
273a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk{
274f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(vsm);
275a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    GET_TLS();
276a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    Mesh *sm = static_cast<Mesh *>(vsm);
277a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    sm->computeBBox();
278a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    *minX = sm->mBBoxMin[0];
279a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    *minY = sm->mBBoxMin[1];
280a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    *minZ = sm->mBBoxMin[2];
281a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    *maxX = sm->mBBoxMax[0];
282a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    *maxY = sm->mBBoxMax[1];
283a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    *maxZ = sm->mBBoxMax[2];
284a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk}
285a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk
286536923df75eb53a2c27e889526b200e170e45492Jason Sams
287536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
288536923df75eb53a2c27e889526b200e170e45492Jason Sams//
289536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
290536923df75eb53a2c27e889526b200e170e45492Jason Sams
291536923df75eb53a2c27e889526b200e170e45492Jason Sams
292536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_color(float r, float g, float b, float a)
293536923df75eb53a2c27e889526b200e170e45492Jason Sams{
294536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
295442a647424e6537e94341654e3ae5d52efd84862Jason Sams    ProgramFragment *pf = (ProgramFragment *)rsc->getFragment();
296b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    pf->setConstantColor(rsc, r, g, b, a);
297536923df75eb53a2c27e889526b200e170e45492Jason Sams}
298536923df75eb53a2c27e889526b200e170e45492Jason Sams
299d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsstatic void SC_uploadToTexture2(RsAllocation va, uint32_t baseMipLevel)
300536923df75eb53a2c27e889526b200e170e45492Jason Sams{
301f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(va);
302536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
303536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsi_AllocationUploadToTexture(rsc, va, false, baseMipLevel);
304536923df75eb53a2c27e889526b200e170e45492Jason Sams}
305d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsstatic void SC_uploadToTexture(RsAllocation va)
306d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams{
307f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(va);
308d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams    GET_TLS();
309d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams    rsi_AllocationUploadToTexture(rsc, va, false, 0);
310d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams}
311536923df75eb53a2c27e889526b200e170e45492Jason Sams
312536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic void SC_uploadToBufferObject(RsAllocation va)
313536923df75eb53a2c27e889526b200e170e45492Jason Sams{
314f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(va);
315536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
316536923df75eb53a2c27e889526b200e170e45492Jason Sams    rsi_AllocationUploadToBufferObject(rsc, va);
317536923df75eb53a2c27e889526b200e170e45492Jason Sams}
318536923df75eb53a2c27e889526b200e170e45492Jason Sams
319d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsstatic void SC_ClearColor(float r, float g, float b, float a)
320536923df75eb53a2c27e889526b200e170e45492Jason Sams{
321536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
322feede2aee6fe3e721ee71ffc35b277f1d9260e03Alex Sakhartchouk    rsc->setupProgramStore();
323536923df75eb53a2c27e889526b200e170e45492Jason Sams
324d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams    glClearColor(r, g, b, a);
325d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams    glClear(GL_COLOR_BUFFER_BIT);
326536923df75eb53a2c27e889526b200e170e45492Jason Sams}
327536923df75eb53a2c27e889526b200e170e45492Jason Sams
328d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Samsstatic void SC_ClearDepth(float v)
329536923df75eb53a2c27e889526b200e170e45492Jason Sams{
330536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
331feede2aee6fe3e721ee71ffc35b277f1d9260e03Alex Sakhartchouk    rsc->setupProgramStore();
332d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams
333d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams    glClearDepthf(v);
334d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams    glClear(GL_DEPTH_BUFFER_BIT);
335536923df75eb53a2c27e889526b200e170e45492Jason Sams}
336536923df75eb53a2c27e889526b200e170e45492Jason Sams
337536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic uint32_t SC_getWidth()
338536923df75eb53a2c27e889526b200e170e45492Jason Sams{
339536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
340536923df75eb53a2c27e889526b200e170e45492Jason Sams    return rsc->getWidth();
341536923df75eb53a2c27e889526b200e170e45492Jason Sams}
342536923df75eb53a2c27e889526b200e170e45492Jason Sams
343536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic uint32_t SC_getHeight()
344536923df75eb53a2c27e889526b200e170e45492Jason Sams{
345536923df75eb53a2c27e889526b200e170e45492Jason Sams    GET_TLS();
346536923df75eb53a2c27e889526b200e170e45492Jason Sams    return rsc->getHeight();
347536923df75eb53a2c27e889526b200e170e45492Jason Sams}
348536923df75eb53a2c27e889526b200e170e45492Jason Sams
3499b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic void SC_DrawTextAlloc(RsAllocation va, int x, int y)
3509b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
351f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(va);
3529b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    GET_TLS();
3539b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    Allocation *alloc = static_cast<Allocation *>(va);
3549b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    rsc->mStateFont.renderText(alloc, x, y);
3559b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
3569b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
3579b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic void SC_DrawText(const char *text, int x, int y)
3589b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
3599b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    GET_TLS();
3609b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    rsc->mStateFont.renderText(text, x, y);
3619b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
3629b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
3639b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukstatic void SC_BindFont(RsFont font)
3649b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk{
365f166d9b5a280f0ec2ce7e089471c20a1477e2dbbJason Sams    CHECK_OBJ(font);
3669b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    GET_TLS();
3679b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    rsi_ContextBindFont(rsc, font);
3689b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk}
369536923df75eb53a2c27e889526b200e170e45492Jason Sams
370fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchoukstatic void SC_FontColor(float r, float g, float b, float a)
371fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk{
372fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    GET_TLS();
373fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    rsc->mStateFont.setFontColor(r, g, b, a);
374fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk}
375fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk
376536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
377536923df75eb53a2c27e889526b200e170e45492Jason Sams// Class implementation
378536923df75eb53a2c27e889526b200e170e45492Jason Sams//////////////////////////////////////////////////////////////////////////////
379536923df75eb53a2c27e889526b200e170e45492Jason Sams
380536923df75eb53a2c27e889526b200e170e45492Jason Sams// llvm name mangling ref
381536923df75eb53a2c27e889526b200e170e45492Jason Sams//  <builtin-type> ::= v  # void
382536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= b  # bool
383536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= c  # char
384536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= a  # signed char
385536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= h  # unsigned char
386536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= s  # short
387536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= t  # unsigned short
388536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= i  # int
389536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= j  # unsigned int
390536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= l  # long
391536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= m  # unsigned long
392536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= x  # long long, __int64
393536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= y  # unsigned long long, __int64
394536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= f  # float
395536923df75eb53a2c27e889526b200e170e45492Jason Sams//                 ::= d  # double
396536923df75eb53a2c27e889526b200e170e45492Jason Sams
397536923df75eb53a2c27e889526b200e170e45492Jason Samsstatic ScriptCState::SymbolTable_t gSyms[] = {
398f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_bindProgramFragment },
399f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_bindProgramStore },
400f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_bindProgramVertex },
401f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_bindProgramRaster },
402f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_bindSampler },
403f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_bindTexture },
404d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams
405f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadProjectionMatrix },
406f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix },
407f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix },
408d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams
409cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk    { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_vpGetProjectionMatrix },
410cbed7524eacb4adf61c20a0af8bfb37938610bd6Alex Sakhartchouk
411442a647424e6537e94341654e3ae5d52efd84862Jason Sams    { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_pfConstantColor },
412442a647424e6537e94341654e3ae5d52efd84862Jason Sams
413f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z11rsgGetWidthv", (void *)&SC_getWidth },
414f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z12rsgGetHeightv", (void *)&SC_getHeight },
415d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams
416f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z18rsgUploadToTexture13rs_allocationj", (void *)&SC_uploadToTexture2 },
41796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    { "_Z18rsgUploadToTexture13rs_allocation", (void *)&SC_uploadToTexture },
418f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z23rsgUploadToBufferObject13rs_allocation", (void *)&SC_uploadToBufferObject },
419d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams
420f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z11rsgDrawRectfffff", (void *)&SC_drawRect },
421f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_drawQuad },
422f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_drawQuadTexCoords },
423f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_drawSpriteScreenspace },
424d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams
425164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk    { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_drawMesh },
426f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_drawMeshPrimitive },
427f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_drawMeshPrimitiveRange },
428a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk    { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_meshComputeBoundingBox },
429164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk
430f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z13rsgClearColorffff", (void *)&SC_ClearColor },
431f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth },
432d79b2e9f8b0fa43f6734aaa5e9d0d389d5da5109Jason Sams
4339b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText },
4349b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk    { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc },
4359b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
436f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont },
437fb10c16a0528a418053e4b8e75eebe57476b86efAlex Sakhartchouk    { "_Z12rsgFontColorffff", (void *)&SC_FontColor },
4389b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk
439536923df75eb53a2c27e889526b200e170e45492Jason Sams    // misc
440f0690c4f29f3c6fbff2fd5a9cc6d3ff028e1e066Jason Sams    { "_Z5colorffff", (void *)&SC_color },
441536923df75eb53a2c27e889526b200e170e45492Jason Sams
442536923df75eb53a2c27e889526b200e170e45492Jason Sams    { NULL, NULL }
443536923df75eb53a2c27e889526b200e170e45492Jason Sams};
444536923df75eb53a2c27e889526b200e170e45492Jason Sams
445536923df75eb53a2c27e889526b200e170e45492Jason Samsconst ScriptCState::SymbolTable_t * ScriptCState::lookupSymbolGL(const char *sym)
446536923df75eb53a2c27e889526b200e170e45492Jason Sams{
447536923df75eb53a2c27e889526b200e170e45492Jason Sams    ScriptCState::SymbolTable_t *syms = gSyms;
448536923df75eb53a2c27e889526b200e170e45492Jason Sams
449536923df75eb53a2c27e889526b200e170e45492Jason Sams    while (syms->mPtr) {
450536923df75eb53a2c27e889526b200e170e45492Jason Sams        if (!strcmp(syms->mName, sym)) {
451536923df75eb53a2c27e889526b200e170e45492Jason Sams            return syms;
452536923df75eb53a2c27e889526b200e170e45492Jason Sams        }
453536923df75eb53a2c27e889526b200e170e45492Jason Sams        syms++;
454536923df75eb53a2c27e889526b200e170e45492Jason Sams    }
455536923df75eb53a2c27e889526b200e170e45492Jason Sams    return NULL;
456536923df75eb53a2c27e889526b200e170e45492Jason Sams}
457536923df75eb53a2c27e889526b200e170e45492Jason Sams
458