草庐IT

textures

全部标签

iphone - OpenGL ES 不会删除我在内存中的纹理

我目前正在开发一个使用OpenGLES1.0渲染一些基本纹理的iOS应用程序(iPad和iPhone)。我使用map集来存储和呈现我的纹理。我的主图集相对较大(2000x2000),但我的内部算法加载纹理并将其调整为2048x2048,因为OpenGLES仅接受2倍大小纹理的幂。我可以绘制瓷砖,这边一切都很好。每次尝试加载和卸载(销毁)纹理时,我都会面临严重的内存泄漏。这应该在最终版本中发生,但我需要确保我的加载和卸载都很好。在内存中,纹理占用2048x2048x4(RGBA)字节=16MB大约。这是一个巨大的字节数,所以你明白这个问题对我来说很烦人(iOS会在几分钟后终止应用程序..

swift - 在 Metal 中复制 OpenGL 混合

我一直致力于将使用固定功能管道编写的开源游戏移植到Metal。我已经能够重做所有的投影变换并在哪里绘制它们应该使用正确的纹理和顶点信息绘制的东西,但是我在让片段着色器到匹配OpenGL混合,纹理看起来正确,但混合和亮度关闭。这是我要匹配的内容:这是它当前的渲染方式:我可以看到控制GL混合的代码如下所示:glShadeModel(GL_SMOOTH);glEnable(GL_ALPHA_TEST);glAlphaFunc(GL_GREATER,0.0f);glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);glEnable(GL_BLEND)

ios - ASyncDisplayKit - 一个容器中的多个节点

是否可以在一个容器内有多个纹理节点?例如,我需要在屏幕的上半部分有一个ASTableNode,在其下方有一个带有UIViewblock的ASDisplayNode。我尝试过使用ASViewController和layoutSpecThatFits返回ASSTackLayoutSpec-但两个子节点都没有出现在View上。谢谢! 最佳答案 是的,可以将ASTableNode和ASDisplayNode放在同一个堆栈中。使用水平堆栈布局,将节点的flexGrow属性设置为相等的值(以便它们均匀增长)并在您的节点上将automatical

ios - SpriteKit 纹理 "scaling"各不相同

完全相同的纹理,不同的结果这里是SKSpriteNode和SKShapeNode从纹理图集获得相同的纹理。SKSpriteNode在右边,它做正确的事。SKShapeNode在左边,做错事了。拜托,我做错了什么?这是代码...overridefuncdidMove(toview:SKView){letmyTextureAtlas=SKTextureAtlas(named:"demoArt")letarrayOfFileNames=myTextureAtlas.textureNamesletmyTexture=myTextureAtlas.textureNamed(arrayOfFile

Swift Metal 将 bgra8Unorm 纹理保存到 PNG 文件

我有一个输出纹理的内核,它是一个有效的MTLTexture对象。我想将它保存到项目工作目录中的png文件中。应该怎么做?纹理格式为.bgra8Unorm,目标输出格式为PNG。纹理存储在MTLTexture对象中。编辑:我在macOSXCode上。 最佳答案 如果您的应用在macOS上使用Metal,您需要做的第一件事就是确保您的纹理数据可以被CPU读取。如果内核正在写入的纹理处于.private存储模式,这意味着您需要从纹理blit(复制)到.managed中的另一个纹理模式。如果您的纹理开始于.managed存储,您可能需要创建

ios - 在不改变大小的情况下改变 skspritenode 的纹理

当我更改spritenode的纹理时,大小会自动更改为纹理图像(png)的原始大小。我怎样才能避免这种情况?我的代码:varbomba=SKSpriteNode(imageNamed:"bomba2")varactionbomba=SKAction()bomba.size=CGSizeMake(frame2.size.width/18,frame2.size.width/18)letbomba3=SKTexture(imageNamed:"bomba3.png")actionbomba.addObject(SKAction.moveBy(CGVectorMake(0,frame.siz

swift - 如何在 Swift 2.1 中使用滑动/点击(动态)为 3D 对象着色

我必须构建一个可以使用各种手势为3D对象着色的Swift应用程序。我有一个作为SceneKit对象导入的Collada文件。我找不到用水龙头给它上色的方法。我尝试从WWDC示例转换Obj-C,但它对我不起作用。我尝试在3D对象上应用SpriteKit作为纹理,但结果是这样:当用户点击屏幕时,应用程序应获取3D对象的纹理坐标,然后在该点添加一个SpriteKit节点。之前:之后:我不知道为什么纹理会以这种方式爆炸。谢谢! 最佳答案 SpriteKit场景坐标系统并不像图像那样映射到纹理坐标。图像中的像素坐标具有向下增加的y轴;在Spr

ios - 预加载 Sprite 套件纹理

所以我正在阅读有关最佳sprite工具包实践的apple文档。我遇到了这个:例如,如果您的游戏在其所有游戏玩法中使用相同的纹理,您可以创建一个在启动时运行一次的特殊加载类。您执行一次加载纹理的工作,然后将它们留在内存中。如果场景对象被删除并重新创建以重新开始游戏,则不需要重新加载纹理。这将显着提高我的应用程序的性能。有人可以指出正确的方向,告诉我如何实现这一目标吗?我假设我会调用一个函数来在我的ViewController中加载纹理?然后访问该纹理图集? 最佳答案 问题是,你真的想像那样缓存资源吗?不能说我曾经发现需要那种性质的东西

Cesium 1.02.0 及以上版本下自定义材质报错:[Cesium WebGL] Fragment shader compile log: ERROR: 0:8: ‘texture2D‘

Cesium1.02.0及以上版本下自定义材质报错:[CesiumWebGL]Fragmentshadercompilelog:ERROR:0:8:'texture2D'报错原因解决方法完整代码在线示例2023年4月19日更新—搞了一个Cesium镜像,欢迎使用:沙盒示例和API在看到Cesium官方更新的日志,最新版(1.103.0)支持平滑缩放,于是升级尝试一下。结果偶然发现,之前写的墙体动态效果报错,经过调试,找到原因,Cesium新版对WebGL2支持有变化,这里记录一下。本文包括,报错原因、解决方法、在线示例三部分。报错原因报错原因:Cesium自1.102.0开始,为了更好支持跨平

ios - "Reached the max number of texture atlases, can not allocate more"使用谷歌地图

我正在构建一个使用Googlemap和大量叠加层的应用程序,似乎当我尝试加载大量叠加层时它停止并向我提供"((null))wasfalse:Reached纹理图集的最大数量,不能分配更多。”我只是通过这种方式添加图像作为叠加层:...if(image!=nil){letimage:CGImage=(image?.cgImage)!leticon=UIImage(cgImage:image)letoverlay=GMSGroundOverlay(bounds:overlayBounds,icon:icon)overlay.bearing=0overlay.map=mapoverlay.z