新人补钙系列教程之:Molehill底层API中最重要的Context3D
Context3D,是一个三维空间的处理环境,负责创建并处理三维对象的各个要素如顶点、片段、透视等等,并将处理的结果使用AGAL(Adobe图形汇编语言)上传给显卡进行运算,运算结果最终被回传给CPU添加到Flash Player的显示层,并呈现在舞台上。
Context3D不能被构造函数实例化,而是可以通过stage中的一个新的成员Stage3D来访问(但这不说明只许可有唯一个Context3D)
- stage3D.requestContext3D();
复制代码
<IGNORE_JS_OP style="WORD-WRAP: break-word; WHITE-SPACE: normal; TEXT-TRANSFORM: none; WORD-SPACING: 0px; COLOR: rgb(51,51,51); FONT: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; ORPHANS: 2; WIDOWS: 2; LETTER-SPACING: normal; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">
使用 GPU 加速渲染资源,在渲染的过程中,首先需要把数据提前加载到显存。在 Alternativa 3D,这些数据资源就代表那些资源类对象。这些资源类对象可以分为两种:几何数据和纹理数据。所有 Stage3D 实例都有他们自己的 Context3D 实例—–管理显存块并且可以从 Context3D 里获取资源进行渲染。
下面简单通过一段注了释的代码解一下其中的过程
- /**
- *
- * 要使用GPU,需要提前加载资源到显存。为了做这一步,我们需要获取 Context3D
- * 当我们获取到Context3D后,我们就可以开始加载资源进显存并且渲染他们了。 *
- *
- *
- * Resource:GPU 数据基类。
- *
- * rootContainer.getResources:对象中可以上传到 GPU 的资源的集合
- * (true)可以获取子项的资源
- *
- *
- */
- stage3D = stage.stage3Ds[0];
- stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate);
- // 由stage3D请求一个Context3D对象()
- stage3D.requestContext3D();
- }
- private function onContextCreate(e:Event):void {
- for each (var resource:Resource in rootContainer.getResources(true)) {
- resource.upload(stage3D.context3D);
- }
- }
复制代码
OK!再贴上葵花宝典(帮助文档)对Context3D的权威解释:
渲染上下文包括一个绘图表面及其关联的资源和状态。在可能的情况下,渲染上下文使用硬件图形处理单元 (GPU)。否则,渲染上下文使用软件。(如果在某个平台上不支持通过 Context3D 呈现,则 Stage 对象的 stage3Ds 属性包含一个空列表。)尽管专为 3D 图形设计,但是呈现管道并不强制呈现必须是三维的。因此,您可以通过提供适当的顶点和像素片段程序来创建 2D 渲染器。在 3D 和 2D 这两种情况下,支持的几何基元只有三角形。
通过调用 Stage3D 对象的 requestContext3D() 方法可以获取 Context3D 类的实例。每个页面只能存在有限数量的 Context3D 对象;Stage.stage3Ds 列表中的每个 Stage3D 只能有一个。当创建上下文时,Stage3D 对象会调度一个 context3DCreate 事件。渲染上下文可能会随时被损坏并重新创建,例如,当使用 GPU 的另一个应用程序获得焦点时。您的代码将会接收到多个 context3DCreate 事件。使用相关联 Stage3D 实例的 x 和 y 属性指定舞台上渲染区域的位置。
下列限制适用于呈现:
资源限制:
资源 允许的数量 总内存
Vertex buffers 4096 256 MB
Index buffers 4096 128 MB
Programs 4096 16 MB
Textures 4096 128 MB
Cube textures 4096 256 MB
AGAL 限制:每个程序 200 个 opcode。
绘制调用限制:每个 present() 调用 32,768 个 drawTriangles() 调用。
350 MB 是纹理的绝对限制,包括 mipmap 所需的纹理内存。但是,许多设备不支持这么多的纹理内存。为了最大限度地保证兼容性,请将使用的纹理内存限制为 128 MB 或更少。
您无法使用 Context3D 构造函数创建 Context3D 对象。它是作为 Stage3D 实例的属性构建并提供的
新人补钙系列教程之:Molehill底层API中最重要的Context3D的更多相关文章
- 新人补钙系列教程之:AS3事件处理--事件流
一个flash应用程序可能会非常复杂,比如,有很多可视实例嵌套在一起,这样的话会形成一个树形结构,这个结构的根是stage,然后一级级到不同的实例,一般来说,要把这个树形结构倒过来看,即stage在顶 ...
- 新人补钙系列教程之:拒绝CPU高占用
1.关于MovieClip和Sprite的鼠标事件,当不需要鼠标事件的时候将mouseEnabled和mouseChildren设为false. 不断的检测鼠标交互事件会消耗CPU,尤其是大量交互对象 ...
- 新人补钙系列教程之:3D理论 - 二进制空间分割(BSP)树
1. 什么是BSP树 BSP算法的初始数据是一个多边形集,BSP在预处理的时候先在多边形集中选取一个多边形作为支持平面,然后根据这个平面将集合划分成两个部分,每个部分是一个新的子节点,递归进行该过程, ...
- 新人补钙系列教程之:体验ApplicationDomain 应用程序域
要说应用程序域,就不得不说安全沙箱 安全沙箱在帮助文档的解释是: 客户端计算机可以从很多来源(如外部 Web 站点或本地文件系统)中获取单个 SWF 文件.当 SWF 文件及其它资源(例如共享对象.位 ...
- 新人补钙系列教程之:AS3 与 PHP 简单通信基础
package { import flash.display.Loader; import flash.events.Event; import flash.net.URLLoader; import ...
- 新人补钙系列教程之:AS 与 JS 相互通信
比较常用的,AS 调用 JS private function callJS():void{ ExternalInterface.addCallback("callbackQQPay&quo ...
- 新人补钙系列教程之:AS3 位运算符
ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript 中,所有整数字面量默认都是有符号整数,这意味着什么呢? 有符号整数使用 3 ...
- 新人补钙系列教程之:XML处理方法
初始化XML对象XML对象可以代表一个XML元素.属性.注释.处理指令或文本元素.在ActionScript 3.0中我们可以直接将XML数据赋值给变量: var myXML:XML = <or ...
- kali linux 系列教程之metasploit 连接postgresql可能遇见的问题
kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂 目录 kali linux 下metasploit 连接postgresql可能遇见的问题. ...
随机推荐
- hdu 3986 Harry Potter and the Final Battle (最短路径)
Harry Potter and the Final Battle Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/6553 ...
- spring in action 学习十二:property placeholder 注解的方式实现避免注入外部属性硬代码化
这里的注解是指@PropertySource这个注解.用@PropertySource这个注解加载.properties文件. 案例的目录结构如下: student.properties的代码如下: ...
- box-pack
box-pack表示父容器里面子容器的水平对齐方式,可选参数如下所示: start | end | center | justify <article class="wrap" ...
- Java并发(3)- 聊聊Volatile
引言 谈到volatile关键字,大多数开发者都有一定了解,可以说是开发者非常熟悉,深入之后又非常陌生的一个关键字.相当于轻量的synchronized,也叫轻量级锁,与synchronized相比性 ...
- mySql 查询当天、本周、最近7天、本月、最近30天的语句
mySql 查询当天.本周.最近7天.本月.最近30天的语句 原创 2017年04月13日 16:40:38 标签: 962 编辑 删除 -- 当天 SELECT * FROM 表名 WHERE w ...
- HDU1541 经典树状数组
HDU1541 题意: 如图,等级为0的点有1,等级为1得点有4,2 等级为2的点有3,等级为3的点有5-------即即左下角的点的个数 现给你一些点(x,y),输入顺序按y升序,y相等时按x升序 ...
- 2590: [Usaco2012 Feb]Cow Coupons
2590: [Usaco2012 Feb]Cow Coupons Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 306 Solved: 154[Su ...
- 汕头市队赛 SRM 09 B 撕书
B 撕书II-3 SRM 09 背景&&描述 琉璃手头有一黑一白两本魔法书,一本是<缟玛瑙的不在证明>,另一本是<白色相簿1.5> 传说同时打开这两本书 ...
- YYH的王国(NOIP模拟赛Round 6)
题目描述 YYH拥有一个有n个城市的国家,编号为1~n.其中城市i到城市j的路径长度为i和j的最小公倍数.现在YYH想建一些高速公路,使得任意两座城市都能通过高速公路直接或间接到达.建造一条高速公路的 ...
- 俄罗斯方块(NOIP模拟赛)(水·模拟)
真是一道神奇的题目233~ 原题传送门 迫不得已贴了个题解的链接.. 好吧,这道题就是分情况讨论,纯模拟,, 没有什么难的.. 脑洞要大,四面都要考虑,不能漏! #include<iostrea ...