• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iOS GLKit 并返回默认帧缓冲区

[复制链接]
菜鸟教程小白 发表于 2022-12-12 21:12:16 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在运行 XCode 为 iOS 的 OpenGL 项目创建的样板 OpenGL 示例代码。这会设置一个简单的 ViewController 并使用 GLKit 来处理其余的工作。

应用程序的所有更新/绘制功能都在 C++ 中。它是跨平台的。

有很多帧缓冲区的创建正在进行。绘制阶段渲染到几个帧缓冲区,然后尝试将其设置回默认帧缓冲区。

glBindFramebuffer(GL_FRAMEBUFFER, 0);

这会生成一个 GL_INVALID_ENUM。仅限 iOS。

我完全不知道为什么。该代码在除 iOS 以外的所有主要平台上运行良好。我想责怪 GLKit。有没有不使用 GLKit 的 iOS OpenGL 设置示例?

更新

下面的代码片段让我看到了 GLKit 使用的默认帧缓冲区。由于某种原因,它显示为“2”。果然,如果我在所有 glBindFrameBuffer 调用中使用“2”,它就可以工作。这非常令人沮丧。

[view bindDrawable ];

GLint defaultFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO);
LOGI("DEFAULT FBO: %d", defaultFBO);  

究竟是什么原因导致 GLKit 不在 0 处生成其内部帧缓冲区?这是 OpenGL 的所有其他实现使用的语义,0 是默认的 FBO。



Best Answer-推荐答案


在 iOS 上没有默认的帧缓冲区。参见 Framebuffer Objects are the Only Rendering Target on iOS .我不太了解 GLKit,但在 iOS 上要在屏幕上渲染某些内容,您需要创建帧缓冲区,并将其附加到渲染缓冲区,并通知核心动画层此渲染缓冲区将是要绘制的“屏幕”或“默认帧缓冲区”至。意思是 - 你将绘制到这个帧缓冲区的所有东西都会出现在屏幕上。参见 Rendering to a Core Animation Layer .

关于iOS GLKit 并返回默认帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10761902/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap