rsScriptC_LibGL.cpp revision 09c67356bbeee0a97a20a06c95b66756838cb541
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 45aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_bindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va) 46aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 47605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(va); 48605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vpf); 49aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 50aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ProgramBindTexture(rsc, 51aeb094b520d8ea49b74129927578f18f758c873eJason Sams static_cast<ProgramFragment *>(vpf), 52aeb094b520d8ea49b74129927578f18f758c873eJason Sams slot, 53aeb094b520d8ea49b74129927578f18f758c873eJason Sams static_cast<Allocation *>(va)); 54aeb094b520d8ea49b74129927578f18f758c873eJason Sams 55aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 56aeb094b520d8ea49b74129927578f18f758c873eJason Sams 57aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_bindSampler(RsProgramFragment vpf, uint32_t slot, RsSampler vs) 58aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 59605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(vs); 60605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vpf); 61aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 62aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ProgramBindSampler(rsc, 63aeb094b520d8ea49b74129927578f18f758c873eJason Sams static_cast<ProgramFragment *>(vpf), 64aeb094b520d8ea49b74129927578f18f758c873eJason Sams slot, 65aeb094b520d8ea49b74129927578f18f758c873eJason Sams static_cast<Sampler *>(vs)); 66aeb094b520d8ea49b74129927578f18f758c873eJason Sams 67aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 68aeb094b520d8ea49b74129927578f18f758c873eJason Sams 69aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_bindProgramStore(RsProgramStore pfs) 70aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 71605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(pfs); 72aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 73aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ContextBindProgramStore(rsc, pfs); 74aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 75aeb094b520d8ea49b74129927578f18f758c873eJason Sams 76aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_bindProgramFragment(RsProgramFragment pf) 77aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 78605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(pf); 79aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 80aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ContextBindProgramFragment(rsc, pf); 81aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 82aeb094b520d8ea49b74129927578f18f758c873eJason Sams 83aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_bindProgramVertex(RsProgramVertex pv) 84aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 85605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(pv); 86aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 87aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ContextBindProgramVertex(rsc, pv); 88aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 89aeb094b520d8ea49b74129927578f18f758c873eJason Sams 90aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_bindProgramRaster(RsProgramRaster pv) 91aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 92605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ_OR_NULL(pv); 93aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 94aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_ContextBindProgramRaster(rsc, pv); 95aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 96aeb094b520d8ea49b74129927578f18f758c873eJason Sams 97aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 98aeb094b520d8ea49b74129927578f18f758c873eJason Sams// VP 99aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 100aeb094b520d8ea49b74129927578f18f758c873eJason Sams 101a490f1003a76286e0f00606adff4ef85fdd78b02Jim Millerstatic void SC_vpLoadProjectionMatrix(const rsc_Matrix *m) 102a490f1003a76286e0f00606adff4ef85fdd78b02Jim Miller{ 103a490f1003a76286e0f00606adff4ef85fdd78b02Jim Miller GET_TLS(); 104383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk rsc->getVertex()->setProjectionMatrix(rsc, m); 105a490f1003a76286e0f00606adff4ef85fdd78b02Jim Miller} 106a490f1003a76286e0f00606adff4ef85fdd78b02Jim Miller 107aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_vpLoadModelMatrix(const rsc_Matrix *m) 108aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 109aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 110383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk rsc->getVertex()->setModelviewMatrix(rsc, m); 111aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 112aeb094b520d8ea49b74129927578f18f758c873eJason Sams 113aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_vpLoadTextureMatrix(const rsc_Matrix *m) 114aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 115aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 116383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk rsc->getVertex()->setTextureMatrix(rsc, m); 117aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 118aeb094b520d8ea49b74129927578f18f758c873eJason Sams 119aeb094b520d8ea49b74129927578f18f758c873eJason Sams 1206445e5210c6d7f8689e94be9026153d017c9545bJason Samsstatic void SC_pfConstantColor(RsProgramFragment vpf, float r, float g, float b, float a) 1216445e5210c6d7f8689e94be9026153d017c9545bJason Sams{ 122383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk GET_TLS(); 123605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vpf); 1246445e5210c6d7f8689e94be9026153d017c9545bJason Sams ProgramFragment *pf = static_cast<ProgramFragment *>(vpf); 125383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk pf->setConstantColor(rsc, r, g, b, a); 1266445e5210c6d7f8689e94be9026153d017c9545bJason Sams} 1276445e5210c6d7f8689e94be9026153d017c9545bJason Sams 12895333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchoukstatic void SC_vpGetProjectionMatrix(rsc_Matrix *m) 12995333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk{ 13095333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk GET_TLS(); 131383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk rsc->getVertex()->getProjectionMatrix(rsc, m); 13295333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk} 13395333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk 134aeb094b520d8ea49b74129927578f18f758c873eJason Sams 135aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 136aeb094b520d8ea49b74129927578f18f758c873eJason Sams// Drawing 137aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 138aeb094b520d8ea49b74129927578f18f758c873eJason Sams 139aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawQuadTexCoords(float x1, float y1, float z1, 140aeb094b520d8ea49b74129927578f18f758c873eJason Sams float u1, float v1, 141aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x2, float y2, float z2, 142aeb094b520d8ea49b74129927578f18f758c873eJason Sams float u2, float v2, 143aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x3, float y3, float z3, 144aeb094b520d8ea49b74129927578f18f758c873eJason Sams float u3, float v3, 145aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x4, float y4, float z4, 146aeb094b520d8ea49b74129927578f18f758c873eJason Sams float u4, float v4) 147aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 148aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 149aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!rsc->setupCheck()) { 150aeb094b520d8ea49b74129927578f18f758c873eJason Sams return; 151aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 152aeb094b520d8ea49b74129927578f18f758c873eJason Sams 153aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("Quad"); 154aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("%4.2f, %4.2f, %4.2f", x1, y1, z1); 155aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("%4.2f, %4.2f, %4.2f", x2, y2, z2); 156aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("%4.2f, %4.2f, %4.2f", x3, y3, z3); 157aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("%4.2f, %4.2f, %4.2f", x4, y4, z4); 158aeb094b520d8ea49b74129927578f18f758c873eJason Sams 159aeb094b520d8ea49b74129927578f18f758c873eJason Sams float vtx[] = {x1,y1,z1, x2,y2,z2, x3,y3,z3, x4,y4,z4}; 160aeb094b520d8ea49b74129927578f18f758c873eJason Sams const float tex[] = {u1,v1, u2,v2, u3,v3, u4,v4}; 161aeb094b520d8ea49b74129927578f18f758c873eJason Sams 162aeb094b520d8ea49b74129927578f18f758c873eJason Sams VertexArray va; 163886f11ade9dde05485cb11c0d67d87f76a428f6cAlex Sakhartchouk va.add(GL_FLOAT, 3, 12, false, (uint32_t)vtx, "ATTRIB_position"); 164886f11ade9dde05485cb11c0d67d87f76a428f6cAlex Sakhartchouk va.add(GL_FLOAT, 2, 8, false, (uint32_t)tex, "ATTRIB_texture0"); 16579f52df541f87ac07709e770cd79f14dd1a05e93Jason Sams va.setupGL2(rsc, &rsc->mStateVertexArray, &rsc->mShaderCache); 166aeb094b520d8ea49b74129927578f18f758c873eJason Sams 167aeb094b520d8ea49b74129927578f18f758c873eJason Sams glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 168aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 169aeb094b520d8ea49b74129927578f18f758c873eJason Sams 170aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawQuad(float x1, float y1, float z1, 171aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x2, float y2, float z2, 172aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x3, float y3, float z3, 173aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x4, float y4, float z4) 174aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 175aeb094b520d8ea49b74129927578f18f758c873eJason Sams SC_drawQuadTexCoords(x1, y1, z1, 0, 1, 176aeb094b520d8ea49b74129927578f18f758c873eJason Sams x2, y2, z2, 1, 1, 177aeb094b520d8ea49b74129927578f18f758c873eJason Sams x3, y3, z3, 1, 0, 178aeb094b520d8ea49b74129927578f18f758c873eJason Sams x4, y4, z4, 0, 0); 179aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 180aeb094b520d8ea49b74129927578f18f758c873eJason Sams 181aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawSpriteScreenspace(float x, float y, float z, float w, float h) 182aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 183aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 184aeb094b520d8ea49b74129927578f18f758c873eJason Sams ObjectBaseRef<const ProgramVertex> tmp(rsc->getVertex()); 185aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsc->setVertex(rsc->getDefaultProgramVertex()); 186aeb094b520d8ea49b74129927578f18f758c873eJason Sams //rsc->setupCheck(); 187aeb094b520d8ea49b74129927578f18f758c873eJason Sams 188aeb094b520d8ea49b74129927578f18f758c873eJason Sams //GLint crop[4] = {0, h, w, -h}; 189aeb094b520d8ea49b74129927578f18f758c873eJason Sams 190aeb094b520d8ea49b74129927578f18f758c873eJason Sams float sh = rsc->getHeight(); 191aeb094b520d8ea49b74129927578f18f758c873eJason Sams 192aeb094b520d8ea49b74129927578f18f758c873eJason Sams SC_drawQuad(x, sh - y, z, 193aeb094b520d8ea49b74129927578f18f758c873eJason Sams x+w, sh - y, z, 194aeb094b520d8ea49b74129927578f18f758c873eJason Sams x+w, sh - (y+h), z, 195aeb094b520d8ea49b74129927578f18f758c873eJason Sams x, sh - (y+h), z); 196aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsc->setVertex((ProgramVertex *)tmp.get()); 197aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 198bdb046001675f949e7e9b2cd0bfd63a5889d97edJason Sams/* 199aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawSprite(float x, float y, float z, float w, float h) 200aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 201aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 202aeb094b520d8ea49b74129927578f18f758c873eJason Sams float vin[3] = {x, y, z}; 203aeb094b520d8ea49b74129927578f18f758c873eJason Sams float vout[4]; 204aeb094b520d8ea49b74129927578f18f758c873eJason Sams 205aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("ds in %f %f %f", x, y, z); 206aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsc->getVertex()->transformToScreen(rsc, vout, vin); 207aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("ds out %f %f %f %f", vout[0], vout[1], vout[2], vout[3]); 208aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[0] /= vout[3]; 209aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[1] /= vout[3]; 210aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[2] /= vout[3]; 211aeb094b520d8ea49b74129927578f18f758c873eJason Sams 212aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[0] *= rsc->getWidth() / 2; 213aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[1] *= rsc->getHeight() / 2; 214aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[0] += rsc->getWidth() / 2; 215aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[1] += rsc->getHeight() / 2; 216aeb094b520d8ea49b74129927578f18f758c873eJason Sams 217aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[0] -= w/2; 218aeb094b520d8ea49b74129927578f18f758c873eJason Sams vout[1] -= h/2; 219aeb094b520d8ea49b74129927578f18f758c873eJason Sams 220aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("ds out2 %f %f %f", vout[0], vout[1], vout[2]); 221aeb094b520d8ea49b74129927578f18f758c873eJason Sams 222aeb094b520d8ea49b74129927578f18f758c873eJason Sams // U, V, W, H 223aeb094b520d8ea49b74129927578f18f758c873eJason Sams SC_drawSpriteScreenspace(vout[0], vout[1], z, h, w); 224aeb094b520d8ea49b74129927578f18f758c873eJason Sams //rsc->setupCheck(); 225aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 226bdb046001675f949e7e9b2cd0bfd63a5889d97edJason Sams*/ 227aeb094b520d8ea49b74129927578f18f758c873eJason Sams 228aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_drawRect(float x1, float y1, 229aeb094b520d8ea49b74129927578f18f758c873eJason Sams float x2, float y2, float z) 230aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 231aeb094b520d8ea49b74129927578f18f758c873eJason Sams //LOGE("SC_drawRect %f,%f %f,%f %f", x1, y1, x2, y2, z); 232aeb094b520d8ea49b74129927578f18f758c873eJason Sams SC_drawQuad(x1, y2, z, 233aeb094b520d8ea49b74129927578f18f758c873eJason Sams x2, y2, z, 234aeb094b520d8ea49b74129927578f18f758c873eJason Sams x2, y1, z, 235aeb094b520d8ea49b74129927578f18f758c873eJason Sams x1, y1, z); 236aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 237aeb094b520d8ea49b74129927578f18f758c873eJason Sams 2384e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchoukstatic void SC_drawMesh(RsMesh vsm) 2394e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk{ 240605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsm); 2414e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk GET_TLS(); 2424e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 243aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!rsc->setupCheck()) { 244aeb094b520d8ea49b74129927578f18f758c873eJason Sams return; 245aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 246aeb094b520d8ea49b74129927578f18f758c873eJason Sams sm->render(rsc); 247aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 248aeb094b520d8ea49b74129927578f18f758c873eJason Sams 2494e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchoukstatic void SC_drawMeshPrimitive(RsMesh vsm, uint32_t primIndex) 250aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 251605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsm); 252aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 2534e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 254aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!rsc->setupCheck()) { 255aeb094b520d8ea49b74129927578f18f758c873eJason Sams return; 256aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 2574e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk sm->renderPrimitive(rsc, primIndex); 2584e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk} 2594e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 2604e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchoukstatic void SC_drawMeshPrimitiveRange(RsMesh vsm, uint32_t primIndex, uint32_t start, uint32_t len) 2614e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk{ 262605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsm); 2634e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk GET_TLS(); 2644e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 2654e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk if (!rsc->setupCheck()) { 2664e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk return; 2674e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk } 2684e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk sm->renderPrimitiveRange(rsc, primIndex, start, len); 269aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 270aeb094b520d8ea49b74129927578f18f758c873eJason Sams 271ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchoukstatic void SC_meshComputeBoundingBox(RsMesh vsm, float *minX, float *minY, float *minZ, 272ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float *maxX, float *maxY, float *maxZ) 273ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk{ 274605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(vsm); 275ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk GET_TLS(); 276ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk Mesh *sm = static_cast<Mesh *>(vsm); 277ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk sm->computeBBox(); 278ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *minX = sm->mBBoxMin[0]; 279ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *minY = sm->mBBoxMin[1]; 280ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *minZ = sm->mBBoxMin[2]; 281ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *maxX = sm->mBBoxMax[0]; 282ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *maxY = sm->mBBoxMax[1]; 283ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk *maxZ = sm->mBBoxMax[2]; 284ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk} 285ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk 286aeb094b520d8ea49b74129927578f18f758c873eJason Sams 287aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 288aeb094b520d8ea49b74129927578f18f758c873eJason Sams// 289aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 290aeb094b520d8ea49b74129927578f18f758c873eJason Sams 291aeb094b520d8ea49b74129927578f18f758c873eJason Sams 292aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_color(float r, float g, float b, float a) 293aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 294aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 2956445e5210c6d7f8689e94be9026153d017c9545bJason Sams ProgramFragment *pf = (ProgramFragment *)rsc->getFragment(); 296383e5b1f68c321a77bfd7466fa1171a9bfab4a6fAlex Sakhartchouk pf->setConstantColor(rsc, r, g, b, a); 297aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 298aeb094b520d8ea49b74129927578f18f758c873eJason Sams 29922fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_uploadToTexture2(RsAllocation va, uint32_t baseMipLevel) 300aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 301605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 302aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 303aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_AllocationUploadToTexture(rsc, va, false, baseMipLevel); 304aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 30522fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_uploadToTexture(RsAllocation va) 30622fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams{ 307605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 30822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams GET_TLS(); 30922fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams rsi_AllocationUploadToTexture(rsc, va, false, 0); 31022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams} 311aeb094b520d8ea49b74129927578f18f758c873eJason Sams 312aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic void SC_uploadToBufferObject(RsAllocation va) 313aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 314605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 315aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 316aeb094b520d8ea49b74129927578f18f758c873eJason Sams rsi_AllocationUploadToBufferObject(rsc, va); 317aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 318aeb094b520d8ea49b74129927578f18f758c873eJason Sams 31922fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_ClearColor(float r, float g, float b, float a) 320aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 321aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 322889fe50e7aaebed8cb8284b16a0e51e64e8a3a9cAlex Sakhartchouk rsc->setupProgramStore(); 323aeb094b520d8ea49b74129927578f18f758c873eJason Sams 32422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClearColor(r, g, b, a); 32522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClear(GL_COLOR_BUFFER_BIT); 326aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 327aeb094b520d8ea49b74129927578f18f758c873eJason Sams 32822fa371bf64b8aae786acfe5d711af21afb13a93Jason Samsstatic void SC_ClearDepth(float v) 329aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 330aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 331889fe50e7aaebed8cb8284b16a0e51e64e8a3a9cAlex Sakhartchouk rsc->setupProgramStore(); 33222fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 33322fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClearDepthf(v); 33422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams glClear(GL_DEPTH_BUFFER_BIT); 335aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 336aeb094b520d8ea49b74129927578f18f758c873eJason Sams 337aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic uint32_t SC_getWidth() 338aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 339aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 340aeb094b520d8ea49b74129927578f18f758c873eJason Sams return rsc->getWidth(); 341aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 342aeb094b520d8ea49b74129927578f18f758c873eJason Sams 343aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic uint32_t SC_getHeight() 344aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 345aeb094b520d8ea49b74129927578f18f758c873eJason Sams GET_TLS(); 346aeb094b520d8ea49b74129927578f18f758c873eJason Sams return rsc->getHeight(); 347aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 348aeb094b520d8ea49b74129927578f18f758c873eJason Sams 349d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchoukstatic void SC_DrawTextAlloc(RsAllocation va, int x, int y) 350d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk{ 351605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(va); 352d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 353d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk Allocation *alloc = static_cast<Allocation *>(va); 35409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk const char *text = (const char *)alloc->getPtr(); 35509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t allocSize = alloc->getType()->getSizeBytes(); 35609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.renderText(text, allocSize, x, y); 357d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 358d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 359d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchoukstatic void SC_DrawText(const char *text, int x, int y) 360d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk{ 361d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 36209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = strlen(text); 36309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.renderText(text, textLen, x, y); 36409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 36509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 36609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_setMetrics(Font::Rect *metrics, 36709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 36809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *top, int32_t *bottom) 36909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk{ 37009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk if(left) { 37109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *left = metrics->left; 37209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 37309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk if(right) { 37409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *right = metrics->right; 37509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 37609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk if(top) { 37709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *top = metrics->top; 37809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 37909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk if(bottom) { 38009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk *bottom = metrics->bottom; 38109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk } 38209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 38309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 38409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_MeasureTextAlloc(RsAllocation va, 38509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 38609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *top, int32_t *bottom) 38709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk{ 38809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk CHECK_OBJ(va); 38909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk GET_TLS(); 39009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Allocation *alloc = static_cast<Allocation *>(va); 39109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk const char *text = (const char *)alloc->getPtr(); 39209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = alloc->getType()->getSizeBytes(); 39309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Font::Rect metrics; 39409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.measureText(text, textLen, &metrics); 39509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk SC_setMetrics(&metrics, left, right, top, bottom); 39609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk} 39709c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk 39809c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchoukstatic void SC_MeasureText(const char *text, 39909c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *left, int32_t *right, 40009c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk int32_t *top, int32_t *bottom) 40109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk{ 40209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk GET_TLS(); 40309c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk size_t textLen = strlen(text); 40409c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk Font::Rect metrics; 40509c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk rsc->mStateFont.measureText(text, textLen, &metrics); 40609c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk SC_setMetrics(&metrics, left, right, top, bottom); 407d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 408d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 409d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchoukstatic void SC_BindFont(RsFont font) 410d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk{ 411605048a9f9af925782f6c90bc1cdc5af59e337d8Jason Sams CHECK_OBJ(font); 412d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk GET_TLS(); 413d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk rsi_ContextBindFont(rsc, font); 414d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk} 415aeb094b520d8ea49b74129927578f18f758c873eJason Sams 4169fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchoukstatic void SC_FontColor(float r, float g, float b, float a) 4179fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk{ 4189fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk GET_TLS(); 4199fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk rsc->mStateFont.setFontColor(r, g, b, a); 4209fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk} 4219fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk 422aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 423aeb094b520d8ea49b74129927578f18f758c873eJason Sams// Class implementation 424aeb094b520d8ea49b74129927578f18f758c873eJason Sams////////////////////////////////////////////////////////////////////////////// 425aeb094b520d8ea49b74129927578f18f758c873eJason Sams 426aeb094b520d8ea49b74129927578f18f758c873eJason Sams// llvm name mangling ref 427aeb094b520d8ea49b74129927578f18f758c873eJason Sams// <builtin-type> ::= v # void 428aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= b # bool 429aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= c # char 430aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= a # signed char 431aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= h # unsigned char 432aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= s # short 433aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= t # unsigned short 434aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= i # int 435aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= j # unsigned int 436aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= l # long 437aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= m # unsigned long 438aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= x # long long, __int64 439aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= y # unsigned long long, __int64 440aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= f # float 441aeb094b520d8ea49b74129927578f18f758c873eJason Sams// ::= d # double 442aeb094b520d8ea49b74129927578f18f758c873eJason Sams 443aeb094b520d8ea49b74129927578f18f758c873eJason Samsstatic ScriptCState::SymbolTable_t gSyms[] = { 4447349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_bindProgramFragment }, 4457349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_bindProgramStore }, 4467349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_bindProgramVertex }, 4477349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_bindProgramRaster }, 4487349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_bindSampler }, 4497349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_bindTexture }, 45022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4517349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadProjectionMatrix }, 4527349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix }, 4537349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix }, 45422fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 45595333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk { "_Z35rsgProgramVertexGetProjectionMatrixP12rs_matrix4x4", (void *)&SC_vpGetProjectionMatrix }, 45695333f998fd4a983f89e5128e85f6f710d200bd9Alex Sakhartchouk 4576445e5210c6d7f8689e94be9026153d017c9545bJason Sams { "_Z31rsgProgramFragmentConstantColor19rs_program_fragmentffff", (void *)&SC_pfConstantColor }, 4586445e5210c6d7f8689e94be9026153d017c9545bJason Sams 4597349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z11rsgGetWidthv", (void *)&SC_getWidth }, 4607349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z12rsgGetHeightv", (void *)&SC_getHeight }, 46122fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4627349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z18rsgUploadToTexture13rs_allocationj", (void *)&SC_uploadToTexture2 }, 4638c88090e8cccab103eebe2ff569e116e9f5fb208Jason Sams { "_Z18rsgUploadToTexture13rs_allocation", (void *)&SC_uploadToTexture }, 4647349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z23rsgUploadToBufferObject13rs_allocation", (void *)&SC_uploadToBufferObject }, 46522fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4667349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z11rsgDrawRectfffff", (void *)&SC_drawRect }, 4677349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_drawQuad }, 4687349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_drawQuadTexCoords }, 4697349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_drawSpriteScreenspace }, 47022fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 4714e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_drawMesh }, 4727349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_drawMeshPrimitive }, 4737349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_drawMeshPrimitiveRange }, 474ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk { "_Z25rsgMeshComputeBoundingBox7rs_meshPfS0_S0_S0_S0_S0_", (void *)&SC_meshComputeBoundingBox }, 4754e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 4767349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z13rsgClearColorffff", (void *)&SC_ClearColor }, 4777349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth }, 47822fa371bf64b8aae786acfe5d711af21afb13a93Jason Sams 479d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText }, 480d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc }, 48109c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk { "_Z14rsgMeasureTextPKcPiS1_S1_S1_", (void *)&SC_MeasureText }, 48209c67356bbeee0a97a20a06c95b66756838cb541Alex Sakhartchouk { "_Z14rsgMeasureText13rs_allocationPiS0_S0_S0_", (void *)&SC_MeasureTextAlloc }, 483d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 4847349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont }, 4859fc9f0375a92fe22fecb3782b18a5c6060a07290Alex Sakhartchouk { "_Z12rsgFontColorffff", (void *)&SC_FontColor }, 486d3e0ad43dc758c409fc23d1893dab67b18520c24Alex Sakhartchouk 487aeb094b520d8ea49b74129927578f18f758c873eJason Sams // misc 4887349547db61d2d458b31c074b902d56d082e5d84Jason Sams { "_Z5colorffff", (void *)&SC_color }, 489aeb094b520d8ea49b74129927578f18f758c873eJason Sams 490aeb094b520d8ea49b74129927578f18f758c873eJason Sams { NULL, NULL } 491aeb094b520d8ea49b74129927578f18f758c873eJason Sams}; 492aeb094b520d8ea49b74129927578f18f758c873eJason Sams 493aeb094b520d8ea49b74129927578f18f758c873eJason Samsconst ScriptCState::SymbolTable_t * ScriptCState::lookupSymbolGL(const char *sym) 494aeb094b520d8ea49b74129927578f18f758c873eJason Sams{ 495aeb094b520d8ea49b74129927578f18f758c873eJason Sams ScriptCState::SymbolTable_t *syms = gSyms; 496aeb094b520d8ea49b74129927578f18f758c873eJason Sams 497aeb094b520d8ea49b74129927578f18f758c873eJason Sams while (syms->mPtr) { 498aeb094b520d8ea49b74129927578f18f758c873eJason Sams if (!strcmp(syms->mName, sym)) { 499aeb094b520d8ea49b74129927578f18f758c873eJason Sams return syms; 500aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 501aeb094b520d8ea49b74129927578f18f758c873eJason Sams syms++; 502aeb094b520d8ea49b74129927578f18f758c873eJason Sams } 503aeb094b520d8ea49b74129927578f18f758c873eJason Sams return NULL; 504aeb094b520d8ea49b74129927578f18f758c873eJason Sams} 505aeb094b520d8ea49b74129927578f18f758c873eJason Sams 506