帧缓冲对象问题

5

你好,我正在为iPhone编写OpenGLES程序,但目前遇到了奇怪的framebuffer对象错误。

一开始,我参照了Simon Maurice的几个教程: http://web.me.com/smaurice/AppleCoder/Welcome.html

但后来我开始自己进行一些实验,然后再继续学习其他教程,但是我的实验遇到了问题。我尝试将EAGLView作为ViewController的视图,当基础代码最初来自教程时,这个过程非常顺利。

由于EAGLView是UIView的子类,因此这并不太难,所以在继续实验时,我想使用全新的环境。我在Xcode中创建了一个基于Windows的应用程序项目,并创建了一个新的EAGLView和一个ViewController,以执行与上一个项目相同的任务。

然而,在编译和运行后,视图变成了白色,控制台输出“failed to make complete framebuffer object %x”错误,这是在createFramebuffer过程中发生的。 (错误控制台输出:“GLController[2071:207] failed to make complete framebuffer object 0”)。

首先,我认为这是我的代码问题,因此我将先前项目的工作代码复制到新项目中,但仍然收到相同的错误。同时,我将新项目的代码移动到旧项目中,并编译成功。

我很困惑为什么相同的代码在新项目中无法正常工作,但是新代码在旧项目中可以正常工作。如果有人知道我缺少什么,那将不胜感激。

谢谢。

(还使用了几个来自Apple示例代码的EAGLViews,在新项目中出现了相同的错误,但在附加了ViewController的旧项目中没有出现。)


如果没有经过与您相同的步骤,我们很难回答这个问题。您可能需要告诉我们在调用glCheckFramebufferStatusOES时返回了哪个结果代码。 - prideout
错误控制台输出为0。步骤:
  1. 从Xcode创建一个新项目(在此情况下基于Windows的应用程序)。
  2. 创建一个新的UIViewController并将其链接到窗口子视图。
  3. 为了进行受控测试,从教程或简单示例代码中获取一个EAGLView。
  4. 将UIViewController的视图设置为EAGLView。
  5. (添加所需的框架。)构建并运行。
即使没有UIViewController,问题也会发生,但上述步骤说明了我正在尝试实现的内容。不确定为什么不能通过新项目完成,这是我需要帮助解决的主要问题。
- Wesux
3个回答

7
在没有更多关于你所做的信息的情况下,我猜测你是否是通过IB实例化了你的EAGLView(因此经过 -initWithCoder: ),还是通过编程方式(-initWithFrame:)?
如果你查看EAGLView.m,你会发现只有 -initWithCoder:才执行所需的实际初始化。将该初始化代码迁移到共享(或仅-initWithFrame:)初始化器非常容易。

谢谢,我也遇到了这个问题。 - blueberryfields

4

在尝试将EAGLView设置为viewController的视图时,我遇到了类似的问题。 相反,将viewController的视图属性附加到标准UIView上。 然后,在视图成功加载后(可能在viewController的viewDidLoad方法中),实例化一个EAGLView并将其添加为subview到viewController.view。


0

从上一个iPhone SDK到当前的SDK,opengles模板程序发生了变化。现在有支持代码可供选择ES2.0和ES1.1之间的版本。

请注意。


我也考虑过这个问题,使用了新的OpenGLES模板进行测试,但它仍然无法正常工作。除非将所有EAGLView和相关类(如ES1和ES2 Renderer)从样本模板中复制到旧项目中,否则无法正常工作。似乎反过来则不行(即将ViewController类移到新的SDK OpenGLES模板中)。 - Wesux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接