rsScriptC_LibGL.cpp revision b7e83bda41e66c966b98935b44140692bfe0c4ca
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 278b7e83bda41e66c966b98935b44140692bfe0c4caJason Samsstatic void SC_allocationSyncAll(RsAllocation va) { 279b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams CHECK_OBJ(va); 280b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams GET_TLS(); 281b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams static_cast<Allocation *>(va)->syncAll(rsc, RS_ALLOCATION_USAGE_SCRIPT); 282b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams} 283b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams 284b7e83bda41e66c966b98935b44140692bfe0c4caJason Samsstatic void SC_allocationSyncAll2(RsAllocation va, RsAllocationUsageType source) { 285b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams CHECK_OBJ(va); 286b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams GET_TLS(); 287b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams static_cast<Allocation *>(va)->syncAll(rsc, source); 288b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams} 289b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams 290afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_uploadToTexture2(RsAllocation va, uint32_t baseMipLevel) { 291605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 292aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 293aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_AllocationUploadToTexture(rsc, va, false, baseMipLevel); 294aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 295afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk 296afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_uploadToTexture(RsAllocation va) { 297605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 29822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams GET_TLS(); 29922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams rsi_AllocationUploadToTexture(rsc, va, false, 0); 30022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 301aeb094b520d8ea49b74129927578f18f758c873eJason Sams 302afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_uploadToBufferObject(RsAllocation va) { 303605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 304aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 305aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_AllocationUploadToBufferObject(rsc, va); 306aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 307aeb094b520d8ea49b74129927578f18f758c873eJason Sams 308afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_ClearColor(float r, float g, float b, float a) { 309aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 310889fe50e7aaebed8cb8284b16a0e51e64e8a3a9cAlex Sakhartchouk rsc->setupProgramStore(); 311aeb094b520d8ea49b74129927578f18f758c873eJason Sams 31222fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClearColor(r, g, b, a); 31322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClear(GL_COLOR_BUFFER_BIT); 314aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 315aeb094b520d8ea49b74129927578f18f758c873eJason Sams 316afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_ClearDepth(float v) { 317aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 318889fe50e7aaebed8cb8284b16a0e51e64e8a3a9cAlex Sakhartchouk rsc->setupProgramStore(); 31922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 32022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClearDepthf(v); 32122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClear(GL_DEPTH_BUFFER_BIT); 322aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 323aeb094b520d8ea49b74129927578f18f758c873eJason Sams 324afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_getWidth() { 325aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 326aeb094b520d8ea49b74129927578f18f758c873eJason Sams return rsc->getWidth(); 327aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 328aeb094b520d8ea49b74129927578f18f758c873eJason Sams 329afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic uint32_t SC_getHeight() { 330aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 331aeb094b520d8ea49b74129927578f18f758c873eJason Sams return rsc->getHeight(); 332aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 333aeb094b520d8ea49b74129927578f18f758c873eJason Sams 334afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_DrawTextAlloc(RsAllocation va, int x, int y) { 335605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 336d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 337d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk Allocation *alloc = static_cast<Allocation *>(va); 33809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk const char *text = (const char *)alloc->getPtr(); 33909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t allocSize = alloc->getType()->getSizeBytes(); 34009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.renderText(text, allocSize, x, y); 341d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 342d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 343afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_DrawText(const char *text, int x, int y) { 344d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 34509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = strlen(text); 34609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.renderText(text, textLen, x, y); 34709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 34809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 34909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_setMetrics(Font::Rect *metrics, 35009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 351afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk int32_t *top, int32_t *bottom) { 352afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (left) { 35309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *left = metrics->left; 35409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 355afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (right) { 35609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *right = metrics->right; 35709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 358afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (top) { 35909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *top = metrics->top; 36009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 361afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk if (bottom) { 36209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *bottom = metrics->bottom; 36309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 36409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 36509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 36609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_MeasureTextAlloc(RsAllocation va, 36709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 368afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk int32_t *top, int32_t *bottom) { 36909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk CHECK_OBJ(va); 37009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk GET_TLS(); 37109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Allocation *alloc = static_cast<Allocation *>(va); 37209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk const char *text = (const char *)alloc->getPtr(); 37309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = alloc->getType()->getSizeBytes(); 37409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Font::Rect metrics; 37509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.measureText(text, textLen, &metrics); 37609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk SC_setMetrics(&metrics, left, right, top, bottom); 37709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 37809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 37909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_MeasureText(const char *text, 38009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 381afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchouk int32_t *top, int32_t *bottom) { 38209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk GET_TLS(); 38309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = strlen(text); 38409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Font::Rect metrics; 38509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.measureText(text, textLen, &metrics); 38609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk SC_setMetrics(&metrics, left, right, top, bottom); 387d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 388d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 389afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_BindFont(RsFont font) { 390605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(font); 391d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 392d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk rsi_ContextBindFont(rsc, font); 393d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 394aeb094b520d8ea49b74129927578f18f758c873eJason Sams 395afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukstatic void SC_FontColor(float r, float g, float b, float a) { 3969fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk GET_TLS(); 3979fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk rsc->mStateFont.setFontColor(r, g, b, a); 3989fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk} 3999fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk 400aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 401aeb094b520d8ea49b74129927578f18f758c873eJason Sams// Class implementation 402aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 403aeb094b520d8ea49b74129927578f18f758c873eJason Sams 404aeb094b520d8ea49b74129927578f18f758c873eJason Sams// llvm name mangling ref 405aeb094b520d8ea49b74129927578f18f758c873eJason Sams// <builtin-type> ::= v # void 406aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= b # bool 407aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= c # char 408aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= a # signed char 409aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= h # unsigned char 410aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= s # short 411aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= t # unsigned short 412aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= i # int 413aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= j # unsigned int 414aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= l # long 415aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= m # unsigned long 416aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= x # long long, __int64 417aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= y # unsigned long long, __int64 418aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= f # float 419aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= d # double 420aeb094b520d8ea49b74129927578f18f758c873eJason Sams 421aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic ScriptCState::SymbolTable_t gSyms[] = { 4226bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_bindProgramFragment, false }, 4236bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_bindProgramStore, false }, 4246bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_bindProgramVertex, false }, 4256bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_bindProgramRaster, false }, 4266bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_bindSampler, false }, 4276bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_bindTexture, false }, 42822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4296bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadProjectionMatrix, false }, 4306bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix, false }, 4316bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix, false }, 43222fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4336bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_vpGetProjectionMatrix, false }, 43495333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk 4356bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_pfConstantColor, false }, 4366445e5210c6d7f8689e94be9026153d017c9545bJason Sams 4376bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgGetWidthv", (void *)&SC_getWidth, false }, 4386bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z12rsgGetHeightv", (void *)&SC_getHeight, false }, 43922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 440b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams { "_Z20rsgAllocationSyncAll13rs_allocation", (void *)&SC_allocationSyncAll, false }, 441b7e83bda41e66c966b98935b44140692bfe0c4caJason Sams 4426bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z18rsgUploadToTexture13rs_allocationj", (void *)&SC_uploadToTexture2, false }, 4436bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z18rsgUploadToTexture13rs_allocation", (void *)&SC_uploadToTexture, false }, 4446bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z23rsgUploadToBufferObject13rs_allocation", (void *)&SC_uploadToBufferObject, false }, 44522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4466bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawRectfffff", (void *)&SC_drawRect, false }, 4476bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_drawQuad, false }, 4486bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_drawQuadTexCoords, false }, 4496bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_drawSpriteScreenspace, false }, 45022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4516bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_drawMesh, false }, 4526bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_drawMeshPrimitive, false }, 4536bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_drawMeshPrimitiveRange, false }, 4546bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_meshComputeBoundingBox, false }, 4554e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 4566bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsgClearColorffff", (void *)&SC_ClearColor, false }, 4576bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth, false }, 45822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4596bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText, false }, 4606bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc, false }, 4616bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText, false }, 4626bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc, false }, 463d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 4646bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont, false }, 4656bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z12rsgFontColorffff", (void *)&SC_FontColor, false }, 466d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 467aeb094b520d8ea49b74129927578f18f758c873eJason Sams // misc 4686bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { "_Z5colorffff", (void *)&SC_color, false }, 469aeb094b520d8ea49b74129927578f18f758c873eJason Sams 4706bfc1b91dc7684f8ad9dc9f605e92ed8a31d5bbeJason Sams { NULL, NULL, false } 471aeb094b520d8ea49b74129927578f18f758c873eJason Sams}; 472aeb094b520d8ea49b74129927578f18f758c873eJason Sams 473afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukconst ScriptCState::SymbolTable_t * ScriptCState::lookupSymbolGL(const char *sym) { 474aeb094b520d8ea49b74129927578f18f758c873eJason Sams ScriptCState::SymbolTable_t *syms = gSyms; 475aeb094b520d8ea49b74129927578f18f758c873eJason Sams 476aeb094b520d8ea49b74129927578f18f758c873eJason Sams while (syms->mPtr) { 477aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!strcmp(syms->mName, sym)) { 478aeb094b520d8ea49b74129927578f18f758c873eJason Sams return syms; 479aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 480aeb094b520d8ea49b74129927578f18f758c873eJason Sams syms++; 481aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 482aeb094b520d8ea49b74129927578f18f758c873eJason Sams return NULL; 483aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 484aeb094b520d8ea49b74129927578f18f758c873eJason Sams 485