青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 94, comments - 250, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

Nebula3資源子系統

Posted on 2008-12-14 21:57 Condor 閱讀(693) 評論(0)  編輯 收藏 引用

跟N2比起來, N3的資源子系統更加開放, 給予了程序員對資源的創建和管理更多的控制. 

Nebula3的資源有下面向個屬性:

  • 包裝了一些其它Nebula子系統需要的數據
  • 可以用ResourceId共享
  • 可以在任何時候加載(初始化)和卸載
  • 可以同步或異步加載

例如典型的圖形資源有網格和紋理, 但資源子系統并不局限于圖形資源. 

資源子系統有兩個操作層次( 可能以后會把他們放入兩個不同的命名空間, 現在他們都是在Resources命名空間下 ):

低層提供了真正的資源對象, 處理資源的共享, 加載和(次要的)保存. 低層的資源類有:

  • ResourceId
  • Resource
  • ResourceLoader
  • ResourceSaver
  • SharedResourceServer. 

高層資源子系統提供了資源管理, 這意味著根據用戶的反饋動態的加載和卸載資源. 高層資源子系統的類有:

  • ResourceProxy (又名: ManagedResource)
  • ResourceProxyServer (又名: ResourceManager)
  • ResourceMapper

下面說明資源子系統的各個類是怎么協同工作的:

一個ResourceId是一個唯一的資源標識符. ResourceId用來共享和定位磁盤上的數據(或者資源保存在哪). ResouceId是一些原子字符串(string atoms). Atom是一個常量字符串的唯一32-bit標識符, 這可以大大加快拷貝和比較, 并且可以減少內存占用, 因為標識符字符串只保存一份. 為了定位磁盤上的數據, ResourceId常常分解成一個合法的URL(例如一個ResourceId “texture:materials/granite.dds”, 會在運行時被分解成”file:///C:/Programme/[AppName]/export/textures/materials/granite.dds”. 

一個Resource對象實際上是資源數據的容器. 像紋理和網格這樣特定的資源類型都是Resource類的子類, 并且實現了特定的接口. Resource子類通常都是平臺相關的(如D3D9Texture), 但是通過有條件的類型定義使其變成平臺無關的. 并不像Nebula2那樣, 資源對象并不知道怎樣去組織, 加載或保存自己. 取而代之的是, 一個合適的ResourceLoader或ResourceSaver必須附屬于Resource對象. 因為Nebula程序很少輸出數據, ResourceSaver只 是為了完整性而存在的. 換句話說, ResourceLoader是必須的, 因為他們是啟用Resource對象的唯一途徑. ResourceLoader具有整個資源裝載過程的完全控制. 它們可以是平臺相關的, 而且也許會依賴于相關聯的特定平臺的Resource類. 這使得程序員可以對資源的裝載過程相比Nebula2有更多的控制. 典型的資源加載類有StreadTextureLoader, MemoryVertexBufferLoader和MemoryIndexBufferLoader(從內存中加載頂點緩存和索引緩存).

Resource類也提供了一個共同的接口用來同步和異步的資源加載. 同步加載可以這樣做:

  1. res-> SetResourceId("tex:system/white.dds");
  2. res-> SetLoader(StreamTextureLoader::Create());
  3. res-> SetAsyncEnabled(false)
  4. res-> Load()
  5. if (res-> IsValid()) ... 這時資源加載已經成功了, 否則LoadFailed會返回true.

異步資源加載也很相似:

  1. res->SetResourceId("tex:system/white.dds");
  2. res->SetLoader(StreamTextureLoader::Create());
  3. res->SetAsyncEnabled(true);
  4. res->Load();
  5. 資源這時進入等待狀態...
  6. 只要 IsPending() return true, 就要重復地調用Load()... 當然真正的程序會在這時做一些其他的事情
  7. 接下來的某個調用Load()后時刻, 資源的狀態要么是Valid(資源已經準備好了), Failed(資源加載失敗)或者Cancelled(等待中的資源被取消加載了)

一個應用程序甚至是Nebula3的渲染代碼通常都不需要關心這些, 因為資源管理層會處理他們, 并把異步加載的這些細節隱藏到資源代理后面. 

SharedResourceServer單件通過ResourceId來共享資源. 通過SharedResourceServer創建資源確保了每個資源只在內存中加載了一份, 而不管客戶端的數目. 如果客戶端的數目降低到了0, 資源會被自動卸載(這并不是合適的資源管理, 而應該是ResourceProxyServer應該關心的). 資源共享完全可以直接通過標準的Nebula3的創建機制來繞過. 

ResourceProxy(或ManagedResource)是對于實際資源對象的資源管理包裝. 它的思想是包含的資源對象會受資源用途反饋的控制. 例如, 一個紋理代理會在被請求的紋理在后臺加載時提供一個占位紋理, 屏幕上所有使用這個資源的物體都很小的話會被提供一張低分辨率的紋理, 一個X幀沒有被繪制的紋理會被卸載, 等等. 

ResourceProxyServer(或ResourceManager)單件是資源管理系統的前端. 除了管理附屬于它的ResourceMapper的工作外, 它還是ResourceProxy的工廠, 并且把ResourceMapper跟Resource類型聯系到了一起. 

ResourceMapper是一個有趣的東西. 一個ResourceMapper跟一種資源類型(如紋理或網格)相關聯, 并被應用程序依附到ResourceProxyServer. 它負責從渲染代碼的使用反饋來加載/卸載資源. ResourceMapper的子類可以實現不同的資源管理策略, 也可以通過派生特定的ResourceMapper和ResourceLoader來創建一個完全定制的平臺和應用相關的資源管理方案. 目標是顯而易見的, Nebula3提供了一些好用的ResourceMapper來加載需要的任何東西. 

資源使用反饋是由渲染代碼寫入ResourceProxy對象的, 而且應該包含這個資源的一些信息:是否會在不久后用到, 是否可見, 并估計物體占用的屏幕空間大小. 特定的反饋依賴于ResourceProxy的子類, ResourceProxy中沒有公有的反饋方法. 

基于資源的使用反饋, 一個ResourceMapper應該實現下面的一些操作(這取決于具體的mapper):

  • Load: 根據level-of-detail異步加載資源(如跳過不需要的高分辨率mipmap層次)
  • Unload: 完全卸載資源, 釋放珍貴的內存
  • Upgrade: 提高已加載資源的level-of-detail(如加載高分辨率的mipmap層次紋理)
  • Degrade: 降低已加載資源的level-of-detail(如跟上面相反的情況)

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲片在线观看| 欧美一区二区视频在线观看2020 | 欧美日韩亚洲一区在线观看| 91久久精品视频| 欧美国产综合| 欧美激情综合在线| 亚洲欧美成人网| 欧美伊人精品成人久久综合97| 国外成人在线| 欧美承认网站| 欧美视频精品在线| 久久国产一区二区三区| 久久国产精品72免费观看| 黄色亚洲精品| 亚洲品质自拍| 国产精品亚洲激情| 免费在线一区二区| 欧美三级电影精品| 久久久久在线| 欧美精品一区二区三区视频| 亚洲——在线| 久久综合久久久久88| 中文网丁香综合网| 欧美中文字幕在线观看| 日韩视频在线永久播放| 亚洲欧美日韩一区| 亚洲麻豆av| 欧美一区二区三区免费看 | 国产精品剧情在线亚洲| 欧美v日韩v国产v| 国产精品成人免费精品自在线观看| 欧美亚洲免费| 欧美日韩国产小视频在线观看| 久久国产天堂福利天堂| 欧美精品福利在线| 看片网站欧美日韩| 国产精品美女久久久久久2018| 欧美ed2k| 国自产拍偷拍福利精品免费一| 亚洲日本va午夜在线电影| 国产色爱av资源综合区| 亚洲精品一区二区三区婷婷月| 国产啪精品视频| 洋洋av久久久久久久一区| 亚洲高清在线视频| 先锋影音国产精品| 亚洲综合视频一区| 欧美日韩一级黄| 亚洲国产精品久久久久秋霞影院| 国内外成人免费视频 | 久久久久久久久久久久久久一区| 欧美久久久久久久久| 欧美大片在线看| 国内精品模特av私拍在线观看| 这里只有精品在线播放| 夜夜夜精品看看| 欧美黄色精品| 亚洲欧洲中文日韩久久av乱码| 伊人激情综合| 久久综合色婷婷| 欧美jizz19性欧美| 亚洲电影中文字幕| 亚洲国产精品va在线看黑人动漫 | 亚洲美女尤物影院| 亚洲精品国产无天堂网2021| 噜噜噜躁狠狠躁狠狠精品视频 | 欧美一区二区| 国产欧美精品日韩| 欧美在线播放视频| 久久久国产亚洲精品| 国产亚洲精品高潮| 久久久国产精品一区二区三区| 久久久www成人免费毛片麻豆| 国产精品美女久久| 欧美一区二区视频97| 久久精品国产v日韩v亚洲| 国产一级揄自揄精品视频| 欧美在线在线| 免费看成人av| 99国内精品久久| 国产精品盗摄一区二区三区| 亚洲一区二区毛片| 久久久噜噜噜久久中文字幕色伊伊 | 欧美成人免费全部| 日韩系列在线| 欧美一区二区三区在线观看| 国产一区二区日韩精品| 久久综合激情| 亚洲最新合集| 欧美自拍偷拍午夜视频| 一区二区亚洲精品国产| 欧美精品二区三区四区免费看视频| 99re这里只有精品6| 欧美在线三级| 亚洲黄色成人| 国产精品视屏| 巨胸喷奶水www久久久免费动漫| 亚洲精品一区二区在线观看| 亚洲欧美国产一区二区三区| 伊大人香蕉综合8在线视| 欧美精品一区二区三区在线播放| 亚洲作爱视频| 欧美11—12娇小xxxx| 中日韩美女免费视频网址在线观看 | 亚洲国产另类久久精品| 欧美日韩亚洲视频| 久久精品一区二区| 一区二区三区免费在线观看| 久久免费视频在线观看| 一区二区三区导航| 激情久久久久久久| 国产精品a久久久久久| 美日韩精品视频| 亚洲欧美日韩区| 日韩一区二区精品| 欧美国产日韩一区| 久久久久久久一区二区三区| 亚洲视频www| 亚洲激情图片小说视频| 国产九九精品视频| 欧美日韩成人在线| 欧美成人综合| 久久五月婷婷丁香社区| 欧美亚洲日本网站| 一本久道久久综合狠狠爱| 欧美激情影院| 蜜臀久久久99精品久久久久久 | 欧美一区二区三区在线观看| 日韩亚洲欧美在线观看| 亚洲国产天堂久久综合| 韩日精品视频| 国产综合亚洲精品一区二| 国产精品久久久久一区二区三区共 | 一区二区三区精品视频| 亚洲国产网站| 亚洲高清视频一区| 尤妮丝一区二区裸体视频| 国产亚洲精品久| 国产午夜精品久久久久久免费视 | 欧美精品久久99久久在免费线| 欧美中文字幕精品| 久久成人免费网| 久久精品国产99| 久久久久久成人| 久久亚洲免费| 欧美电影免费观看高清| 欧美成人在线影院| 欧美交受高潮1| 欧美日韩在线播放三区四区| 欧美日韩免费在线| 欧美性猛片xxxx免费看久爱| 国产精品v欧美精品v日韩 | 欧美在线综合视频| 久久精品1区| 久久久久免费视频| 欧美成人精品三级在线观看| 欧美激情综合网| 国产精品久久久久aaaa九色| 国产精品一区视频网站| 国产一区二区高清不卡| 在线 亚洲欧美在线综合一区| 在线国产精品播放| 亚洲免费av网站| 午夜精品一区二区三区四区| 欧美在线亚洲| 欧美成人精品1314www| 亚洲国产二区| 在线中文字幕不卡| 久久九九免费| 欧美日本韩国| 国产人妖伪娘一区91| 136国产福利精品导航网址应用 | 亚洲每日更新| 亚洲尤物在线视频观看| 久久久噜噜噜| 日韩视频在线观看国产| 午夜在线电影亚洲一区| 欧美电影在线观看完整版| 国产精品国产成人国产三级| 国产主播一区二区三区| 日韩一区二区精品| 久久精品国产久精国产爱| 欧美黄色一区二区| 亚洲欧美日韩一区二区在线| 裸体歌舞表演一区二区| 国产精品一区二区三区四区五区| 在线不卡中文字幕| 亚洲免费影视| 亚洲国产精彩中文乱码av在线播放| 9色精品在线| 免费成人你懂的| 狠狠干综合网| 亚洲欧美日韩综合国产aⅴ| 欧美黄色一区| 久久久女女女女999久久| 国产精品久久久久久久久久三级| 亚洲欧洲视频| 免费亚洲电影| 久久精品日韩| 国内一区二区三区在线视频|