Articles of 资源管理

WDDM管理D3DPOOL_DEFAULT中的内存

在这个问题中,我看到我在DX9EX的D3DPOOL_DEFAULT中内存不足。 将我的用法从D3DUSAGE_DYNAMIC为0 (静态用法)后,所有内容都运行良好,没有DX9错误。 在我的加载过程中,我以前会得到DX9的内存不足错误,现在我看到系统内存开始增长。 所以我认为WDDM正在管理我的纹理。 所以我的问题是,我真的在这里看到了内存管理吗? 我在复制和访问资源数据(Direct3D 10)中阅读了有关WDDM的内容,但我不确定是否属于DX9EX。 维基百科说: WDDM驱动程序允许video存储器进行虚拟化,并将video数据从video存储器分页到系统RAM中。

我如何创建一个健全的经理?

我有一个基本的实体系统。 现在我想添加audio。 我想创建一个监视实体的数据库类,从中提取数据,并在必要时创建audiostream。 我正在使用C ++和SDL2。 什么是这个简单的方法?

AssetManager在libgdx中正确使用

我是libgdx的初学者,我正在编写一个简单的游戏。 这个游戏就像一个字拼图,每个字母都是一个纹理。 加载第一级之前,我需要加载到内存26纹理,每个字母的字母,还有一个英文字典存储在内存中作为.txt文件。 问题是我的字典需要被处理并加载到内存中(复杂性Big-O是O(n),其中n大约是200k)。 我应该在哪里处理? 在资产管理者类中还是在实际使用的类中? 另外,不同的级别可能会使用完全相同的纹理,所以将它们加载到内存中只需要一次,而不是每次在关卡结束时都进行处理。 将它们存储在Assetmanager类中的一个静态variables是一个很好的解决这个问题的方法吗?

我应该压缩游戏数据文件吗?

我正在打包我的游戏资源到一个单一的文件。 我select了格式,但我不知道是否应该使用压缩。 我明白可能的优点和缺点: 压缩意味着更less的安装时间(很less发生)。 压缩意味着光盘和下载过程中的游戏规模较小。 压缩意味着每次游戏资源caching机制决定从档案中cachingRAM中的一些数据时应该提取数据。 我错过了什么? 其他游戏开发者通常会做什么?为什么?

用于2D游戏的C ++和SDL资源管理

我的第一个问题是关于州管理者。 我不使用单例模式(阅读许多随机职位,各种原因不使用它),我有gameStateManager运行指针cCurrentGameState->渲染()等我想做一个过渡游戏,这个引擎应该理想的覆盖一个平台游戏和一个鸟眼RPG(有一些重新编码,我只是指基础引擎),这两个将加载不同的水平和事件,如世界地图,地牢,商店等。所以,我认为,而不是将所有这些数据存储在所有的状态,我会把引擎分解成gameStates和playStates …当gameState到达gameStatePlay(),gameStatePlay只是运行通常的handleInput,逻辑,并呈现为playStates,就像低水平gameStateManager做的。 这让我可以将所有的玩家数据存储在基本的playstate类中,而不会在gameStates中存储无用的数据。 现在我添加了一个单独的mapEditor,它使用了gameStateEditor中的editorStates。 这是gameState概念的太多用法吗? 它似乎对我来说工作得很好,所以我想知道我是否离得太远而不能实现这一点。 我的第二个问题是关于图像资源。 我有我的精灵类除了静态成员,主要是loadImage,applySurface和我的屏幕指针。 我也有一个映射将imageName枚举与实际的SDL_Surface指针配对,还有一个clipNumber枚举与剪辑向量的包装类相关联,以便映射中的每个引用可以具有不同大小的剪辑数量。 我认为最好将所有这些图像存储起来,并将其放置在一个静态物体中,因为20个不同的地精都使用相同的精灵表单,而且都需要打印到同一个屏幕上,当然,这样我也不需要把我的屏幕引用传递给每个小实体。 imageMap似乎工作得很好,我甚至可以添加在创建实体types时通过映射search的能力,以查看创建时的特定图像,创建它是否不存在,如果最后一个实体需要它,则销毁图像刚刚被摧毁。 然而,vector剪贴图似乎花了太长的时间来初始化,所以如果我跑过了初始化他们快速的状态,游戏崩溃> <。 另外,剪辑映射调用是这行= P的一半 SPRITE::applySurface( cEditorMap.cTiles[x][y].iX, cEditorMap.cTiles[x][y].iY, SPRITE::mImages[ IMAGE_TILEMAP ], SPRITE::screen, SPRITE::mImageClips[IMAGE_TILEMAP]->clips.at( cEditorMap.cTiles[x][y].iTileType ) ); 同样,我有没有正确的想法? 我喜欢imageMap,但我更喜欢每个实体存储自己的剪辑? 我最后的问题是关于碰撞检测。 我只掌握了基本知识,很快就会看到每像素和圆形,但是我怎样才能确定碰撞来自哪个方面,只是基本的方形碰撞检测,我试图把每个实体分成4个碰撞区域,但是这只是给了我穿墙而过的问题> <。 此外,是每像素颜色碰撞一个很好的方法来决定什么碰撞刚刚发生,或检查多个颜色的多个实体太重税每个周期?

按需加载MipMap图层

我听说在OGL和DX9中, D3DPOOL_MANAGED mipmap图层被按需拉到GPU内存。 如果我从mipmap的第4层拉出,该图层和所有较小的图层都被拉入到GPU内存中,而较大的mipmap图层则不会。 我试图通过创建一个需要比GPU有空间的纹理更多的场景来testing这个场景,但是从来没有足够接近任何物体,从而需要更大的mipmap。 在OGL中,我并没有遇到性能悬崖,而且我可以用gDebugger告诉我,我没有填充GPU内存。 在D3DPOOL_DEFAULT我实际上得到了DX9错误,导致GPU内存空间不足。 在如此高的抽象层次上,我不能确定地说出发生了什么事情。 但是我希望这里有人能够证实或否认我所听到的部分mipmap传闻,因为这会使我的testing变得有意义。

引用引擎资源

让我们假设为了争论,我们有一个资源引擎,并且我们使用OpenGL。 我的问题是引擎/游戏类应该如何引用资源。 轻量级的例子:其中,我们可能有一个纹理资源。 如果我们现在有一个使用这个资源的类,我们是否存储: 资源ID? 一个资源指针? 结果资源(例如纹理的GLID) 1为我们提供了最大的灵活性和整洁的function,例如可以在运行时重新加载所有纹理(在上下文被破坏之后),但每次使用时都会花费我们的查询,并且可能需要互斥锁。 另一个例子 – 一个字体资源,相同的问题 – 我们有一个ID,指针或直接字体类? 第三个例子,模型资源引用了它使用的纹理。 它是否存储ID,指针或直接链接? 如果答案在不同用途之间有所不同,是否有一套合理的规则可以用来决定在什么情况下应该使用什么? 编辑:我们在一个线程环境中讨论一个普遍的使用,繁重的任务(3D,stream媒体,资源组,内存管理)资源管理器。

在Android OpenGL游戏中加快加载png文件(用于纹理)

我的游戏有一些需要加载的纹理地图集(在我的XHDPI文件夹中,总共3.49MB),而在高端设备上,它们不需要很长时间就可以加载,但是在低端设备上,年龄。 一个例子是我的老三星Galaxy Ace使用MDPI文件夹的资源(总共:1.51MB),这需要16秒,我个人认为太长了。 原来,我为每个精灵都有一个单独的地图集,所以我在阅读后将大部分地图集合成了一个大的地图集,这可能会加快速度。 不幸的是,这对加载速度没有任何影响。 这是我如何加载我的PNG文件: atlas = BitmapFactory.decodeResource(view.getResources(), R.drawable.atlasimage); 作为默认的加载格式是ARG_B8888,我虽然我会尝试加载它们在RGB565,因为这应该是更快的加载和渲染以及占用较less的内存。 所以我试过这个: BMFOptions = new BitmapFactory.Options(); BMFOptions.inDither=false; BMFOptions.inPreferredConfig = Bitmap.Config.RGB_565; atlas = BitmapFactory.decodeResource(view.getResources(), R.drawable.atlasimage, BMF Options); 不幸的是,虽然这确实降低了图像的质量,但并没有减less加载时间,也不会产生明显的性能增加。 此外,(这可能是预期的),它不会减less我的应用程序的内存足迹。 所以我的问题是如何优化这个,使我的PNG加载更快(渲染速度增加不像负载速度那么重要)。

基于HD Sprite的游戏纹理组织和预算

我一直在做一个游戏,其特点是2个传统的animation可玩角色,高清背景,道具和额外的特效animation。 到目前为止,事情已经进行得很顺利,但是我对HDanimation图片和纹理图纹的使用有一些疑问。 第一: 确定现代二维游戏的总体纹理预算的一些最佳实践是什么? 到目前为止,我已经考虑了以下内容:字符本身占用大约256 x 256像素的屏幕空间,但是当然这个大小会根据字符的预期大小而变化。 我希望每个角色都有超过10 – 12个独特的animation序列。 根据animation长度和细节水平,每个animation的帧数也会有所不同。 假设每个animation大约有15帧,这意味着单个字符的纹理地图可能是围绕3072 x 3072px(或四舍五入到最接近的2的幂次)的东西。 两个字符显然需要在内存中加倍纹理大小。 基本上, 如何确定现代硬件的预算是否“可接受”? 我怎么知道在最坏的情况下,两个字符是否需要6144x6144px的内存空间? 其次: 把我们所有精灵的资源加载到一个巨大的地图集纹理上是否更好? 或为每个animation单独的纹理? 例如,可以使用“character_idle”和“character_attack”和“character_win”作为单独的资源加载,而不是一个大的“character.tga”文件。 一方面,如果每个animation都是独立的纹理资源,加载和管理都可能会变慢。 另一方面,如果你只需要有一个“空闲”的animation,你可以select只加载该animation。

如何获得使用州/地图等资源?

我现在正在管理我的资源的加载,我在脑海里有一个问题。 我的资源管理器如何知道我要加载的地图使用哪些精灵,声音等? 首先我想到了包含每个地图使用的精灵,声音等列表的文件。 像这样 Map0001.map //Map Data Map0001.sfx //List of Sounds Map0001.gfx //List of Sprites Map0001.tle //Tileset 这使x4更多的文件比地图,我不知道这是否有效,因为每个文件必须加载,它的内容分开阅读。 任何想法如何正确地做到这一点?