1

最近,我一直在尝试学习如何使用 OpenGL ES 2.0 和 GLKit 来创建简单的 2D 游戏。我一直在关注Ray Wenderlich的本教程,到目前为止它非常有帮助。但是,在对我的项目(和他的)进行分析后,我发现GLKBaseEffect's prepareToDraw:(特别是GLKShaderBlockNode's copyWithZone)到处都在泄漏——顺便说一句,我正在使用 ARC。在搜索了很多之后,这似乎是一个错误GLKBaseEffect,我对此无能为力。这是真的?我发现建议的唯一解决方案是GLKBaseEffect完全报废。

如果是这种情况,我必须滚动我自己的自定义顶点和片段着色器。但是,我不知道该怎么做。对于创建自定义着色器和调整上述教程中的代码以改用这些代码,我将不胜感激。

非常感谢您的宝贵时间。:)

4

2 回答 2

1

对于初学者,在 XCode 中执行 File->New Project 并选择“OpenGL Game”。

如果你选择运行它,你会得到 2 个相互环绕的立方体。

看看 shader.fsh 和 shader.vsh。在 viewcontroller.m 中,检查 compilerShader、linkProgram 和 validateProgram(它们编译着色器)。

检查该示例应用程序应该足以让您“了解如何让着色器运行”,然后搜索一些 OpenGL ES 2.0 着色器教程或查看 Apple 代码库中的一些示例应用程序。

注意:从 Apple 内置的简单效果到着色器是一个非常宽的“峡谷”。

于 2013-01-13T05:13:29.553 回答
1

好吧,经过相当多的拖延,我决定硬着头皮去做。泄漏现在已经消失了,尽管我花了一段时间才让它工作。我通读了OpenGL ES 2.0 for iPhone 第 4 章,了解了顶点和片段着色器以及如何编译和链接它们。在了解了它的工作原理后,我将作者的GLProgram帮助类放入我的项目中,以处理所有样板文件并快速开始工作。然后,我创建了两个着色器,与此处找到的几乎相同。

我按照他的说明获取属性和统一位置并将它们存储在一个结构中,并在初始化时将它们全部传递给我的精灵对象。然后,当需要渲染时,我传递了我的属性的所有信息,就像我之前使用GLKBaseEffect;时所做的那样。唯一的区别(除了手动将纹理绑定到纹理单元之外)是我必须自己传入modelviewMatrixprojectionMatrix制服,而不是设置GLKBaseEffect属性。

于 2013-01-17T22:39:11.063 回答