blob: be0191b055584f9f1a2af953c4cec7a9c53c7d99 [file] [log] [blame]
Jason Sams326e0dd2009-05-22 14:03:28 -07001/*
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#include "rsScriptC.h"
19#include "rsMatrix.h"
20
Jack Palevich1ef8b802009-05-28 15:53:04 -070021#include "acc/acc.h"
22
Jason Sams326e0dd2009-05-22 14:03:28 -070023using namespace android;
24using namespace android::renderscript;
25
26
27ScriptC::ScriptC()
28{
Jack Palevich1ef8b802009-05-28 15:53:04 -070029 mAccScript = NULL;
Jason Sams326e0dd2009-05-22 14:03:28 -070030 mScript = NULL;
Jason Sams1f526332009-06-05 17:35:09 -070031 mScriptText = NULL;
32 mScriptTextLength = 0;
Jason Sams326e0dd2009-05-22 14:03:28 -070033}
34
35ScriptC::~ScriptC()
36{
Jack Palevich1ef8b802009-05-28 15:53:04 -070037 if (mAccScript) {
38 accDeleteScript(mAccScript);
39 }
Jason Sams326e0dd2009-05-22 14:03:28 -070040}
41
Jack Palevichfd19dc92009-05-26 18:58:04 -070042extern "C" void matrixLoadIdentity(void *con, rsc_Matrix *mat)
Jason Sams326e0dd2009-05-22 14:03:28 -070043{
44 Matrix *m = reinterpret_cast<Matrix *>(mat);
45 m->loadIdentity();
46}
47
Jack Palevichfd19dc92009-05-26 18:58:04 -070048extern "C" void matrixLoadFloat(void *con, rsc_Matrix *mat, const float *f)
Jason Sams326e0dd2009-05-22 14:03:28 -070049{
50 Matrix *m = reinterpret_cast<Matrix *>(mat);
51 m->load(f);
52}
53
Jack Palevichfd19dc92009-05-26 18:58:04 -070054extern "C" void matrixLoadMat(void *con, rsc_Matrix *mat, const rsc_Matrix *newmat)
Jason Sams326e0dd2009-05-22 14:03:28 -070055{
56 Matrix *m = reinterpret_cast<Matrix *>(mat);
57 m->load(reinterpret_cast<const Matrix *>(newmat));
58}
59
Jack Palevichfd19dc92009-05-26 18:58:04 -070060extern "C" void matrixLoadRotate(void *con, rsc_Matrix *mat, float rot, float x, float y, float z)
Jason Sams326e0dd2009-05-22 14:03:28 -070061{
62 Matrix *m = reinterpret_cast<Matrix *>(mat);
63 m->loadRotate(rot, x, y, z);
64}
65
Jack Palevichfd19dc92009-05-26 18:58:04 -070066extern "C" void matrixLoadScale(void *con, rsc_Matrix *mat, float x, float y, float z)
Jason Sams326e0dd2009-05-22 14:03:28 -070067{
68 Matrix *m = reinterpret_cast<Matrix *>(mat);
69 m->loadScale(x, y, z);
70}
71
Jack Palevichfd19dc92009-05-26 18:58:04 -070072extern "C" void matrixLoadTranslate(void *con, rsc_Matrix *mat, float x, float y, float z)
Jason Sams326e0dd2009-05-22 14:03:28 -070073{
74 Matrix *m = reinterpret_cast<Matrix *>(mat);
75 m->loadTranslate(x, y, z);
76}
77
Jack Palevichfd19dc92009-05-26 18:58:04 -070078extern "C" void matrixLoadMultiply(void *con, rsc_Matrix *mat, const rsc_Matrix *lhs, const rsc_Matrix *rhs)
Jason Sams326e0dd2009-05-22 14:03:28 -070079{
80 Matrix *m = reinterpret_cast<Matrix *>(mat);
81 m->loadMultiply(reinterpret_cast<const Matrix *>(lhs),
82 reinterpret_cast<const Matrix *>(rhs));
83}
84
Jack Palevichfd19dc92009-05-26 18:58:04 -070085extern "C" void matrixMultiply(void *con, rsc_Matrix *mat, const rsc_Matrix *rhs)
Jason Sams326e0dd2009-05-22 14:03:28 -070086{
87 Matrix *m = reinterpret_cast<Matrix *>(mat);
88 m->multiply(reinterpret_cast<const Matrix *>(rhs));
89}
90
Jack Palevichfd19dc92009-05-26 18:58:04 -070091extern "C" void matrixRotate(void *con, rsc_Matrix *mat, float rot, float x, float y, float z)
Jason Sams326e0dd2009-05-22 14:03:28 -070092{
93 Matrix *m = reinterpret_cast<Matrix *>(mat);
94 m->rotate(rot, x, y, z);
95}
96
Jack Palevichfd19dc92009-05-26 18:58:04 -070097extern "C" void matrixScale(void *con, rsc_Matrix *mat, float x, float y, float z)
Jason Sams326e0dd2009-05-22 14:03:28 -070098{
99 Matrix *m = reinterpret_cast<Matrix *>(mat);
100 m->scale(x, y, z);
101}
102
Jack Palevichfd19dc92009-05-26 18:58:04 -0700103extern "C" void matrixTranslate(void *con, rsc_Matrix *mat, float x, float y, float z)
Jason Sams326e0dd2009-05-22 14:03:28 -0700104{
105 Matrix *m = reinterpret_cast<Matrix *>(mat);
106 m->translate(x, y, z);
107}
108
109
Jack Palevichfd19dc92009-05-26 18:58:04 -0700110extern "C" const void * loadVp(void *vp, uint32_t bank, uint32_t offset)
Jason Sams326e0dd2009-05-22 14:03:28 -0700111{
112 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
113 return &static_cast<const uint8_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
114}
115
Jack Palevichfd19dc92009-05-26 18:58:04 -0700116extern "C" float loadF(void *vp, uint32_t bank, uint32_t offset)
Jason Sams326e0dd2009-05-22 14:03:28 -0700117{
118 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
119 //LOGE("bank %i, offset %i", bank, offset);
120 //LOGE("%p", env->mScript->mSlots[bank]->getPtr());
121 return static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset];
122}
123
Jack Palevichfd19dc92009-05-26 18:58:04 -0700124extern "C" int32_t loadI32(void *vp, uint32_t bank, uint32_t offset)
Jason Sams326e0dd2009-05-22 14:03:28 -0700125{
126 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
127 return static_cast<const int32_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
128}
129
Jack Palevichfd19dc92009-05-26 18:58:04 -0700130extern "C" uint32_t loadU32(void *vp, uint32_t bank, uint32_t offset)
Jason Sams326e0dd2009-05-22 14:03:28 -0700131{
132 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
133 return static_cast<const uint32_t *>(env->mScript->mSlots[bank]->getPtr())[offset];
134}
135
Jack Palevichfd19dc92009-05-26 18:58:04 -0700136extern "C" void loadEnvVec4(void *vp, uint32_t bank, uint32_t offset, rsc_Vector4 *v)
Jason Sams326e0dd2009-05-22 14:03:28 -0700137{
138 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
139 memcpy(v, &static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset], sizeof(rsc_Vector4));
140}
141
Jack Palevichfd19dc92009-05-26 18:58:04 -0700142extern "C" void loadEnvMatrix(void *vp, uint32_t bank, uint32_t offset, rsc_Matrix *m)
Jason Sams326e0dd2009-05-22 14:03:28 -0700143{
144 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
145 memcpy(m, &static_cast<const float *>(env->mScript->mSlots[bank]->getPtr())[offset], sizeof(rsc_Matrix));
146}
147
148
Jack Palevichfd19dc92009-05-26 18:58:04 -0700149extern "C" void storeF(void *vp, uint32_t bank, uint32_t offset, float v)
Jason Sams326e0dd2009-05-22 14:03:28 -0700150{
151 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
152 static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
153}
154
Jack Palevichfd19dc92009-05-26 18:58:04 -0700155extern "C" void storeI32(void *vp, uint32_t bank, uint32_t offset, int32_t v)
Jason Sams326e0dd2009-05-22 14:03:28 -0700156{
157 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
158 static_cast<int32_t *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
159}
160
Jack Palevichfd19dc92009-05-26 18:58:04 -0700161extern "C" void storeU32(void *vp, uint32_t bank, uint32_t offset, uint32_t v)
Jason Sams326e0dd2009-05-22 14:03:28 -0700162{
163 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
164 static_cast<uint32_t *>(env->mScript->mSlots[bank]->getPtr())[offset] = v;
165}
166
Jack Palevichfd19dc92009-05-26 18:58:04 -0700167extern "C" void storeEnvVec4(void *vp, uint32_t bank, uint32_t offset, const rsc_Vector4 *v)
Jason Sams326e0dd2009-05-22 14:03:28 -0700168{
169 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
170 memcpy(&static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset], v, sizeof(rsc_Vector4));
171}
172
Jack Palevichfd19dc92009-05-26 18:58:04 -0700173extern "C" void storeEnvMatrix(void *vp, uint32_t bank, uint32_t offset, const rsc_Matrix *m)
Jason Sams326e0dd2009-05-22 14:03:28 -0700174{
175 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
176 memcpy(&static_cast<float *>(env->mScript->mSlots[bank]->getPtr())[offset], m, sizeof(rsc_Matrix));
177}
178
179
Jack Palevichfd19dc92009-05-26 18:58:04 -0700180extern "C" void color(void *vp, float r, float g, float b, float a)
Jason Sams326e0dd2009-05-22 14:03:28 -0700181{
182 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
183 glColor4f(r, g, b, a);
184}
185
Jack Palevichfd19dc92009-05-26 18:58:04 -0700186extern "C" void renderTriangleMesh(void *vp, RsTriangleMesh mesh)
Jason Sams326e0dd2009-05-22 14:03:28 -0700187{
188 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
189 rsi_TriangleMeshRender(env->mContext, mesh);
190}
191
Jack Palevichfd19dc92009-05-26 18:58:04 -0700192extern "C" void renderTriangleMeshRange(void *vp, RsTriangleMesh mesh, uint32_t start, uint32_t count)
Jason Sams326e0dd2009-05-22 14:03:28 -0700193{
194 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
195 rsi_TriangleMeshRenderRange(env->mContext, mesh, start, count);
196}
197
Jack Palevichfd19dc92009-05-26 18:58:04 -0700198extern "C" void materialDiffuse(void *vp, float r, float g, float b, float a)
Jason Sams326e0dd2009-05-22 14:03:28 -0700199{
200 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
201 float v[] = {r, g, b, a};
202 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, v);
203}
204
Jack Palevichfd19dc92009-05-26 18:58:04 -0700205extern "C" void materialSpecular(void *vp, float r, float g, float b, float a)
Jason Sams326e0dd2009-05-22 14:03:28 -0700206{
207 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
208 float v[] = {r, g, b, a};
209 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, v);
210}
211
Jack Palevichfd19dc92009-05-26 18:58:04 -0700212extern "C" void lightPosition(void *vp, float x, float y, float z, float w)
Jason Sams326e0dd2009-05-22 14:03:28 -0700213{
214 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
215 float v[] = {x, y, z, w};
216 glLightfv(GL_LIGHT0, GL_POSITION, v);
217}
218
Jack Palevichfd19dc92009-05-26 18:58:04 -0700219extern "C" void materialShininess(void *vp, float s)
Jason Sams326e0dd2009-05-22 14:03:28 -0700220{
221 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
222 glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &s);
223}
224
Jack Palevichfd19dc92009-05-26 18:58:04 -0700225extern "C" void uploadToTexture(void *vp, RsAllocation va, uint32_t baseMipLevel)
Jason Sams326e0dd2009-05-22 14:03:28 -0700226{
227 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
228 rsi_AllocationUploadToTexture(env->mContext, va, baseMipLevel);
229}
230
Jack Palevichfd19dc92009-05-26 18:58:04 -0700231extern "C" void enable(void *vp, uint32_t p)
Jason Sams326e0dd2009-05-22 14:03:28 -0700232{
233 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
234 glEnable(p);
235}
236
Jack Palevichfd19dc92009-05-26 18:58:04 -0700237extern "C" void disable(void *vp, uint32_t p)
Jason Sams326e0dd2009-05-22 14:03:28 -0700238{
239 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
240 glDisable(p);
241}
242
Jack Palevichfd19dc92009-05-26 18:58:04 -0700243extern "C" uint32_t scriptRand(void *vp, uint32_t max)
Jason Sams326e0dd2009-05-22 14:03:28 -0700244{
245 return (uint32_t)(((float)rand()) * max / RAND_MAX);
246}
247
248// Assumes (GL_FIXED) x,y,z (GL_UNSIGNED_BYTE)r,g,b,a
Jack Palevichfd19dc92009-05-26 18:58:04 -0700249extern "C" void drawTriangleArray(void *vp, RsAllocation alloc, uint32_t count)
Jason Sams326e0dd2009-05-22 14:03:28 -0700250{
251 const Allocation *a = (const Allocation *)alloc;
252 const uint32_t *ptr = (const uint32_t *)a->getPtr();
253
254 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
255 env->mContext->setupCheck();
256
257 glBindBuffer(GL_ARRAY_BUFFER, 0);
258 //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);
259
260 glEnableClientState(GL_VERTEX_ARRAY);
261 glDisableClientState(GL_NORMAL_ARRAY);
262 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
263 glEnableClientState(GL_COLOR_ARRAY);
264
265 glVertexPointer(2, GL_FIXED, 12, ptr + 1);
266 //glTexCoordPointer(2, GL_FIXED, 24, ptr + 1);
267 glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);
268
269 glDrawArrays(GL_TRIANGLES, 0, count * 3);
270}
271
Jason Sams6678e9b2009-05-27 14:45:32 -0700272extern "C" void drawRect(void *vp, int32_t x1, int32_t x2, int32_t y1, int32_t y2)
273{
274 x1 = (x1 << 16);
275 x2 = (x2 << 16);
276 y1 = (y1 << 16);
277 y2 = (y2 << 16);
278
279 int32_t vtx[] = {x1,y1, x1,y2, x2,y1, x2,y2};
280 static const int32_t tex[] = {0,0, 0,0x10000, 0x10000,0, 0x10000,0x10000};
281
282
283 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
284 env->mContext->setupCheck();
285
286 glBindBuffer(GL_ARRAY_BUFFER, 0);
287 //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]);
288
289 glEnableClientState(GL_VERTEX_ARRAY);
290 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
291 glDisableClientState(GL_NORMAL_ARRAY);
292 glDisableClientState(GL_COLOR_ARRAY);
293
294 glVertexPointer(2, GL_FIXED, 8, vtx);
295 glTexCoordPointer(2, GL_FIXED, 8, tex);
296 //glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr);
297
298 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
299}
300
Jack Palevichfd19dc92009-05-26 18:58:04 -0700301extern "C" void pfBindTexture(void *vp, RsProgramFragment vpf, uint32_t slot, RsAllocation va)
Jason Sams326e0dd2009-05-22 14:03:28 -0700302{
303 //LOGE("pfBindTexture %p", vpf);
304 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
Jack Palevichfd19dc92009-05-26 18:58:04 -0700305 rsi_ProgramFragmentBindTexture(env->mContext,
Jason Sams326e0dd2009-05-22 14:03:28 -0700306 static_cast<ProgramFragment *>(vpf),
307 slot,
308 static_cast<Allocation *>(va));
309
310}
311
Jack Palevichfd19dc92009-05-26 18:58:04 -0700312extern "C" void pfBindSampler(void *vp, RsProgramFragment vpf, uint32_t slot, RsSampler vs)
Jason Sams326e0dd2009-05-22 14:03:28 -0700313{
314 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
Jack Palevichfd19dc92009-05-26 18:58:04 -0700315 rsi_ProgramFragmentBindSampler(env->mContext,
Jason Sams326e0dd2009-05-22 14:03:28 -0700316 static_cast<ProgramFragment *>(vpf),
317 slot,
318 static_cast<Sampler *>(vs));
319
320}
321
Jack Palevichfd19dc92009-05-26 18:58:04 -0700322extern "C" void contextBindProgramFragmentStore(void *vp, RsProgramFragmentStore pfs)
Jason Sams326e0dd2009-05-22 14:03:28 -0700323{
324 //LOGE("contextBindProgramFragmentStore %p", pfs);
325 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
326 rsi_ContextBindProgramFragmentStore(env->mContext, pfs);
327
328}
329
Jack Palevichfd19dc92009-05-26 18:58:04 -0700330extern "C" void contextBindProgramFragment(void *vp, RsProgramFragment pf)
Jason Sams326e0dd2009-05-22 14:03:28 -0700331{
332 //LOGE("contextBindProgramFragment %p", pf);
333 ScriptC::Env * env = static_cast<ScriptC::Env *>(vp);
334 rsi_ContextBindProgramFragment(env->mContext, pf);
335
336}
337
338
339static rsc_FunctionTable scriptCPtrTable = {
340 loadVp,
341 loadF,
342 loadI32,
343 loadU32,
344 loadEnvVec4,
345 loadEnvMatrix,
346
347 storeF,
348 storeI32,
349 storeU32,
350 storeEnvVec4,
351 storeEnvMatrix,
352
353 matrixLoadIdentity,
354 matrixLoadFloat,
355 matrixLoadMat,
356 matrixLoadRotate,
357 matrixLoadScale,
358 matrixLoadTranslate,
359 matrixLoadMultiply,
360 matrixMultiply,
361 matrixRotate,
362 matrixScale,
363 matrixTranslate,
364
365 color,
Jason Sams326e0dd2009-05-22 14:03:28 -0700366
367 pfBindTexture,
368 pfBindSampler,
369
370 materialDiffuse,
371 materialSpecular,
372 lightPosition,
373 materialShininess,
374 uploadToTexture,
375 enable,
376 disable,
377
378 scriptRand,
Jason Sams326e0dd2009-05-22 14:03:28 -0700379 contextBindProgramFragment,
Jason Sams6678e9b2009-05-27 14:45:32 -0700380 contextBindProgramFragmentStore,
381
382
383 renderTriangleMesh,
384 renderTriangleMeshRange,
385
386 drawTriangleArray,
387 drawRect
388
Jason Sams326e0dd2009-05-22 14:03:28 -0700389};
390
391
Jason Samsa44cb292009-06-04 17:58:03 -0700392bool ScriptC::run(Context *rsc, uint32_t launchID)
Jason Sams326e0dd2009-05-22 14:03:28 -0700393{
394 Env e = {rsc, this};
Jason Samsa44cb292009-06-04 17:58:03 -0700395 return mScript(&e, &scriptCPtrTable, launchID) != 0;
Jason Sams326e0dd2009-05-22 14:03:28 -0700396}
397
398ScriptCState::ScriptCState()
399{
400 clear();
401}
402
403ScriptCState::~ScriptCState()
404{
Jack Palevich1ef8b802009-05-28 15:53:04 -0700405 if (mAccScript) {
406 accDeleteScript(mAccScript);
407 }
Jason Sams326e0dd2009-05-22 14:03:28 -0700408}
409
410void ScriptCState::clear()
411{
412 mConstantBufferTypes.clear();
413 mClearColor[0] = 0;
414 mClearColor[1] = 0;
415 mClearColor[2] = 0;
416 mClearColor[3] = 1;
417 mClearDepth = 1;
418 mClearStencil = 0;
Jack Palevich1ef8b802009-05-28 15:53:04 -0700419 mAccScript = NULL;
Jason Sams326e0dd2009-05-22 14:03:28 -0700420 mScript = NULL;
421 mIsRoot = false;
422 mIsOrtho = true;
Jason Sams1f526332009-06-05 17:35:09 -0700423 mScriptText = NULL;
424 mScriptTextLength = 0;
425}
426
427void ScriptCState::runCompiler()
428{
429 mAccScript = accCreateScript();
430
431 LOGE("Compiler 1");
432 const char* scriptSource[] = {mScriptText};
433 int scriptLength[] = {mScriptTextLength} ;
434 accScriptSource(mAccScript, 1, scriptSource, scriptLength);
435 accCompileScript(mAccScript);
436 accGetScriptLabel(mAccScript, "main", (ACCvoid**) &mScript);
437 LOGE("Compiler 1");
Jason Sams326e0dd2009-05-22 14:03:28 -0700438}
439
440namespace android {
441namespace renderscript {
442
443void rsi_ScriptCBegin(Context * rsc)
444{
445 ScriptCState *ss = &rsc->mScriptC;
446 ss->clear();
447}
448
449void rsi_ScriptCSetClearColor(Context * rsc, float r, float g, float b, float a)
450{
451 ScriptCState *ss = &rsc->mScriptC;
452 ss->mClearColor[0] = r;
453 ss->mClearColor[1] = g;
454 ss->mClearColor[2] = b;
455 ss->mClearColor[3] = a;
456}
457
458void rsi_ScriptCSetClearDepth(Context * rsc, float v)
459{
460 ScriptCState *ss = &rsc->mScriptC;
461 ss->mClearDepth = v;
462}
463
464void rsi_ScriptCSetClearStencil(Context * rsc, uint32_t v)
465{
466 ScriptCState *ss = &rsc->mScriptC;
467 ss->mClearStencil = v;
468}
469
470void rsi_ScriptCAddType(Context * rsc, RsType vt)
471{
472 ScriptCState *ss = &rsc->mScriptC;
473 ss->mConstantBufferTypes.add(static_cast<const Type *>(vt));
474}
475
Jack Palevich1ef8b802009-05-28 15:53:04 -0700476void rsi_ScriptCSetScript(Context * rsc, void* accScript, void *vp)
Jason Sams326e0dd2009-05-22 14:03:28 -0700477{
478 ScriptCState *ss = &rsc->mScriptC;
Jack Palevich1ef8b802009-05-28 15:53:04 -0700479 ss->mAccScript = reinterpret_cast<ACCscript*>(accScript);
Jason Sams326e0dd2009-05-22 14:03:28 -0700480 ss->mScript = reinterpret_cast<rsc_RunScript>(vp);
481}
482
483void rsi_ScriptCSetRoot(Context * rsc, bool isRoot)
484{
485 ScriptCState *ss = &rsc->mScriptC;
486 ss->mIsRoot = isRoot;
487}
488
489void rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho)
490{
491 ScriptCState *ss = &rsc->mScriptC;
492 ss->mIsOrtho = isOrtho;
493}
494
Jason Sams1f526332009-06-05 17:35:09 -0700495void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
496{
497 ScriptCState *ss = &rsc->mScriptC;
498 ss->mScriptText = text;
499 ss->mScriptTextLength = len;
500}
501
502
Jason Sams326e0dd2009-05-22 14:03:28 -0700503RsScript rsi_ScriptCCreate(Context * rsc)
504{
505 ScriptCState *ss = &rsc->mScriptC;
506
Jason Sams1f526332009-06-05 17:35:09 -0700507 ss->runCompiler();
508
Jason Sams326e0dd2009-05-22 14:03:28 -0700509 ScriptC *s = new ScriptC();
Jack Palevich1ef8b802009-05-28 15:53:04 -0700510 s->mAccScript = ss->mAccScript;
511 ss->mAccScript = NULL;
Jason Sams326e0dd2009-05-22 14:03:28 -0700512 s->mScript = ss->mScript;
513 s->mClearColor[0] = ss->mClearColor[0];
514 s->mClearColor[1] = ss->mClearColor[1];
515 s->mClearColor[2] = ss->mClearColor[2];
516 s->mClearColor[3] = ss->mClearColor[3];
517 s->mClearDepth = ss->mClearDepth;
518 s->mClearStencil = ss->mClearStencil;
519 s->mIsRoot = ss->mIsRoot;
520 s->mIsOrtho = ss->mIsOrtho;
Jason Sams1f526332009-06-05 17:35:09 -0700521 s->mScriptText = ss->mScriptText;
522 s->mScriptTextLength = ss->mScriptTextLength;
Jason Sams326e0dd2009-05-22 14:03:28 -0700523 return s;
524}
525
526}
527}
528
529