rsScriptC_LibGL.cpp revision 60709257bbdeb0c50f39b9c8969dc76264d6e142
1aeb094b520d8ea49b74129927578f18f758c873eJason Sams/* 2aeb094b520d8ea49b74129927578f18f758c873eJason Sams * Copyright (C) 2009 The Android Open Source Project 3aeb094b520d8ea49b74129927578f18f758c873eJason Sams * 4aeb094b520d8ea49b74129927578f18f758c873eJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5aeb094b520d8ea49b74129927578f18f758c873eJason Sams * you may not use this file except in compliance with the License. 6aeb094b520d8ea49b74129927578f18f758c873eJason Sams * You may obtain a copy of the License at 7aeb094b520d8ea49b74129927578f18f758c873eJason Sams * 8aeb094b520d8ea49b74129927578f18f758c873eJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9aeb094b520d8ea49b74129927578f18f758c873eJason Sams * 10aeb094b520d8ea49b74129927578f18f758c873eJason Sams * Unless required by applicable law or agreed to in writing, software 11aeb094b520d8ea49b74129927578f18f758c873eJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12aeb094b520d8ea49b74129927578f18f758c873eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aeb094b520d8ea49b74129927578f18f758c873eJason Sams * See the License for the specific language governing permissions and 14aeb094b520d8ea49b74129927578f18f758c873eJason Sams * limitations under the License. 15aeb094b520d8ea49b74129927578f18f758c873eJason Sams */ 16aeb094b520d8ea49b74129927578f18f758c873eJason Sams 17aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include "rsContext.h" 18aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include "rsScriptC.h" 19aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include "rsMatrix.h" 20aeb094b520d8ea49b74129927578f18f758c873eJason Sams 21aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include "utils/Timers.h" 22aeb094b520d8ea49b74129927578f18f758c873eJason Sams 23aeb094b520d8ea49b74129927578f18f758c873eJason Sams#define GL_GLEXT_PROTOTYPES 24aeb094b520d8ea49b74129927578f18f758c873eJason Sams 25aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include <GLES/gl.h> 26aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include <GLES/glext.h> 27aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include <GLES2/gl2.h> 28aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include <GLES2/gl2ext.h> 29aeb094b520d8ea49b74129927578f18f758c873eJason Sams 30aeb094b520d8ea49b74129927578f18f758c873eJason Sams#include <time.h> 31aeb094b520d8ea49b74129927578f18f758c873eJason Sams 32aeb094b520d8ea49b74129927578f18f758c873eJason Samsusing namespace android; 33aeb094b520d8ea49b74129927578f18f758c873eJason Samsusing namespace android::renderscript; 34aeb094b520d8ea49b74129927578f18f758c873eJason Sams 35aeb094b520d8ea49b74129927578f18f758c873eJason Sams#define GET_TLS() Context::ScriptTLSStruct * tls = \ 36aeb094b520d8ea49b74129927578f18f758c873eJason Sams (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); \ 37aeb094b520d8ea49b74129927578f18f758c873eJason Sams Context * rsc = tls->mContext; \ 38aeb094b520d8ea49b74129927578f18f758c873eJason Sams ScriptC * sc = (ScriptC *) tls->mScript 39aeb094b520d8ea49b74129927578f18f758c873eJason Sams 40aeb094b520d8ea49b74129927578f18f758c873eJason Sams 41aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 42aeb094b520d8ea49b74129927578f18f758c873eJason Sams// Context 43aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 44aeb094b520d8ea49b74129927578f18f758c873eJason Sams 45afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_bindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va) { 46605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(va); 47605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vpf); 48aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 49aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ProgramBindTexture(rsc, 50aeb094b520d8ea49b74129927578f18f758c873eJason Sams static_cast<ProgramFragment *>(vpf), 51aeb094b520d8ea49b74129927578f18f758c873eJason Sams slot, 52aeb094b520d8ea49b74129927578f18f758c873eJason Sams static_cast<Allocation *>(va)); 53aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 54aeb094b520d8ea49b74129927578f18f758c873eJason Sams 55afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_bindSampler(RsProgramFragment vpf, uint32_t slot, RsSampler vs) { 56605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(vs); 57605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vpf); 58aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 59aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ProgramBindSampler(rsc, 60aeb094b520d8ea49b74129927578f18f758c873eJason Sams static_cast<ProgramFragment *>(vpf), 61aeb094b520d8ea49b74129927578f18f758c873eJason Sams slot, 62aeb094b520d8ea49b74129927578f18f758c873eJason Sams static_cast<Sampler *>(vs)); 63aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 64aeb094b520d8ea49b74129927578f18f758c873eJason Sams 65afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_bindProgramStore(RsProgramStore pfs) { 66605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(pfs); 67aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 68aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ContextBindProgramStore(rsc, pfs); 69aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 70aeb094b520d8ea49b74129927578f18f758c873eJason Sams 71afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_bindProgramFragment(RsProgramFragment pf) { 72605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(pf); 73aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 74aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ContextBindProgramFragment(rsc, pf); 75aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 76aeb094b520d8ea49b74129927578f18f758c873eJason Sams 77afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_bindProgramVertex(RsProgramVertex pv) { 78605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(pv); 79aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 80aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ContextBindProgramVertex(rsc, pv); 81aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 82aeb094b520d8ea49b74129927578f18f758c873eJason Sams 83afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_bindProgramRaster(RsProgramRaster pv) { 84605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(pv); 85aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 86aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ContextBindProgramRaster(rsc, pv); 87aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 88aeb094b520d8ea49b74129927578f18f758c873eJason Sams 89aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 90aeb094b520d8ea49b74129927578f18f758c873eJason Sams// VP 91aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 92aeb094b520d8ea49b74129927578f18f758c873eJason Sams 93afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_vpLoadProjectionMatrix(const rsc_Matrix *m) { 94a490f1003a76286e0f00606adff4ef85fdd78b02Jim Miller GET_TLS(); 9560709257bbdeb0c50f39b9c8969dc76264d6e142Jason Sams rsc->getProgramVertex()->setProjectionMatrix(rsc, m); 96a490f1003a76286e0f00606adff4ef85fdd78b02Jim Miller} 97a490f1003a76286e0f00606adff4ef85fdd78b02Jim Miller 98afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_vpLoadModelMatrix(const rsc_Matrix *m) { 99aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 10060709257bbdeb0c50f39b9c8969dc76264d6e142Jason Sams rsc->getProgramVertex()->setModelviewMatrix(rsc, m); 101aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 102aeb094b520d8ea49b74129927578f18f758c873eJason Sams 103afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_vpLoadTextureMatrix(const rsc_Matrix *m) { 104aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 10560709257bbdeb0c50f39b9c8969dc76264d6e142Jason Sams rsc->getProgramVertex()->setTextureMatrix(rsc, m); 106aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 107aeb094b520d8ea49b74129927578f18f758c873eJason Sams 108afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_pfConstantColor(RsProgramFragment vpf, float r, float g, float b, float a) { 109383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk GET_TLS(); 110605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vpf); 1116445e5210c6d7f8689e94be9026153d017c9545bJason Sams ProgramFragment *pf = static_cast<ProgramFragment *>(vpf); 112383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk pf->setConstantColor(rsc, r, g, b, a); 1136445e5210c6d7f8689e94be9026153d017c9545bJason Sams} 1146445e5210c6d7f8689e94be9026153d017c9545bJason Sams 115afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_vpGetProjectionMatrix(rsc_Matrix *m) { 11695333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk GET_TLS(); 11760709257bbdeb0c50f39b9c8969dc76264d6e142Jason Sams rsc->getProgramVertex()->getProjectionMatrix(rsc, m); 11895333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk} 11995333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk 120aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 121aeb094b520d8ea49b74129927578f18f758c873eJason Sams// Drawing 122aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 123aeb094b520d8ea49b74129927578f18f758c873eJason Sams 124aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawQuadTexCoords(float x1, float y1, float z1, 125aeb094b520d8ea49b74129927578f18f758c873eJason Sams float u1, float v1, 126aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x2, float y2, float z2, 127aeb094b520d8ea49b74129927578f18f758c873eJason Sams float u2, float v2, 128aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x3, float y3, float z3, 129aeb094b520d8ea49b74129927578f18f758c873eJason Sams float u3, float v3, 130aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x4, float y4, float z4, 131afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk float u4, float v4) { 132aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 133aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!rsc->setupCheck()) { 134aeb094b520d8ea49b74129927578f18f758c873eJason Sams return; 135aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 136aeb094b520d8ea49b74129927578f18f758c873eJason Sams 137aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("Quad"); 138aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1); 139aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2); 140aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3); 141aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4); 142aeb094b520d8ea49b74129927578f18f758c873eJason Sams 143aeb094b520d8ea49b74129927578f18f758c873eJason Sams float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4}; 144aeb094b520d8ea49b74129927578f18f758c873eJason Sams const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4}; 145aeb094b520d8ea49b74129927578f18f758c873eJason Sams 14654929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk VertexArray::Attrib attribs[2]; 14754929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk attribs[0].set(GL_FLOAT, 3, 12, false, (uint32_t)vtx, "ATTRIB_position"); 14854929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk attribs[1].set(GL_FLOAT, 2, 8, false, (uint32_t)tex, "ATTRIB_texture0"); 14954929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk 15054929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk VertexArray va(attribs, 2); 15179f52df541f87ac07709e770cd79f14dd1a05e93Jason Sams va.setupGL2(rsc, &rsc->mStateVertexArray, &rsc->mShaderCache); 152aeb094b520d8ea49b74129927578f18f758c873eJason Sams 153aeb094b520d8ea49b74129927578f18f758c873eJason Sams glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 154aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 155aeb094b520d8ea49b74129927578f18f758c873eJason Sams 156aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawQuad(float x1, float y1, float z1, 157aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x2, float y2, float z2, 158aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x3, float y3, float z3, 159afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk float x4, float y4, float z4) { 160aeb094b520d8ea49b74129927578f18f758c873eJason Sams SC_drawQuadTexCoords(x1, y1, z1, 0, 1, 161aeb094b520d8ea49b74129927578f18f758c873eJason Sams x2, y2, z2, 1, 1, 162aeb094b520d8ea49b74129927578f18f758c873eJason Sams x3, y3, z3, 1, 0, 163aeb094b520d8ea49b74129927578f18f758c873eJason Sams x4, y4, z4, 0, 0); 164aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 165aeb094b520d8ea49b74129927578f18f758c873eJason Sams 166afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_drawSpriteScreenspace(float x, float y, float z, float w, float h) { 167aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 16860709257bbdeb0c50f39b9c8969dc76264d6e142Jason Sams ObjectBaseRef<const ProgramVertex> tmp(rsc->getProgramVertex()); 16960709257bbdeb0c50f39b9c8969dc76264d6e142Jason Sams rsc->setProgramVertex(rsc->getDefaultProgramVertex()); 170aeb094b520d8ea49b74129927578f18f758c873eJason Sams //rsc->setupCheck(); 171aeb094b520d8ea49b74129927578f18f758c873eJason Sams 172aeb094b520d8ea49b74129927578f18f758c873eJason Sams //GLint crop[4] = {0, h, w, -h}; 173aeb094b520d8ea49b74129927578f18f758c873eJason Sams 174aeb094b520d8ea49b74129927578f18f758c873eJason Sams float sh = rsc->getHeight(); 175aeb094b520d8ea49b74129927578f18f758c873eJason Sams 176aeb094b520d8ea49b74129927578f18f758c873eJason Sams SC_drawQuad(x, sh - y, z, 177aeb094b520d8ea49b74129927578f18f758c873eJason Sams x+w, sh - y, z, 178aeb094b520d8ea49b74129927578f18f758c873eJason Sams x+w, sh - (y+h), z, 179aeb094b520d8ea49b74129927578f18f758c873eJason Sams x, sh - (y+h), z); 18060709257bbdeb0c50f39b9c8969dc76264d6e142Jason Sams rsc->setProgramVertex((ProgramVertex *)tmp.get()); 181aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 182bdb046001675f949e7e9b2cd0bfd63a5889d97edJason Sams/* 183aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawSprite(float x, float y, float z, float w, float h) 184aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 185aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 186aeb094b520d8ea49b74129927578f18f758c873eJason Sams float vin[3] = {x, y, z}; 187aeb094b520d8ea49b74129927578f18f758c873eJason Sams float vout[4]; 188aeb094b520d8ea49b74129927578f18f758c873eJason Sams 189aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("ds in %f %f %f", x, y, z); 190aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsc->getVertex()->transformToScreen(rsc, vout, vin); 191aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("ds out %f %f %f %f", vout[0], vout[1], vout[2], vout[3]); 192aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[0] /= vout[3]; 193aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[1] /= vout[3]; 194aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[2] /= vout[3]; 195aeb094b520d8ea49b74129927578f18f758c873eJason Sams 196aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[0] *= rsc->getWidth() / 2; 197aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[1] *= rsc->getHeight() / 2; 198aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[0] += rsc->getWidth() / 2; 199aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[1] += rsc->getHeight() / 2; 200aeb094b520d8ea49b74129927578f18f758c873eJason Sams 201aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[0] -= w/2; 202aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[1] -= h/2; 203aeb094b520d8ea49b74129927578f18f758c873eJason Sams 204aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("ds out2 %f %f %f", vout[0], vout[1], vout[2]); 205aeb094b520d8ea49b74129927578f18f758c873eJason Sams 206aeb094b520d8ea49b74129927578f18f758c873eJason Sams // U, V, W, H 207aeb094b520d8ea49b74129927578f18f758c873eJason Sams SC_drawSpriteScreenspace(vout[0], vout[1], z, h, w); 208aeb094b520d8ea49b74129927578f18f758c873eJason Sams //rsc->setupCheck(); 209aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 210bdb046001675f949e7e9b2cd0bfd63a5889d97edJason Sams*/ 211aeb094b520d8ea49b74129927578f18f758c873eJason Sams 212aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawRect(float x1, float y1, 213afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk float x2, float y2, float z) { 214aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("SC_drawRect %f,%f %f,%f %f", x1, y1, x2, y2, z); 215aeb094b520d8ea49b74129927578f18f758c873eJason Sams SC_drawQuad(x1, y2, z, 216aeb094b520d8ea49b74129927578f18f758c873eJason Sams x2, y2, z, 217aeb094b520d8ea49b74129927578f18f758c873eJason Sams x2, y1, z, 218aeb094b520d8ea49b74129927578f18f758c873eJason Sams x1, y1, z); 219aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 220aeb094b520d8ea49b74129927578f18f758c873eJason Sams 221afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_drawMesh(RsMesh vsm) { 222605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsm); 2234e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk GET_TLS(); 2244e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 225aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!rsc->setupCheck()) { 226aeb094b520d8ea49b74129927578f18f758c873eJason Sams return; 227aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 228aeb094b520d8ea49b74129927578f18f758c873eJason Sams sm->render(rsc); 229aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 230aeb094b520d8ea49b74129927578f18f758c873eJason Sams 231afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_drawMeshPrimitive(RsMesh vsm, uint32_t primIndex) { 232605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsm); 233aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 2344e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 235aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!rsc->setupCheck()) { 236aeb094b520d8ea49b74129927578f18f758c873eJason Sams return; 237aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 2384e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk sm->renderPrimitive(rsc, primIndex); 2394e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk} 2404e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 241afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_drawMeshPrimitiveRange(RsMesh vsm, uint32_t primIndex, uint32_t start, uint32_t len) { 242605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsm); 2434e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk GET_TLS(); 2444e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 2454e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk if (!rsc->setupCheck()) { 2464e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk return; 2474e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk } 2484e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk sm->renderPrimitiveRange(rsc, primIndex, start, len); 249aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 250aeb094b520d8ea49b74129927578f18f758c873eJason Sams 251afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_meshComputeBoundingBox(RsMesh vsm, 252afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk float *minX, float *minY, float *minZ, 253afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk float *maxX, float *maxY, float *maxZ) { 254605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsm); 255ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk GET_TLS(); 256ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 257ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk sm->computeBBox(); 258ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *minX = sm->mBBoxMin[0]; 259ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *minY = sm->mBBoxMin[1]; 260ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *minZ = sm->mBBoxMin[2]; 261ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *maxX = sm->mBBoxMax[0]; 262ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *maxY = sm->mBBoxMax[1]; 263ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *maxZ = sm->mBBoxMax[2]; 264ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk} 265ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk 266aeb094b520d8ea49b74129927578f18f758c873eJason Sams 267aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 268aeb094b520d8ea49b74129927578f18f758c873eJason Sams// 269aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 270aeb094b520d8ea49b74129927578f18f758c873eJason Sams 271aeb094b520d8ea49b74129927578f18f758c873eJason Sams 272afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_color(float r, float g, float b, float a) { 273aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 27460709257bbdeb0c50f39b9c8969dc76264d6e142Jason Sams ProgramFragment *pf = (ProgramFragment *)rsc->getProgramFragment(); 275383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk pf->setConstantColor(rsc, r, g, b, a); 276aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 277aeb094b520d8ea49b74129927578f18f758c873eJason Sams 278afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_uploadToTexture2(RsAllocation va, uint32_t baseMipLevel) { 279605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 280aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 281aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_AllocationUploadToTexture(rsc, va, false, baseMipLevel); 282aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 283afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 284afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_uploadToTexture(RsAllocation va) { 285605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 28622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams GET_TLS(); 28722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams rsi_AllocationUploadToTexture(rsc, va, false, 0); 28822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 289aeb094b520d8ea49b74129927578f18f758c873eJason Sams 290afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_uploadToBufferObject(RsAllocation va) { 291605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 292aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 293aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_AllocationUploadToBufferObject(rsc, va); 294aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 295aeb094b520d8ea49b74129927578f18f758c873eJason Sams 296afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_ClearColor(float r, float g, float b, float a) { 297aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 298889fe50e7aaebed8cb8284b16a0e51e64e8a3a9cAlex Sakhartchouk rsc->setupProgramStore(); 299aeb094b520d8ea49b74129927578f18f758c873eJason Sams 30022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClearColor(r, g, b, a); 30122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClear(GL_COLOR_BUFFER_BIT); 302aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 303aeb094b520d8ea49b74129927578f18f758c873eJason Sams 304afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_ClearDepth(float v) { 305aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 306889fe50e7aaebed8cb8284b16a0e51e64e8a3a9cAlex Sakhartchouk rsc->setupProgramStore(); 30722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 30822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClearDepthf(v); 30922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClear(GL_DEPTH_BUFFER_BIT); 310aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 311aeb094b520d8ea49b74129927578f18f758c873eJason Sams 312afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_getWidth() { 313aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 314aeb094b520d8ea49b74129927578f18f758c873eJason Sams return rsc->getWidth(); 315aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 316aeb094b520d8ea49b74129927578f18f758c873eJason Sams 317afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_getHeight() { 318aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 319aeb094b520d8ea49b74129927578f18f758c873eJason Sams return rsc->getHeight(); 320aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 321aeb094b520d8ea49b74129927578f18f758c873eJason Sams 322afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_DrawTextAlloc(RsAllocation va, int x, int y) { 323605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 324d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 325d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk Allocation *alloc = static_cast<Allocation *>(va); 32609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk const char *text = (const char *)alloc->getPtr(); 32709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t allocSize = alloc->getType()->getSizeBytes(); 32809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.renderText(text, allocSize, x, y); 329d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 330d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 331afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_DrawText(const char *text, int x, int y) { 332d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 33309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = strlen(text); 33409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.renderText(text, textLen, x, y); 33509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 33609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 33709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_setMetrics(Font::Rect *metrics, 33809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 339afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk int32_t *top, int32_t *bottom) { 340afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (left) { 34109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *left = metrics->left; 34209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 343afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (right) { 34409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *right = metrics->right; 34509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 346afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (top) { 34709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *top = metrics->top; 34809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 349afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (bottom) { 35009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *bottom = metrics->bottom; 35109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 35209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 35309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 35409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_MeasureTextAlloc(RsAllocation va, 35509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 356afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk int32_t *top, int32_t *bottom) { 35709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk CHECK_OBJ(va); 35809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk GET_TLS(); 35909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Allocation *alloc = static_cast<Allocation *>(va); 36009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk const char *text = (const char *)alloc->getPtr(); 36109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = alloc->getType()->getSizeBytes(); 36209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Font::Rect metrics; 36309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.measureText(text, textLen, &metrics); 36409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk SC_setMetrics(&metrics, left, right, top, bottom); 36509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 36609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 36709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_MeasureText(const char *text, 36809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 369afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk int32_t *top, int32_t *bottom) { 37009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk GET_TLS(); 37109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = strlen(text); 37209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Font::Rect metrics; 37309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.measureText(text, textLen, &metrics); 37409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk SC_setMetrics(&metrics, left, right, top, bottom); 375d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 376d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 377afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_BindFont(RsFont font) { 378605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(font); 379d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 380d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk rsi_ContextBindFont(rsc, font); 381d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 382aeb094b520d8ea49b74129927578f18f758c873eJason Sams 383afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_FontColor(float r, float g, float b, float a) { 3849fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk GET_TLS(); 3859fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk rsc->mStateFont.setFontColor(r, g, b, a); 3869fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk} 3879fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk 388aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 389aeb094b520d8ea49b74129927578f18f758c873eJason Sams// Class implementation 390aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 391aeb094b520d8ea49b74129927578f18f758c873eJason Sams 392aeb094b520d8ea49b74129927578f18f758c873eJason Sams// llvm name mangling ref 393aeb094b520d8ea49b74129927578f18f758c873eJason Sams// <builtin-type> ::= v # void 394aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= b # bool 395aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= c # char 396aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= a # signed char 397aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= h # unsigned char 398aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= s # short 399aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= t # unsigned short 400aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= i # int 401aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= j # unsigned int 402aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= l # long 403aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= m # unsigned long 404aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= x # long long, __int64 405aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= y # unsigned long long, __int64 406aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= f # float 407aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= d # double 408aeb094b520d8ea49b74129927578f18f758c873eJason Sams 409aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic ScriptCState::SymbolTable_t gSyms[] = { 4106bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_bindProgramFragment, false }, 4116bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_bindProgramStore, false }, 4126bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_bindProgramVertex, false }, 4136bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_bindProgramRaster, false }, 4146bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_bindSampler, false }, 4156bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_bindTexture, false }, 41622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4176bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadProjectionMatrix, false }, 4186bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix, false }, 4196bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix, false }, 42022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4216bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_vpGetProjectionMatrix, false }, 42295333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk 4236bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_pfConstantColor, false }, 4246445e5210c6d7f8689e94be9026153d017c9545bJason Sams 4256bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgGetWidthv", (void *)&SC_getWidth, false }, 4266bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z12rsgGetHeightv", (void *)&SC_getHeight, false }, 42722fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4286bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z18rsgUploadToTexture13rs_allocationj", (void *)&SC_uploadToTexture2, false }, 4296bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z18rsgUploadToTexture13rs_allocation", (void *)&SC_uploadToTexture, false }, 4306bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z23rsgUploadToBufferObject13rs_allocation", (void *)&SC_uploadToBufferObject, false }, 43122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4326bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawRectfffff", (void *)&SC_drawRect, false }, 4336bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_drawQuad, false }, 4346bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_drawQuadTexCoords, false }, 4356bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_drawSpriteScreenspace, false }, 43622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4376bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_drawMesh, false }, 4386bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_drawMeshPrimitive, false }, 4396bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_drawMeshPrimitiveRange, false }, 4406bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_meshComputeBoundingBox, false }, 4414e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 4426bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsgClearColorffff", (void *)&SC_ClearColor, false }, 4436bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth, false }, 44422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4456bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText, false }, 4466bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc, false }, 4476bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText, false }, 4486bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc, false }, 449d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 4506bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont, false }, 4516bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z12rsgFontColorffff", (void *)&SC_FontColor, false }, 452d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 453aeb094b520d8ea49b74129927578f18f758c873eJason Sams // misc 4546bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z5colorffff", (void *)&SC_color, false }, 455aeb094b520d8ea49b74129927578f18f758c873eJason Sams 4566bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { NULL, NULL, false } 457aeb094b520d8ea49b74129927578f18f758c873eJason Sams}; 458aeb094b520d8ea49b74129927578f18f758c873eJason Sams 459afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukconst ScriptCState::SymbolTable_t * ScriptCState::lookupSymbolGL(const char *sym) { 460aeb094b520d8ea49b74129927578f18f758c873eJason Sams ScriptCState::SymbolTable_t *syms = gSyms; 461aeb094b520d8ea49b74129927578f18f758c873eJason Sams 462aeb094b520d8ea49b74129927578f18f758c873eJason Sams while (syms->mPtr) { 463aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!strcmp(syms->mName, sym)) { 464aeb094b520d8ea49b74129927578f18f758c873eJason Sams return syms; 465aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 466aeb094b520d8ea49b74129927578f18f758c873eJason Sams syms++; 467aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 468aeb094b520d8ea49b74129927578f18f758c873eJason Sams return NULL; 469aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 470aeb094b520d8ea49b74129927578f18f758c873eJason Sams 471