Axiom3D:资源引用与加载基本流程.
Archive:对应文件夹位置,包含文件夹,压缩文件,网络位置,包含Load,Unload,Open,Create,Remove,FineFile等主要虚方法,用于对应各具体Archive来实现.
ResourceLocation:主要包含Archive,Watcher(文件位置变动),Recursive(是否查找子文件夹),Monitor(新建文件是否关联Watcher).
ResourceLocationIndex:为Dictionary<string,Archive>的别名,用于记录对应Archive里的所有文件.
ResourceGroup:成员LocationList为List<ResourceLocation>,而ResourceIndexCaseSensitive与ResourceIndexCaseInsensitive对应ResourceLocationIndex.二者分别记录当前组里所有文件夹和记录当前所有文件夹里的所有文件.
ResourceGroupManager会自动定义四个ResourceGroup,分别是DefaultResourceGroupName,InternalResourceGroupName,BootstrapResourceGroupName,AutoDetectResourceGroupName.用户定义的ResourceGroup可以直接放入配置文件.
Root在第一次初始化窗口时,会对各ResourceManager的子类初始化,如MaterialManager(DefaultResourceGroupName),ParticleSystemManager,MeshManager(InternalResourceGroupName).
资源是共通的,意思资源之间的引用不限制在同一文件夹或是压缩文件内,如在一个文件夹Materials下有一个文件MorningSkyBox.material,里面会有一个资源(Examples/MorningSkyBox)调用cubic_texture morning.jpg separateUV.代码路径大致如下过程:
ResourceGroupManager.Instance.InitializeResourceGroup("groupName");
//遇到MorningSkyBox.material
MaterialManager.ParseScript("MorningSkyBox.material")
//解析文件语句到cubic_texture morning.jpg separateUV
MaterialSerializer.ParseScriptLine("cubic_texture morning.jpg separateUV")
//解析cubic_texture,调用解析cubic_texture的方法
MaterialSerializer.ParseCubicTexture("morning.jpg separateUV")
MaterialScriptContext.TextureUnitState.SetCubicTextureName("morning.jpg",false)
//根据文件名加上立方体纹理对应6个位置,得到正确的六个纹理文件名.
注意此时只在TextureUnitState的Frames填充六个纹理文件名,并没有加载资源.
而加载这些资源是在用材质Examples/MorningSkyBox的时候.如下面.
//使用Examples/MorningSkyBox资源做天空图.
SceneManager.SetSkyBox(true,"Examples/MorningSkyBox",5000);
//找到Examples/MorningSkyBox资源然后加载
Resource.Load()
//进入Resource具体的子类Material加载.
Material.Load()
//查找具体的Techniques里的Pass里的TextureUnitState加载.
TextureUnitState.Load()
//我使用的是OpenTK,则最终会使用GLTexture来加载
GLTexture.load()
//把文件名返回给ResourceGroupManager里的OpenResource来处理.
ResourceGroupManager.OpenResource(filename,groupname)
处理在这,我感觉有些问题,在前面TextureUnitState.Load()中,会把所有的资源都统一到组ResourceGroupManager.DefaultResourceGroupName来加载,不知是因为得不到正确的groupName,还是想全放入这个组添加引用.然后在OpenResource会根据DefaultResourceGroupName来查找,会发现找不到,因为这个资源本来是属性用户在配置文件添加的Popule组,这样就会调用ResourceGroupManager._findGroupContainingResoureceImpl(filename)找到正确的组.但是这样会引发一个问题,就是程序内部所有资源名都不能一样,不管是否在同一文件下,不然可能引用不到正确的资源,后面来实验一下.
总的来说,Axiom在解析资源文件时,会得到文件名字,但是不会去加载文件,因为这时并不会保证对应的ResourceManager已经加载过这个文件,只有先加载了所有资源文件,然后在用户使用这些资源时,对应的如材质,图片才会真正的加载.别的资源文件如Mesh,font总的来说也是这个流程.其中各类关系大致如下.

Axiom3D:资源引用与加载基本流程.的更多相关文章
- 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
[源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...
- HTML页面处理以及资源文件的加载
Javascript 异步加载详解 这篇文章很详细的介绍了HTML的页面处理以及资源文件的加载. 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading ...
- Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件
Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二: ...
- UNITY_资源路径与加载外部文件
UNITY_资源路径与加载外部文件 https://www.tuicool.com/articles/qMNnmm6https://blog.csdn.net/appppppen/article/de ...
- 【UE4 C++ 基础知识】<11>资源的同步加载与异步加载
同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder Constructor ...
- 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】
TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...
- Unity3d Web3d资源的动态加载
Unity3d Web3d资源的动态加载 @灰太龙 参考了宣雨松的博客,原文出处http://www.xuanyusong.com/archives/2405,如果涉及到侵权,请通知我! Unity3 ...
- [UE4]一个好用的虚幻4插件,根据资源名称动态加载资源,GetCurrentLeveName(获得当前地图名称)
下载地址 一.下载与UE4相对应的版本 二.在工程根目录新建Plugins目录,解压插件. 三.如果工程已经打开,则需要重新打开 四.重新打开工程后,右下角会有提示有新插件可用. 五.这个插件提供 ...
- 下载某资源文件并加载其中的所有Prefab到场景中
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...
随机推荐
- [svc]高并发场景 LVS DR +KeepAlive高可用实现及ka的persistence_timeout参数
LVS-DR+keepalived模式是一种非常经典的常用生产组合 高可用场景及LVS架构 一般都用一(负载)拖多(Server Array)方式 使用LVS架设的服务器集群系统有三个部分组成: (1 ...
- Binlog中最容易踩到的坑
MySQL高可用架构中,主库复制是非常常见的一种. 当主库宕机后,可以提升一个从库作为新的主库,保证服务可用性:同时可以通过扩展从库,提高整个集群的QPS. 在主从复制架构下,MySQL通过binlo ...
- VS2015 调试中断点突然失效的解决办法、VS调试时关闭调试让浏览器继续保留页面
VS2010 调试中断点突然失效的解决办法 问题描述:在调试前加了断点,但debug时红色的断点变成透明的圆圈加一个感叹号,执行到该处时也不会停止. 这个问题遇到过几次了,前几次都没怎么注意,有时候是 ...
- SqlServer四种排序:ROW_NUMBER()/RANK()/DENSE_RANK()/ntile() over()
首先,我们创建一些测试数据. if OBJECT_ID('Tempdb.dbo.#Tmp') is not null drop table #Tmp create table #Tmp ( name ...
- GitBash: 右键添加 Git Bash Here 菜单
步骤: 1.通过在“运行”中输入‘regedit’,打开注册表. 2.找到[HKEY_CLASSES_ROOT\Directory\Background]. 3.在[Background]下如果没有[ ...
- android笔记---百度地图api应用 (二) 获取公交路线的详细信息
package com.example.bdtest; import com.baidu.mapapi.MKEvent; import com.baidu.mapapi.MKPlanNode; imp ...
- Kafka: Connect
转自:http://www.cnblogs.com/f1194361820/p/6108025.html Kafka Connect 简介 Kafka Connect 是一个可以在Kafka与其他系统 ...
- 【Acm】算法之美—Fire Net
题目概述:Fire Net Suppose that we have a square city with straight streets. A map of a city is a square ...
- docker 错误:Error response from daemon: cannot stop container: connect: connection refused": unknown
docker 错误:Error response from daemon: cannot stop container: 795e4102b2de: Cannot kill container 795 ...
- 获取windows可执行文件的version信息(版本号)
之前在msdn上Version Information看到文件版本信息的介绍,看着整体比较复杂,就一直没做.现在需要获取ocx文件的版本号,所以查找了下相关资料,比较有用的就是VS_FIXEDFILE ...