rsScriptC.cpp revision 1f52633fefd1862451e6a30209d590680d02beec
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;
311f52633fefd1862451e6a30209d590680d02beecJason Sams    mScriptText = NULL;
321f52633fefd1862451e6a30209d590680d02beecJason Sams    mScriptTextLength = 0;
33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
35326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptC::~ScriptC()
36326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
371ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    if (mAccScript) {
381ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich        accDeleteScript(mAccScript);
391ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    }
40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
42fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadIdentity(void *con, rsc_Matrix *mat)
43326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
44326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadIdentity();
46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
47326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
48fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadFloat(void *con, rsc_Matrix *mat, const float *f)
49326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->load(f);
52326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
53326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
54fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadMat(void *con, rsc_Matrix *mat, const rsc_Matrix *newmat)
55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
56326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
57326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->load(reinterpret_cast<const Matrix *>(newmat));
58326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
59326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
60fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadRotate(void *con, rsc_Matrix *mat, float rot, float x, float y, float z)
61326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
62326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
63326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadRotate(rot, x, y, z);
64326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
65326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
66fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadScale(void *con, rsc_Matrix *mat, float x, float y, float z)
67326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
68326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
69326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadScale(x, y, z);
70326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
71326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
72fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadTranslate(void *con, rsc_Matrix *mat, float x, float y, float z)
73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
75326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadTranslate(x, y, z);
76326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
77326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
78fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixLoadMultiply(void *con, rsc_Matrix *mat, const rsc_Matrix *lhs, const rsc_Matrix *rhs)
79326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
80326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
81326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->loadMultiply(reinterpret_cast<const Matrix *>(lhs),
82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                    reinterpret_cast<const Matrix *>(rhs));
83326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
84326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
85fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixMultiply(void *con, rsc_Matrix *mat, const rsc_Matrix *rhs)
86326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
87326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
88326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->multiply(reinterpret_cast<const Matrix *>(rhs));
89326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
90326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
91fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixRotate(void *con, rsc_Matrix *mat, float rot, float x, float y, float z)
92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
94326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->rotate(rot, x, y, z);
95326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
97fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixScale(void *con, rsc_Matrix *mat, float x, float y, float z)
98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
99326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
100326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->scale(x, y, z);
101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
103fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void matrixTranslate(void *con, rsc_Matrix *mat, float x, float y, float z)
104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Matrix *m = reinterpret_cast<Matrix *>(mat);
106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    m->translate(x, y, z);
107326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
108326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
109326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
110fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" const void * loadVp(void *vp, uint32_t bank, uint32_t offset)
111326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
112326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
113326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return &static_cast<const uint8_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
114326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
115326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
116fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" float loadF(void *vp, uint32_t bank, uint32_t offset)
117326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
118326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
119326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("bank %i, offset %i", bank, offset);
120326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("%p", env->mScript->mSlots[bank]->getPtr());
121326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset];
122326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
123326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
124fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" int32_t loadI32(void *vp, uint32_t bank, uint32_t offset)
125326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
126326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
127326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return static_cast<const int32_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
128326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
129326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
130fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" uint32_t loadU32(void *vp, uint32_t bank, uint32_t offset)
131326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
132326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
133326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return static_cast<const uint32_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
134326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
135326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
136fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void loadEnvVec4(void *vp, uint32_t bank, uint32_t offset, rsc_Vector4 *v)
137326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
138326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
139326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    memcpy(v, &static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset], sizeof(rsc_Vector4));
140326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
141326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
142fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void loadEnvMatrix(void *vp, uint32_t bank, uint32_t offset, rsc_Matrix *m)
143326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
144326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
145326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    memcpy(m, &static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset], sizeof(rsc_Matrix));
146326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
147326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
148326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
149fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeF(void *vp, uint32_t bank, uint32_t offset, float v)
150326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
151326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
152326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
153326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
154326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
155fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeI32(void *vp, uint32_t bank, uint32_t offset, int32_t v)
156326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
157326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
158326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    static_cast<int32_t *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
159326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
160326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
161fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeU32(void *vp, uint32_t bank, uint32_t offset, uint32_t v)
162326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
163326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
164326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    static_cast<uint32_t *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
165326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
166326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
167fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeEnvVec4(void *vp, uint32_t bank, uint32_t offset, const rsc_Vector4 *v)
168326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
169326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
170326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    memcpy(&static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset], v, sizeof(rsc_Vector4));
171326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
172326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
173fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void storeEnvMatrix(void *vp, uint32_t bank, uint32_t offset, const rsc_Matrix *m)
174326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
175326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
176326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    memcpy(&static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset], m, sizeof(rsc_Matrix));
177326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
178326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
179326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
180fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void color(void *vp, float r, float g, float b, float a)
181326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
182326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
183326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glColor4f(r, g, b, a);
184326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
185326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
186fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void renderTriangleMesh(void *vp, RsTriangleMesh mesh)
187326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
188326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
189326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_TriangleMeshRender(env->mContext, mesh);
190326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
191326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
192fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void renderTriangleMeshRange(void *vp, RsTriangleMesh mesh, uint32_t start, uint32_t count)
193326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
194326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
195326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_TriangleMeshRenderRange(env->mContext, mesh, start, count);
196326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
197326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
198fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialDiffuse(void *vp, float r, float g, float b, float a)
199326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
200326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
201326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {r, g, b, a};
202326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, v);
203326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
204326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
205fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialSpecular(void *vp, float r, float g, float b, float a)
206326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
207326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
208326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {r, g, b, a};
209326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, v);
210326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
211326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
212fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void lightPosition(void *vp, float x, float y, float z, float w)
213326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
214326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
215326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    float v[] = {x, y, z, w};
216326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glLightfv(GL_LIGHT0, GL_POSITION, v);
217326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
218326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
219fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void materialShininess(void *vp, float s)
220326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
221326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
222326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &s);
223326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
224326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
225fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void uploadToTexture(void *vp, RsAllocation va, uint32_t baseMipLevel)
226326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
227326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
228326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_AllocationUploadToTexture(env->mContext, va, baseMipLevel);
229326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
230326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
231fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void enable(void *vp, uint32_t p)
232326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
233326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
234326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnable(p);
235326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
236326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
237fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void disable(void *vp, uint32_t p)
238326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
239326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
240326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisable(p);
241326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
242326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
243fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" uint32_t scriptRand(void *vp, uint32_t max)
244326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
245326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return (uint32_t)(((float)rand()) * max / RAND_MAX);
246326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
247326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
248326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// Assumes (GL_FIXED) x,y,z (GL_UNSIGNED_BYTE)r,g,b,a
249fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void drawTriangleArray(void *vp, RsAllocation alloc, uint32_t count)
250326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
251326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const Allocation *a = (const Allocation *)alloc;
252326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    const uint32_t *ptr = (const uint32_t *)a->getPtr();
253326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
254326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
255326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    env->mContext->setupCheck();
256326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
257326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glBindBuffer(GL_ARRAY_BUFFER, 0);
258326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);
259326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
260326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnableClientState(GL_VERTEX_ARRAY);
261326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisableClientState(GL_NORMAL_ARRAY);
262326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
263326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glEnableClientState(GL_COLOR_ARRAY);
264326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
265326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glVertexPointer(2, GL_FIXED, 12, ptr + 1);
266326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //glTexCoordPointer(2, GL_FIXED, 24, ptr + 1);
267326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);
268326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
269326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    glDrawArrays(GL_TRIANGLES, 0, count * 3);
270326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
271326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
2726678e9b2568ad041429a2477177133fe4932159fJason Samsextern "C" void drawRect(void *vp, int32_t x1, int32_t x2, int32_t y1, int32_t y2)
2736678e9b2568ad041429a2477177133fe4932159fJason Sams{
2746678e9b2568ad041429a2477177133fe4932159fJason Sams    x1 = (x1 << 16);
2756678e9b2568ad041429a2477177133fe4932159fJason Sams    x2 = (x2 << 16);
2766678e9b2568ad041429a2477177133fe4932159fJason Sams    y1 = (y1 << 16);
2776678e9b2568ad041429a2477177133fe4932159fJason Sams    y2 = (y2 << 16);
2786678e9b2568ad041429a2477177133fe4932159fJason Sams
2796678e9b2568ad041429a2477177133fe4932159fJason Sams    int32_t vtx[] = {x1,y1, x1,y2, x2,y1, x2,y2};
2806678e9b2568ad041429a2477177133fe4932159fJason Sams    static const int32_t tex[] = {0,0, 0,0x10000, 0x10000,0, 0x10000,0x10000};
2816678e9b2568ad041429a2477177133fe4932159fJason Sams
2826678e9b2568ad041429a2477177133fe4932159fJason Sams
2836678e9b2568ad041429a2477177133fe4932159fJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
2846678e9b2568ad041429a2477177133fe4932159fJason Sams    env->mContext->setupCheck();
2856678e9b2568ad041429a2477177133fe4932159fJason Sams
2866678e9b2568ad041429a2477177133fe4932159fJason Sams    glBindBuffer(GL_ARRAY_BUFFER, 0);
2876678e9b2568ad041429a2477177133fe4932159fJason Sams    //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);
2886678e9b2568ad041429a2477177133fe4932159fJason Sams
2896678e9b2568ad041429a2477177133fe4932159fJason Sams    glEnableClientState(GL_VERTEX_ARRAY);
2906678e9b2568ad041429a2477177133fe4932159fJason Sams    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
2916678e9b2568ad041429a2477177133fe4932159fJason Sams    glDisableClientState(GL_NORMAL_ARRAY);
2926678e9b2568ad041429a2477177133fe4932159fJason Sams    glDisableClientState(GL_COLOR_ARRAY);
2936678e9b2568ad041429a2477177133fe4932159fJason Sams
2946678e9b2568ad041429a2477177133fe4932159fJason Sams    glVertexPointer(2, GL_FIXED, 8, vtx);
2956678e9b2568ad041429a2477177133fe4932159fJason Sams    glTexCoordPointer(2, GL_FIXED, 8, tex);
2966678e9b2568ad041429a2477177133fe4932159fJason Sams    //glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);
2976678e9b2568ad041429a2477177133fe4932159fJason Sams
2986678e9b2568ad041429a2477177133fe4932159fJason Sams    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
2996678e9b2568ad041429a2477177133fe4932159fJason Sams}
3006678e9b2568ad041429a2477177133fe4932159fJason Sams
301fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void pfBindTexture(void *vp, RsProgramFragment vpf, uint32_t slot, RsAllocation va)
302326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
303326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("pfBindTexture %p", vpf);
304326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
305fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevich    rsi_ProgramFragmentBindTexture(env->mContext,
306326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<ProgramFragment *>(vpf),
307326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   slot,
308326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<Allocation *>(va));
309326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
310326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
311326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
312fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void pfBindSampler(void *vp, RsProgramFragment vpf, uint32_t slot, RsSampler vs)
313326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
314326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
315fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevich    rsi_ProgramFragmentBindSampler(env->mContext,
316326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<ProgramFragment *>(vpf),
317326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   slot,
318326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams                                   static_cast<Sampler *>(vs));
319326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
320326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
321326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
322fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void contextBindProgramFragmentStore(void *vp, RsProgramFragmentStore pfs)
323326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
324326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("contextBindProgramFragmentStore %p", pfs);
325326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
326326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_ContextBindProgramFragmentStore(env->mContext, pfs);
327326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
328326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
329326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
330fd19dc9fc3e76caf5c37645ea5131b2a2cf10ef7Jack Palevichextern "C" void contextBindProgramFragment(void *vp, RsProgramFragment pf)
331326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
332326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    //LOGE("contextBindProgramFragment %p", pf);
333326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
334326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    rsi_ContextBindProgramFragment(env->mContext, pf);
335326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
336326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
337326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
338326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
339326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsstatic rsc_FunctionTable scriptCPtrTable = {
340326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadVp,
341326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadF,
342326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadI32,
343326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadU32,
344326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadEnvVec4,
345326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    loadEnvMatrix,
346326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
347326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeF,
348326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeI32,
349326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeU32,
350326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeEnvVec4,
351326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    storeEnvMatrix,
352326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
353326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadIdentity,
354326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadFloat,
355326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadMat,
356326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadRotate,
357326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadScale,
358326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadTranslate,
359326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixLoadMultiply,
360326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixMultiply,
361326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixRotate,
362326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixScale,
363326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    matrixTranslate,
364326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
365326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    color,
366326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
367326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pfBindTexture,
368326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    pfBindSampler,
369326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
370326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialDiffuse,
371326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialSpecular,
372326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    lightPosition,
373326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    materialShininess,
374326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    uploadToTexture,
375326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    enable,
376326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    disable,
377326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
378326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    scriptRand,
379326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    contextBindProgramFragment,
3806678e9b2568ad041429a2477177133fe4932159fJason Sams    contextBindProgramFragmentStore,
3816678e9b2568ad041429a2477177133fe4932159fJason Sams
3826678e9b2568ad041429a2477177133fe4932159fJason Sams
3836678e9b2568ad041429a2477177133fe4932159fJason Sams    renderTriangleMesh,
3846678e9b2568ad041429a2477177133fe4932159fJason Sams    renderTriangleMeshRange,
3856678e9b2568ad041429a2477177133fe4932159fJason Sams
3866678e9b2568ad041429a2477177133fe4932159fJason Sams    drawTriangleArray,
3876678e9b2568ad041429a2477177133fe4932159fJason Sams    drawRect
3886678e9b2568ad041429a2477177133fe4932159fJason Sams
389326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams};
390326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
391326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
392a44cb29164726cd9d812117819abdd7b60dfdd93Jason Samsbool ScriptC::run(Context *rsc, uint32_t launchID)
393326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
394326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    Env e = {rsc, this};
395a44cb29164726cd9d812117819abdd7b60dfdd93Jason Sams    return mScript(&e, &scriptCPtrTable, launchID) != 0;
396326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
397326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
398326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::ScriptCState()
399326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
400326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    clear();
401326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
402326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
403326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsScriptCState::~ScriptCState()
404326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
4051ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    if (mAccScript) {
4061ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich        accDeleteScript(mAccScript);
4071ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    }
408326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
409326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
410326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid ScriptCState::clear()
411326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
412326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mConstantBufferTypes.clear();
413326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearColor[0] = 0;
414326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearColor[1] = 0;
415326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearColor[2] = 0;
416326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearColor[3] = 1;
417326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearDepth = 1;
418326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mClearStencil = 0;
4191ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    mAccScript = NULL;
420326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mScript = NULL;
421326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mIsRoot = false;
422326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    mIsOrtho = true;
4231f52633fefd1862451e6a30209d590680d02beecJason Sams    mScriptText = NULL;
4241f52633fefd1862451e6a30209d590680d02beecJason Sams    mScriptTextLength = 0;
4251f52633fefd1862451e6a30209d590680d02beecJason Sams}
4261f52633fefd1862451e6a30209d590680d02beecJason Sams
4271f52633fefd1862451e6a30209d590680d02beecJason Samsvoid ScriptCState::runCompiler()
4281f52633fefd1862451e6a30209d590680d02beecJason Sams{
4291f52633fefd1862451e6a30209d590680d02beecJason Sams    mAccScript = accCreateScript();
4301f52633fefd1862451e6a30209d590680d02beecJason Sams
4311f52633fefd1862451e6a30209d590680d02beecJason Sams    LOGE("Compiler 1");
4321f52633fefd1862451e6a30209d590680d02beecJason Sams    const char* scriptSource[] = {mScriptText};
4331f52633fefd1862451e6a30209d590680d02beecJason Sams    int scriptLength[] = {mScriptTextLength} ;
4341f52633fefd1862451e6a30209d590680d02beecJason Sams    accScriptSource(mAccScript, 1, scriptSource, scriptLength);
4351f52633fefd1862451e6a30209d590680d02beecJason Sams    accCompileScript(mAccScript);
4361f52633fefd1862451e6a30209d590680d02beecJason Sams    accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mScript);
4371f52633fefd1862451e6a30209d590680d02beecJason Sams    LOGE("Compiler 1");
438326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
439326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
440326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android {
441326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript {
442326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
443326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCBegin(Context * rsc)
444326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
445326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
446326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->clear();
447326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
448326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
449326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a)
450326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
451326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
452326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearColor[0] = r;
453326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearColor[1] = g;
454326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearColor[2] = b;
455326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearColor[3] = a;
456326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
457326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
458326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearDepth(Context * rsc, float v)
459326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
460326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
461326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearDepth = v;
462326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
463326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
464326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v)
465326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
466326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
467326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mClearStencil = v;
468326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
469326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
470326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCAddType(Context * rsc, RsType vt)
471326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
472326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
473326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mConstantBufferTypes.add(static_cast<const Type *>(vt));
474326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
475326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
4761ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevichvoid rsi_ScriptCSetScript(Context * rsc, void* accScript, void *vp)
477326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
478326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
4791ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    ss->mAccScript = reinterpret_cast<ACCscript*>(accScript);
480326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mScript = reinterpret_cast<rsc_RunScript>(vp);
481326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
482326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
483326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetRoot(Context * rsc, bool isRoot)
484326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
485326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
486326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mIsRoot = isRoot;
487326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
488326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
489326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsvoid rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho)
490326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
491326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
492326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ss->mIsOrtho = isOrtho;
493326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
494326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
4951f52633fefd1862451e6a30209d590680d02beecJason Samsvoid rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
4961f52633fefd1862451e6a30209d590680d02beecJason Sams{
4971f52633fefd1862451e6a30209d590680d02beecJason Sams    ScriptCState *ss = &rsc->mScriptC;
4981f52633fefd1862451e6a30209d590680d02beecJason Sams    ss->mScriptText = text;
4991f52633fefd1862451e6a30209d590680d02beecJason Sams    ss->mScriptTextLength = len;
5001f52633fefd1862451e6a30209d590680d02beecJason Sams}
5011f52633fefd1862451e6a30209d590680d02beecJason Sams
5021f52633fefd1862451e6a30209d590680d02beecJason Sams
503326e0ddf89e8df2837752fbfd7a014814b32082cJason SamsRsScript rsi_ScriptCCreate(Context * rsc)
504326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{
505326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptCState *ss = &rsc->mScriptC;
506326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
5071f52633fefd1862451e6a30209d590680d02beecJason Sams    ss->runCompiler();
5081f52633fefd1862451e6a30209d590680d02beecJason Sams
509326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    ScriptC *s = new ScriptC();
5101ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    s->mAccScript = ss->mAccScript;
5111ef8b80bc49f415b93912fe7335f852953bde4a4Jack Palevich    ss->mAccScript = NULL;
512326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mScript = ss->mScript;
513326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearColor[0] = ss->mClearColor[0];
514326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearColor[1] = ss->mClearColor[1];
515326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearColor[2] = ss->mClearColor[2];
516326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearColor[3] = ss->mClearColor[3];
517326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearDepth = ss->mClearDepth;
518326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mClearStencil = ss->mClearStencil;
519326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mIsRoot = ss->mIsRoot;
520326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    s->mIsOrtho = ss->mIsOrtho;
5211f52633fefd1862451e6a30209d590680d02beecJason Sams    s->mScriptText = ss->mScriptText;
5221f52633fefd1862451e6a30209d590680d02beecJason Sams    s->mScriptTextLength = ss->mScriptTextLength;
523326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams    return s;
524326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
525326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
526326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
527326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}
528326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
529326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams
530