RenderScript 札记一.doc_第1页
RenderScript 札记一.doc_第2页
RenderScript 札记一.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于RenderScript 脚本札记一. 关于RenderScriptScene 的继承类定义.下面以GrassRS.java为例子:1). 首先定义ScriptC中的标签,用于说明其应用的变量: private void createProgramVertex() mPvOrthoAlloc = new ProgramVertex.MatrixAllocation(mRS); mPvOrthoAlloc.setupOrthoWindow(mWidth, mHeight); ProgramVertex.Builder pvb = new ProgramVertex.Builder(mRS, null, null); pvb.setTextureMatrixEnable(true); mPvBackground = pvb.create(); mPvBackground.bindAllocation(mPvOrthoAlloc); mPvBackground.setName(PVBackground);注意这里定义变量mPvBackground mPvBackground.setName(“PVBackground”);我们通过代码跟踪可以发现其实现为:public void setName(String s) throws IllegalStateException, IllegalArgumentException if(s.length() nAssignName - rsAssignName - rsi_AssignName(rsContext.cpp) - Context:assignName现在分析其assignName 的实现:void Context:assignName(ObjectBase *obj, const char *name, uint32_t len) rsAssert(!obj-getName(); obj-setName(name, len); mNames.add(obj);通过上面的代码分析, 通过我们上层代码的设置, 即可以将改名字注册到rsContext 中的: Vector mNames; 来.二. 关于ScriptC 中的应用.先总结一下ScriptC 的初始化过程:ScriptC.java 中:create - internalCreate - b.mRS.nScriptCCreate() - rsi_ScriptCCreate(rsScriptC.cpp) - ss-runCompiler(rsc, s) - accCompileScript(s-mAccScript)(Acc.cpp) - pile(script-text, script-textLength) (这里就是真实解析的地方了)关于脚本运行的最终代码为:rsScriptC.cpp run 这个函数里面的代码才是真正的运行其我们在res/raw/中放入的脚本的地方.运行其脚本现在总结如下:rsContext.cpp 中 Context 的构造函数: 创建一个线程用来运行脚本status = pthread_create(&mThreadId, &threadAttr, threadProc, this);其线程: threadProc - rsc-runRootScript(); -uint32_t ret = runScript(mRootScript.get(), 0); 其runScript 中的代码:uint32_t Context:runScript(Script *s, uint32_t launchID) ObjectBaseRef frag(mFragment); ObjectBaseRef vtx(mVertex); ObjectBaseRef store(mFragmentStore); ObjectBaseRef raster(mRaster); uint32_t ret = s-run(this, launchID); mFragment.set(frag); mVertex.set(vtx); mFragmentStore.set(store); mRaster.set(raster); return ret;在运行之前就的设置我们的脚本了, 所以在GrassView 中public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) super.surfaceChanged(holder, format, w, h); RenderScript RS = createRenderScript(false); GrassRS render = new GrassRS(getContext(), w, h); render.init(RS, getResources(), false); render.setOffset(0.5f, 0.0f, 0, 0); render.start();render.start() 其调用RenderScriptScene 中的.public void start() mRS.contextBindRootScript(mScript);而contextBindRootScript 的实现为 rsContext.cpp 中的:void rsi_ContextBindRootScript(Context *rsc, RsScript vs) Script *s = static_cast(vs); rsc-setRootScript(s);上面即指明底层要运行的脚本. 即: threadProc中runRootScript -runScript(mRootScript.get(), 0); 指定要运行的脚本了.三. 关于脚本中的#pragma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论