rsScript.cpp revision a2cf755a28a1e7ffff2955df656d714f40e4d715
1/* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include "rsContext.h" 18 19using namespace android; 20using namespace android::renderscript; 21 22Script::Script(Context *rsc) : ObjectBase(rsc) 23{ 24 mAllocFile = __FILE__; 25 mAllocLine = __LINE__; 26 memset(&mEnviroment, 0, sizeof(mEnviroment)); 27 mEnviroment.mClearColor[0] = 0; 28 mEnviroment.mClearColor[1] = 0; 29 mEnviroment.mClearColor[2] = 0; 30 mEnviroment.mClearColor[3] = 1; 31 mEnviroment.mClearDepth = 1; 32 mEnviroment.mClearStencil = 0; 33 mEnviroment.mIsRoot = false; 34} 35 36Script::~Script() 37{ 38} 39 40namespace android { 41namespace renderscript { 42 43 44void rsi_ScriptBindAllocation(Context * rsc, RsScript vs, RsAllocation va, uint32_t slot) 45{ 46 Script *s = static_cast<Script *>(vs); 47 s->mSlots[slot].set(static_cast<Allocation *>(va)); 48} 49 50void rsi_ScriptSetClearColor(Context * rsc, RsScript vs, float r, float g, float b, float a) 51{ 52 Script *s = static_cast<Script *>(vs); 53 s->mEnviroment.mClearColor[0] = r; 54 s->mEnviroment.mClearColor[1] = g; 55 s->mEnviroment.mClearColor[2] = b; 56 s->mEnviroment.mClearColor[3] = a; 57} 58 59void rsi_ScriptSetTimeZone(Context * rsc, RsScript vs, const char * timeZone, uint32_t length) 60{ 61 Script *s = static_cast<Script *>(vs); 62 s->mEnviroment.mTimeZone = timeZone; 63} 64 65void rsi_ScriptSetClearDepth(Context * rsc, RsScript vs, float v) 66{ 67 Script *s = static_cast<Script *>(vs); 68 s->mEnviroment.mClearDepth = v; 69} 70 71void rsi_ScriptSetClearStencil(Context * rsc, RsScript vs, uint32_t v) 72{ 73 Script *s = static_cast<Script *>(vs); 74 s->mEnviroment.mClearStencil = v; 75} 76 77void rsi_ScriptSetType(Context * rsc, RsType vt, uint32_t slot, bool writable, const char *name) 78{ 79 ScriptCState *ss = &rsc->mScriptC; 80 const Type *t = static_cast<const Type *>(vt); 81 ss->mConstantBufferTypes[slot].set(t); 82 ss->mSlotWritable[slot] = writable; 83 if (name) { 84 ss->mSlotNames[slot].setTo(name); 85 } else { 86 ss->mSlotNames[slot].setTo(""); 87 } 88} 89 90void rsi_ScriptSetInvoke(Context *rsc, const char *name, uint32_t slot) 91{ 92 ScriptCState *ss = &rsc->mScriptC; 93 ss->mInvokableNames[slot] = name; 94} 95 96void rsi_ScriptInvoke(Context *rsc, RsScript vs, uint32_t slot) 97{ 98 Script *s = static_cast<Script *>(vs); 99 if (s->mEnviroment.mInvokables[slot] == NULL) { 100 rsc->setError(RS_ERROR_BAD_SCRIPT, "Calling invoke on bad script"); 101 return; 102 } 103 s->setupScript(); 104 s->mEnviroment.mInvokables[slot](); 105} 106 107 108void rsi_ScriptSetRoot(Context * rsc, bool isRoot) 109{ 110 ScriptCState *ss = &rsc->mScriptC; 111 ss->mScript->mEnviroment.mIsRoot = isRoot; 112} 113 114 115} 116} 117 118