问题标签 [opengl-es]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2933 浏览

objective-c - 将 iPhone openGLES 应用程序移植到 OSX?

为 iPhone 开发是我对 Objective-c 的第一次体验,也是对 xcode 的第一次深入体验。使用 openGL 将 openGLES iPhone 应用程序移植到 OSX 桌面会有多困难?我不是在问用户界面——显然桌面上没有可可触摸 UI。我专门询问应用程序委托和 openGLES 层。有什么重大障碍吗?是否像在 cocoa 类型的项目中简单地创建一个新的应用程序委托一样简单?

0 投票
5 回答
20138 浏览

iphone - 了解 iPhone 上的内存消耗

我正在使用 OpenGL ES 开发一个 2D iPhone 游戏,我一直在达到 24 MB 内存限制——我的应用程序不断崩溃并显示错误代码 101。我非常努力地寻找内存的去向,但 Instruments 中的数字仍然很多比我预期的要大。

我使用 Memory Monitor、Object Alloc、Leaks 和 OpenGL ES 工具运行应用程序。当应用程序被加载时,可用物理内存从 37 MB 下降到 23 MB,Object Alloc 稳定在 7 MB 左右,Leaks 显示两个或三个泄漏大小为几个字节,Gart 对象大小约为 5 MB,Memory Monitor 说应用程序占用大约 14 MB 的实际内存。我很困惑内存去了哪里——当我深入研究对象分配时,大部分内存都在纹理中,正如我所期望的那样。但是我自己的纹理分配计数器和 Gart 对象大小都同意纹理应该占用大约 5 MB。

我不知道分配任何其他值得一提的东西,并且 Object Alloc 同意。记忆去哪儿了?(如果这还不够,我很乐意提供更多细节。)


更新:我真的试图找到我可以分配这么多内存的地方,但没有结果。让我疯狂的是对象分配(~7 MB)和内存监视器(~14 MB)显示的实际内存使用量之间的差异。即使我忘记了巨大的泄漏或大块内存,它们仍然应该出现在 Object Allocations中,不是吗?

我已经尝试过通常的 嫌疑人,即。与UIImage它的缓存,但这并没有帮助。有没有办法逐行跟踪内存使用“调试器风格”,观察每条语句对内存使用的影响?


到目前为止我发现了什么:

  1. 我真的使用那么多内存。衡量真正的内存消耗并不容易,但是经过大量计算后,我认为内存消耗确实很高。我的错。

  2. 我发现没有简单的方法来测量使用的内存。内存监视器的数字是准确的(这些是真正重要的数字),但内存监视器无法告诉您内存的确切位置。Object Alloc 工具对于跟踪实际内存使用情况几乎毫无用处。当我创建纹理时,分配的内存计数器会上升一段时间(将纹理读入内存),然后下降(将纹理数据传递给 OpenGL,释放)。这没关系,但并不总是会发生——有时即使在纹理被传递到 OpenGL 并从“我的”内存中释放之后,内存使用率仍然很高。这意味着 Object Alloc 工具显示的分配内存总量小于实际总内存消耗,但大于实际消耗减去纹理 ( real – textures < object alloc < real)。去搞清楚。

  3. 我误读了编程指南。24 MB 的内存限制适用于纹理和表面,而不是整个应用程序。实际的红线稍远一些,但我找不到任何硬数字。共识是 25-30 MB 是上限。

  4. 当系统内存不足时,它开始发送内存警告。我几乎没有什么可释放的,但其他应用程序确实会将一些内存释放回系统,尤其是 Safari(它似乎正在缓存网站)。当内存监视器中显示的可用内存变为零时,系统开始查杀。

我不得不硬着头皮重写代码的某些部分以提高内存效率,但我可能仍在推动它。如果我要设计另一个游戏,我肯定会想到一些资源分页。对于当前的游戏,这非常困难,因为它一直在运动,并且加载纹理会妨碍,即使在另一个线程中完成。我会对其他人如何解决这个问题很感兴趣。

请注意,这些只是我的观点,不必太准确。如果我发现有关此主题的更多信息,我将更新该问题。我会保持这个问题的开放性,以防了解这个问题的人愿意回答,因为这些都是比其他任何东西更多的解决方法和猜测。

0 投票
4 回答
4106 浏览

iphone - 在 iPhone 应用程序中直接在屏幕上绘制单个像素的最快方法是什么?

我正在寻找一种最快的方法,可以在性能非常好的 iPhone 应用程序中将数千个单独计算的像素直接绘制到屏幕上。

0 投票
1 回答
879 浏览

iphone - OpenGL ES 可滚动列表框裁剪问题

我正在尝试在 OpenGl ES(用于 iPhone/iTouch)中创建一个通用列表框,并且在裁剪 ListBoxItems 时遇到了一些难题。每个 ListBoxItem 对象都知道如何绘制自己。我正在制作的 ListBox 只会一个接一个地绘制。但是如果项目的数量大于 ListBox 怎么办?我需要能够上下滚动(不是问题)ListBoxItems。这将是一个平滑滚动,因此有时 ListBoxItem 将有一半(或更多或更少)可见,而另一部分将被隐藏,因为它位于 ListBox 区域“外部”。当我制作我的 ListBox 小部件时,如何让这个剪辑正常工作?

感谢您提供的任何帮助或链接,

〜埃里克

0 投票
5 回答
60348 浏览

iphone - 想要在 iPhone 上显示 3D 模型:如何开始?

我想在 iPhone 上显示和旋转单个 3D 模型,最好是纹理模型。不必放大和缩小,或有背景,或任何东西。

我有以下内容:

  • 一部 iPhone
  • 一台MacBook
  • iPhone SDK
  • 搅拌机

我的知识库:

  • 我可以在各种 3D 程序中制作 3D 模型(我最喜欢 3D Studio Max,我曾经上过一门课程,但我用过其他的)
  • 多年前程序编程的一般知识(QuickBasic - 我老了!)
  • 初学者通过简单的 Java 和 C# 教程了解面向对象编程的知识(Head Start C# 书和我妻子的使用 Java 的 OOP 课程介绍)
  • 我已经设法显示了一个 3D 纹理模型并使用 C# 中的教程旋转它我从网上下了(我不只是复制和粘贴,我基本上了解它是如何工作的)和 XNA 游戏开发库,使用 Visual Studio视窗。

我不知道的是:

  • 关于 Objective C
  • iPhone 显然使用的关于 OpenGL 或 OpenGL ES 的任何信息
  • 关于 XCode 的一切

我的主要问题是我不知道从哪里开始!我发现的所有 iPhone 书籍似乎都是关于创建 GUI 应用程序,而不是 OpenGL 应用程序。我找到了一本 OpenGL 书,但我不知道有多少(如果有的话)适用于 iPhone 开发。而且我发现 Objective C 的语法有些混乱,有奇怪的嵌套方法命名、没有意义的“id”之类的东西,以及我必须进行手动内存管理的可怕想法。

最好的起点在哪里?我找不到任何此类事情的教程,但也许我的 Google-Fu 很弱。或者我应该从学习Objective C开始?我知道像 Aaron Hillgrass 之类的书,但我也读到它们已经过时,并且大部分示例代码在 iPhone SDK 上不起作用,而且它似乎面向模型-视图-控制器范式,而后者并不适用似乎适合 3D 应用程序。

基本上我对我的第一步应该是什么感到困惑。

0 投票
1 回答
577 浏览

cocoa-touch - 开发一个基于 NavigationBar 的应用程序,包括一个 Open GL 视图:如何?

我的问题从一个问题开始:

我在 Xcode 中开始了一个项目:一个基于导航栏的项目(带有一个 TableView)。然后我通过 IB 或以编程方式添加了一些视图……效果很好。

然后,我决定编写自己的 ViewClass,继承自 UIView,称为 OpenGlView(基于 XCode 中 Basic OpenGlES 项目提供的视图)及其OpenGlViewController(继承自UIViewController)。

这工作正常,直到我尝试将视图控制器推入我的导航栏:然后我收到一个"EXC__ BAD __ACCESS"。我不明白为什么除了用于显示 OpenGL 内容的视图之外,任何视图都可以...

而且我实际上不知道如何设法开发基于 NavBar 的应用程序,包括显示 OpenGL 内容的视图……知道吗?

(我还尝试将之前添加到 NavigationBarOpenGlView的基本的子视图添加为子视图,但我收到了同样的错误)。UIView

在 RootController 中:

在 OpenGLViewController 中:

0 投票
6 回答
15104 浏览

iphone - OpenGL ES/iPhone 的性能和背景图像

我正在使用 OpenGL ES 为 iPhone 开发 2D 游戏,我想使用 320x480 位图图像作为持久背景。

我的第一个想法是创建一个 320x480 的四边形,然后在其上映射一个代表背景的纹理。所以...我创建了一个 512x512 的纹理,上面有一个 320x480 的图像。然后我将其映射到 320x480 四边形。

我每帧都绘制这个背景,然后在它上面绘制动画精灵。除了所有这些对象(背景+精灵)的绘制太慢之外,这很好用。

我做了一些测试,发现我的减速是在像素管道中。毫不奇怪,大背景图片是罪魁祸首。为了证明这一点,我删除了背景绘制,其他一切都渲染得非常快。

我正在寻找有关如何保持我的背景并提高绩效的建议。

这里有更多信息:

1)我目前正在模拟器上进行测试(仍在等待 Apple 获得许可)

2)背景是压缩到128k的PVR纹理

3)我曾希望有一种方法可以将此背景缓存到颜色缓冲区中,但没有任何运气。这可能是由于我对 OpenGL ES 缺乏经验,或者这可能是一个愚蠢的想法,行不通:)

4)我意识到整个背景并不总是需要刷新,只是被移动精灵绘制的部分。我开始研究刷新(根据需要)背景部分的技术,无论是作为单独的纹理还是使用剪刀框,但这似乎不够优雅。

任何提示/建议将不胜感激......

谢谢你。

0 投票
3 回答
6033 浏览

iphone - OpenGL ES 中带有 8 位 Alpha 通道的调色板纹理

我可以在 OpenGL ES 中获得带有 RGB 调色板和 8 位 alpha 通道的调色板纹理吗?(我的目标是 iPhone OpenGL ES 实现。)在查看 OpenGL 文档后,在我看来,调色板中支持带有 alpha 的调色板纹理,即。纹理包含 8 位索引到具有 256 种 RGBA 颜色的调色板中。我想要一个包含 8 位索引到 RGB 调色板独立的 8 位 alpha 通道的纹理。(我试图节省内存,32 位 RGBA 纹理是相当奢侈的。)或者这应该是手工完成的,即。通过创建两个独立的纹理,一个用于颜色,一个用于 alpha 贴图,然后手动组合它们?

0 投票
5 回答
8567 浏览

iphone - 为什么这个 OpenGL ES 代码在 iPhone 上运行缓慢?

我在学习 OpenGL ES 时稍微修改了 iPhone SDK 的 GLSprite 示例,结果发现速度很慢。即使在模拟器中(硬件最差)所以我一定做错了,因为它只有 400 个带纹理的三角形。

每次触摸屏幕或移动屏幕上的手指时都会调用 drawView,并将 tx,ty 设置为发生触摸的 x,y 坐标。

我也尝试过使用 GLBuffer,当翻译是预先生成的并且只有一个 DrawArray 但提供了相同的性能(~4 FPS)。

===编辑===

同时我已经修改了这个,以便使用更小的四边形(尺寸:34x20)并且更少的重叠。大约 400 个四边形 -> 800 个三角形分布在整个屏幕上。纹理大小为 512x512 atlas 和 RGBA_8888,而纹理坐标为浮点数。该代码在 API 效率方面非常难看:有两个 MatrixMode 更改以及两个加载和两个平移,然后是三角形带(四边形)的绘制数组。现在这会产生 ~45 FPS。

0 投票
1 回答
2853 浏览

iphone - 图像上的 Quartz 2D/OpenGLES 几何失真(最好使用 CGImage)

实现捏/鱼眼/等几何扭曲的首选方法是什么?使用 iPhone SDK?我知道 OSX 的核心图像库内置了所有这些类型的过滤器,但不适用于 iPhone SDK。

给定原始源位图数据,我可以在特定位置和半径处创建置换贴图,但我不确定如何将此位图数据应用为我的 CGImage 上的转换。

这不是仿射变换,因为线在失真/等区域周围不再平行。

是否可以使用 CGImage 或者我需要使用 OpenGLES 来做到这一点?

谢谢