rsScriptC.cpp revision 1ef8b80bc49f415b93912fe7335f852953bde4a4
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/*
2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project
3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License.
6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at
7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams *
10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software
11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and
14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License.
15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */
16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsContext.h"
18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsScriptC.h"
19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#include "rsMatrix.h"
20326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
211ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich#include "acc/acc.h"
221ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich
23326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android;
24326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsusing namespace android::renderscript;
25326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
26326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
27326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::ScriptC()
28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
291ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    mAccScript = NULL;
30326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mScript = NULL;
31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
32326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
33326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::~ScriptC()
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
351ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    if (mAccScript) {
361ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich        accDeleteScript(mAccScript);
371ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    }
38326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
39326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
40fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadIdentity(void *con, rsc_Matrix *mat)
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadIdentity();
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
46fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadFloat(void *con, rsc_Matrix *mat, const float *f)
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
48326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->load(f);
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
52fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadMat(void *con, rsc_Matrix *mat, const rsc_Matrix *newmat)
53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
54326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->load(reinterpret_cast<const Matrix *>(newmat));
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
58fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadRotate(void *con, rsc_Matrix *mat, float rot, float x, float y, float z)
59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
60326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadRotate(rot, x, y, z);
62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
64fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadScale(void *con, rsc_Matrix *mat, float x, float y, float z)
65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
66326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadScale(x, y, z);
68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
70fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadTranslate(void *con, rsc_Matrix *mat, float x, float y, float z)
71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadTranslate(x, y, z);
74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
76fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadMultiply(void *con, rsc_Matrix *mat, const rsc_Matrix *lhs, const rsc_Matrix *rhs)
77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
78326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadMultiply(reinterpret_cast<const Matrix *>(lhs),
80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                    reinterpret_cast<const Matrix *>(rhs));
81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
83fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixMultiply(void *con, rsc_Matrix *mat, const rsc_Matrix *rhs)
84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
85326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->multiply(reinterpret_cast<const Matrix *>(rhs));
87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
89fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixRotate(void *con, rsc_Matrix *mat, float rot, float x, float y, float z)
90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->rotate(rot, x, y, z);
93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
95fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixScale(void *con, rsc_Matrix *mat, float x, float y, float z)
96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->scale(x, y, z);
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
101fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixTranslate(void *con, rsc_Matrix *mat, float x, float y, float z)
102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->translate(x, y, z);
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
108fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" const void * loadVp(void *vp, uint32_t bank, uint32_t offset)
109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
110326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return &static_cast<const uint8_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
114fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" float loadF(void *vp, uint32_t bank, uint32_t offset)
115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
116326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("bank %i, offset %i", bank, offset);
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("%p", env->mScript->mSlots[bank]->getPtr());
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset];
120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
122fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" int32_t loadI32(void *vp, uint32_t bank, uint32_t offset)
123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
124326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return static_cast<const int32_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
128fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" uint32_t loadU32(void *vp, uint32_t bank, uint32_t offset)
129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
130326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return static_cast<const uint32_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
134fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void loadEnvVec4(void *vp, uint32_t bank, uint32_t offset, rsc_Vector4 *v)
135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
136326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    memcpy(v, &static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset], sizeof(rsc_Vector4));
138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
140fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void loadEnvMatrix(void *vp, uint32_t bank, uint32_t offset, rsc_Matrix *m)
141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
142326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    memcpy(m, &static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset], sizeof(rsc_Matrix));
144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
147fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeF(void *vp, uint32_t bank, uint32_t offset, float v)
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
149326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
153fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeI32(void *vp, uint32_t bank, uint32_t offset, int32_t v)
154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
155326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    static_cast<int32_t *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
159fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeU32(void *vp, uint32_t bank, uint32_t offset, uint32_t v)
160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
161326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    static_cast<uint32_t *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
165fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeEnvVec4(void *vp, uint32_t bank, uint32_t offset, const rsc_Vector4 *v)
166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
167326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    memcpy(&static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset], v, sizeof(rsc_Vector4));
169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
171fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeEnvMatrix(void *vp, uint32_t bank, uint32_t offset, const rsc_Matrix *m)
172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
173326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    memcpy(&static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset], m, sizeof(rsc_Matrix));
175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
178fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void color(void *vp, float r, float g, float b, float a)
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
180326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glColor4f(r, g, b, a);
182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
184fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void renderTriangleMesh(void *vp, RsTriangleMesh mesh)
185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
186326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_TriangleMeshRender(env->mContext, mesh);
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
190fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void renderTriangleMeshRange(void *vp, RsTriangleMesh mesh, uint32_t start, uint32_t count)
191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
192326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_TriangleMeshRenderRange(env->mContext, mesh, start, count);
194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
196fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialDiffuse(void *vp, float r, float g, float b, float a)
197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
198326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {r, g, b, a};
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, v);
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
203fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialSpecular(void *vp, float r, float g, float b, float a)
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
205326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {r, g, b, a};
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, v);
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
210fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void lightPosition(void *vp, float x, float y, float z, float w)
211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
212326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {x, y, z, w};
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glLightfv(GL_LIGHT0, GL_POSITION, v);
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
217fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialShininess(void *vp, float s)
218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
219326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &s);
221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
223fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void uploadToTexture(void *vp, RsAllocation va, uint32_t baseMipLevel)
224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
225326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_AllocationUploadToTexture(env->mContext, va, baseMipLevel);
227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
229fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void enable(void *vp, uint32_t p)
230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
231326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnable(p);
233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
235fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void disable(void *vp, uint32_t p)
236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
237326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisable(p);
239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
241fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" uint32_t scriptRand(void *vp, uint32_t max)
242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
243326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return (uint32_t)(((float)rand()) * max / RAND_MAX);
244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// Assumes (GL_FIXED) x,y,z (GL_UNSIGNED_BYTE)r,g,b,a
247fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void drawTriangleArray(void *vp, RsAllocation alloc, uint32_t count)
248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
249326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const Allocation *a = (const Allocation *)alloc;
250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const uint32_t *ptr = (const uint32_t *)a->getPtr();
251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    env->mContext->setupCheck();
254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glBindBuffer(GL_ARRAY_BUFFER, 0);
256326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);
257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnableClientState(GL_VERTEX_ARRAY);
259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisableClientState(GL_NORMAL_ARRAY);
260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnableClientState(GL_COLOR_ARRAY);
262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glVertexPointer(2, GL_FIXED, 12, ptr + 1);
264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //glTexCoordPointer(2, GL_FIXED, 24, ptr + 1);
265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);
266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDrawArrays(GL_TRIANGLES, 0, count * 3);
268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
2706678e9b2568ad041429a2477177133fe4932159fJason Samsextern "C" void drawRect(void *vp, int32_t x1, int32_t x2, int32_t y1, int32_t y2)
2716678e9b2568ad041429a2477177133fe4932159fJason Sams{
2726678e9b2568ad041429a2477177133fe4932159fJason Sams    x1 = (x1 << 16);
2736678e9b2568ad041429a2477177133fe4932159fJason Sams    x2 = (x2 << 16);
2746678e9b2568ad041429a2477177133fe4932159fJason Sams    y1 = (y1 << 16);
2756678e9b2568ad041429a2477177133fe4932159fJason Sams    y2 = (y2 << 16);
2766678e9b2568ad041429a2477177133fe4932159fJason Sams
2776678e9b2568ad041429a2477177133fe4932159fJason Sams    int32_t vtx[] = {x1,y1, x1,y2, x2,y1, x2,y2};
2786678e9b2568ad041429a2477177133fe4932159fJason Sams    static const int32_t tex[] = {0,0, 0,0x10000, 0x10000,0, 0x10000,0x10000};
2796678e9b2568ad041429a2477177133fe4932159fJason Sams
2806678e9b2568ad041429a2477177133fe4932159fJason Sams
2816678e9b2568ad041429a2477177133fe4932159fJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
2826678e9b2568ad041429a2477177133fe4932159fJason Sams    env->mContext->setupCheck();
2836678e9b2568ad041429a2477177133fe4932159fJason Sams
2846678e9b2568ad041429a2477177133fe4932159fJason Sams    glBindBuffer(GL_ARRAY_BUFFER, 0);
2856678e9b2568ad041429a2477177133fe4932159fJason Sams    //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);
2866678e9b2568ad041429a2477177133fe4932159fJason Sams
2876678e9b2568ad041429a2477177133fe4932159fJason Sams    glEnableClientState(GL_VERTEX_ARRAY);
2886678e9b2568ad041429a2477177133fe4932159fJason Sams    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
2896678e9b2568ad041429a2477177133fe4932159fJason Sams    glDisableClientState(GL_NORMAL_ARRAY);
2906678e9b2568ad041429a2477177133fe4932159fJason Sams    glDisableClientState(GL_COLOR_ARRAY);
2916678e9b2568ad041429a2477177133fe4932159fJason Sams
2926678e9b2568ad041429a2477177133fe4932159fJason Sams    glVertexPointer(2, GL_FIXED, 8, vtx);
2936678e9b2568ad041429a2477177133fe4932159fJason Sams    glTexCoordPointer(2, GL_FIXED, 8, tex);
2946678e9b2568ad041429a2477177133fe4932159fJason Sams    //glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);
2956678e9b2568ad041429a2477177133fe4932159fJason Sams
2966678e9b2568ad041429a2477177133fe4932159fJason Sams    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
2976678e9b2568ad041429a2477177133fe4932159fJason Sams}
2986678e9b2568ad041429a2477177133fe4932159fJason Sams
299fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void pfBindTexture(void *vp, RsProgramFragment vpf, uint32_t slot, RsAllocation va)
300326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
301326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("pfBindTexture %p", vpf);
302326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
303fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevich    rsi_ProgramFragmentBindTexture(env->mContext,
304326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<ProgramFragment *>(vpf),
305326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   slot,
306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<Allocation *>(va));
307326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
308326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
309326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
310fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void pfBindSampler(void *vp, RsProgramFragment vpf, uint32_t slot, RsSampler vs)
311326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
312326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
313fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevich    rsi_ProgramFragmentBindSampler(env->mContext,
314326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<ProgramFragment *>(vpf),
315326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   slot,
316326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<Sampler *>(vs));
317326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
318326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
319326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
320fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void contextBindProgramFragmentStore(void *vp, RsProgramFragmentStore pfs)
321326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
322326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("contextBindProgramFragmentStore %p", pfs);
323326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
324326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_ContextBindProgramFragmentStore(env->mContext, pfs);
325326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
326326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
327326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
328fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void contextBindProgramFragment(void *vp, RsProgramFragment pf)
329326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
330326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("contextBindProgramFragment %p", pf);
331326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
332326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_ContextBindProgramFragment(env->mContext, pf);
333326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
334326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
335326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
336326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
337326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsstatic rsc_FunctionTable scriptCPtrTable = {
338326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadVp,
339326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadF,
340326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadI32,
341326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadU32,
342326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadEnvVec4,
343326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadEnvMatrix,
344326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
345326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeF,
346326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeI32,
347326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeU32,
348326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeEnvVec4,
349326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeEnvMatrix,
350326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
351326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadIdentity,
352326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadFloat,
353326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadMat,
354326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadRotate,
355326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadScale,
356326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadTranslate,
357326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadMultiply,
358326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixMultiply,
359326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixRotate,
360326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixScale,
361326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixTranslate,
362326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
363326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    color,
364326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
365326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pfBindTexture,
366326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pfBindSampler,
367326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
368326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialDiffuse,
369326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialSpecular,
370326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    lightPosition,
371326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialShininess,
372326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uploadToTexture,
373326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    enable,
374326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    disable,
375326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
376326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    scriptRand,
377326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    contextBindProgramFragment,
3786678e9b2568ad041429a2477177133fe4932159fJason Sams    contextBindProgramFragmentStore,
3796678e9b2568ad041429a2477177133fe4932159fJason Sams
3806678e9b2568ad041429a2477177133fe4932159fJason Sams
3816678e9b2568ad041429a2477177133fe4932159fJason Sams    renderTriangleMesh,
3826678e9b2568ad041429a2477177133fe4932159fJason Sams    renderTriangleMeshRange,
3836678e9b2568ad041429a2477177133fe4932159fJason Sams
3846678e9b2568ad041429a2477177133fe4932159fJason Sams    drawTriangleArray,
3856678e9b2568ad041429a2477177133fe4932159fJason Sams    drawRect
3866678e9b2568ad041429a2477177133fe4932159fJason Sams
387326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams};
388326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
389326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
390326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ScriptC::run(Context *rsc, uint32_t launchID)
391326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
392326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Env e = {rsc, this};
393326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mScript(&e, &scriptCPtrTable, launchID);
394326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
395326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
396326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::ScriptCState()
397326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
398326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    clear();
399326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
400326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
401326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::~ScriptCState()
402326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
4031ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    if (mAccScript) {
4041ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich        accDeleteScript(mAccScript);
4051ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    }
406326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
407326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
408326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ScriptCState::clear()
409326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
410326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mConstantBufferTypes.clear();
411326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearColor[0] = 0;
412326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearColor[1] = 0;
413326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearColor[2] = 0;
414326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearColor[3] = 1;
415326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearDepth = 1;
416326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearStencil = 0;
4171ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    mAccScript = NULL;
418326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mScript = NULL;
419326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mIsRoot = false;
420326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mIsOrtho = true;
421326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
422326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
423326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
424326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
425326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
426326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCBegin(Context * rsc)
427326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
428326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
429326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->clear();
430326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
431326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
432326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a)
433326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
434326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
435326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearColor[0] = r;
436326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearColor[1] = g;
437326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearColor[2] = b;
438326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearColor[3] = a;
439326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
440326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
441326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearDepth(Context * rsc, float v)
442326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
443326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
444326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearDepth = v;
445326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
446326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
447326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v)
448326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
449326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
450326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearStencil = v;
451326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
452326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
453326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCAddType(Context * rsc, RsType vt)
454326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
455326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
456326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mConstantBufferTypes.add(static_cast<const Type *>(vt));
457326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
458326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
4591ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevichvoid rsi_ScriptCSetScript(Context * rsc, void* accScript, void *vp)
460326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
461326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
4621ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    ss->mAccScript = reinterpret_cast<ACCscript*>(accScript);
463326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mScript = reinterpret_cast<rsc_RunScript>(vp);
464326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
465326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
466326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetRoot(Context * rsc, bool isRoot)
467326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
468326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
469326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mIsRoot = isRoot;
470326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
471326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
472326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho)
473326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
474326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
475326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mIsOrtho = isOrtho;
476326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
477326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
478326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsScript rsi_ScriptCCreate(Context * rsc)
479326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
480326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
481326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
482326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC *s = new ScriptC();
4831ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    s->mAccScript = ss->mAccScript;
4841ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    ss->mAccScript = NULL;
485326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mScript = ss->mScript;
486326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearColor[0] = ss->mClearColor[0];
487326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearColor[1] = ss->mClearColor[1];
488326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearColor[2] = ss->mClearColor[2];
489326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearColor[3] = ss->mClearColor[3];
490326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearDepth = ss->mClearDepth;
491326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearStencil = ss->mClearStencil;
492326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mIsRoot = ss->mIsRoot;
493326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mIsOrtho = ss->mIsOrtho;
494326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
495326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return s;
496326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
497326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
498326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
499326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
500326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
501326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
502