绑定第二个顶点缓冲区似乎破坏了我的第一个顶点缓冲区,OpenGL OES ios 5.1

2024-03-21

我正在创建两个不同的顶点缓冲区,使用两个不同的着色器来渲染它们。一旦我绑定第二个顶点缓冲区,我停放在第一个顶点缓冲区中的数据似乎已损坏或丢失。

如果我只生成并绘制一个顶点缓冲区,如下所示:

glGenBuffers( 1, &vb1 ) ;
glBindBuffer( GL_ARRAY_BUFFER, vb1 ) ;

// fill it..
glBufferData( .. )

然后,在draw()循环中,

glUseProgram( shader1 ) ;
glBindBuffer( vb1 ) ; // make sure it is bound
glDrawArrays( ... )   // draw it

然后它工作正常,没有问题,没有错误(我是 glGettingLastError() 之后everygl* 调用,所以看来这段代码完全没问题)

现在如果我如此生成并绑定第二个顶点缓冲区,在第一个顶点缓冲区生成并绑定后的任何时间,

// ran in init() -- then previously working code in draw() is broken
glGenBuffers( 1, &vb2 ) ;              // ok.. no problems with this line
glBindBuffer( GL_ARRAY_BUFFER, vb2 ) ; // spoils data in vb1?

我一打电话glBindBuffer有了这个新生成的vb2缓冲区,看来数据在vb1被完全倾倒或丢失。关于绘画的尝试vb1 (not vb2!),我遇到了这个崩溃:

我什至用以下内容填充了数组GL_STATIC_DRAW.

我不明白,我认为这些顶点缓冲区应该保留数据,即使创建并初始化了另一个顶点缓冲区? .. 我究竟做错了什么?


我发现这个问题的答案非常微妙且难以找到。

我以为我不需要标准示例使用的顶点数组声明 https://stackoverflow.com/questions/12428473/in-the-stock-opengl-es-app-on-ios-5-1-are-they-really-using-the-vertex-arrays-t,你可以看到我在问题中遗漏了它们。但事实证明使用顶点数组对象 https://stackoverflow.com/a/12429065/111307对于正确绑定索引至关重要。

例如,

// Make vertex array OBJECT, _this does not store any data!_
// A "vertex array object" is a bit like a display list in
// that it will just remember and repeat the function calls you make,
// with the values you make them with.
glGenVertexArraysOES( 1, &va ) ; // make vertex array OBJECT. NOT used
// to store data..

// Bind the vertex array
glBindVertexArrayOES( va ) ; // "start recording the calls I make.."

// Make a buffer for the vertex array (place to store the data)
glGenBuffers( 1, &vb ) ;     // make the vertex BUFFER (used to
// store the actual data)

// Make the vertex array buffer active
glBindBuffer( GL_ARRAY_BUFFER, vb ) ;

glEnableVertexAttribArray( ... ) ;  // REMEMBERED IN VAO (vertex array object)
glVertexAttribPointer( ... ) ;      // REMEMBERED IN VAO

glBufferData( .. ) ; // send data down to gpu, not remembered by vao

// "Stop remembering" calls to glBindBuffer( .. ) and glEnableVertexAttribArray( .. )
glBindVertexArrayOES( 0 ) ; // "stop recording"

在绘制时,只需:

glBindVertexArrayOES( va ) ; // runs ALL your glEnableVertexAttribArray() calls,
// as well as your glBindBuffer( .. ) call,

// now all that's left to do is draw
glDrawArrays( glDrawingStyle, 0, vertexCount );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绑定第二个顶点缓冲区似乎破坏了我的第一个顶点缓冲区,OpenGL OES ios 5.1 的相关文章

  • 如何将预编译头文件添加到我的 ios 项目中?

    我希望创建一个预编译头文件 以避免在项目中的每个头文件中包含相同的调试和跟踪库 我创建了一个名为 Prefix pch 的文件 ifdef OBJC import Blah h import Blarg h endif 并将其添加到项目中
  • 使用 Objective C 将 html 字符串插入 sqlite 数据库

    我正在使用下面的代码片段将 html 字符串插入 sqlite 数据库 我的代码工作正常 但是当我检索相同的 html 字符串并在 Web 视图中显示时 它不会呈现 一些数据正在被修改 任何人都可以帮助如何插入长 html 字符串存入数据库
  • 如何获取特定 GLSurfaceView 的 EGL 显示/上下文

    这是后续我原来的问题 https stackoverflow com questions 6509588 egl vs gles 2 0 on android e g java 这可能太宽泛 而这个可能太具体 但也许我可以应用牛顿法 我的具
  • UISearchController 在调用时更改状态栏颜色

    我的应用程序中有以下代码 特别是在viewDidLoad 这设置了我的UISearchController self searchController UISearchController alloc initWithSearchResul
  • 与桌面浏览器相比,移动浏览器有多强大? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取保存到照片库的图像的 PHAsset/localIdentifier

    我在用着UIImageWriteToSavedPhotosAlbum https www hackingwithswift com example code media uiimagewritetosavedphotosalbum how
  • 越狱后,iOS应用程序会以root权限运行吗?

    一旦 iOS 设备越狱 我们就可以构建越狱应用程序 使用 theos 并将其安装在 Applications预加载应用程序以 root 权限运行的目录 如果应用程序是使用 Xcode 构建的 一旦安装 它就会进入 private var m
  • 添加 UITabBarController 时出错

    我在用着单点触控C 编写具有多个不同屏幕的 iPhone 应用程序 为了简单起见 我将仅描述导致我遇到问题的控制器的几个屏幕 我遇到的问题是 当我创建一个继承自的类时 我收到此错误消息UITabBar控制器 应用程序窗口应该有一个根视图控制
  • 为什么一个崩溃日志具有象征意义,而不是另一个?

    我在 XCode Organizer 中有两个来自 iPhone 应用程序的崩溃日志 两者相隔 20 分钟内发生 在同一台设备上运行相同版本的应用程序 其中一个已被象征化 而另一个则没有 无符号日志具有类型和代码 Exception Typ
  • 如何解决这个错误? - 类“ViewController”没有初始化程序

    我创造了UILabel快速编程 但它给了我以下错误 类 ViewController 没有初始值设定项 Code class ViewController UIViewController let lbl LastName UILabel
  • Xcode UI 测试 UIKeyInput typeText

    在 Xcode UI 测试期间 我该如何insertText for a UIView符合UIKeyInput 我创建了一个CodeInputView https github com acani CodeInputView符合UIKeyI
  • Objective C 中最好的多线程方法?

    我正在开发一个 iPad 应用程序 目前正在努力寻找多线程的最佳方法 让我用一个简化的例子来说明这一点 我有一个包含 2 个子视图的视图 一个目录选择器和一个包含所选目录中所有图像缩略图的图库 由于 下载 和生成这些缩略图可能需要相当长的时
  • GMSMarker 不透明度动画不重复

    我正在尝试使带有自定义图标的 GMSMarker 以衰减的动画不透明度闪烁 动画应该重复几次 但事实并非如此 它只执行一次转换 然后就停止了 这种情况仅在对不透明度属性进行动画处理时发生 在对其他属性进行动画处理时效果很好 这是代码 GMS
  • AVAudioPlayer 在 iPhone 5 中无法工作

    我正在开发一个 iPhone 应用程序 在这个应用程序中 我使用 AVAudioPlayer 来播放音频 这是我播放声音的代码 NSString resourcePath NSBundle mainBundle resourcePath r
  • iOS 版本中的 Twitter 个人资料屏幕是如何构建的?

    我想知道 Twitter 是如何实现其个人资料屏幕的 起初我以为它是一个带有标题 个人资料信息 和部分标题 用于选择推文 媒体 收藏夹的分段控件 的表格视图 这对我来说是有意义的 因为当用户向下滚动时 配置文件信息消失 但分段控件保留 而这
  • 越狱的 iOS 从后台应用程序截图

    我正在为自己构建一个实用程序应用程序 当该实用程序在后台运行时 它可以截取前台运行的任何内容的屏幕截图 该实用程序将在越狱设备上运行 因此它可以访问私有 API 而不受沙箱的限制 由于实用程序应用程序在后台运行 作为守护程序或使用后台程序
  • 在 UIView 中的贝塞尔曲线路径内像草图颜色一样绘制/绘制

    我正在 UIView 上的 UIBezierPath 的帮助下绘制形状图层 CAShapeLayer pathLayer CAShapeLayer layer pathLayer frame CGRectMake view frame or
  • 填充占位符文本 ios

    我想让占位符文本显示在文本字段的中间 填充占位符文本 占位符文本的大小也需要增加 我的代码如下 我该如何解决这个问题 UITextField textField UITextField alloc initWithFrame CGRectM
  • 如何设置 NSUserDefault Key 的初始值?

    我想为 NSUserDefault 键设置一些初始值 以便应用程序的第一次运行具有一些合理的初始设置 我以为我在应用程序包 plist 中遇到了一种简单的方法来执行此操作 但现在我找不到它 有任何想法吗 您应该使用registerDefau
  • 使用 'vendored_frameworks' 和 'source_files' 对于 cocoapod 使用 'use_frameworks!'

    我正在构建一个 cocoapod 它基本上包含一个框架 私有源 和一个依赖于该框架的视图 开源 所有这些都是用 Objective C 制作的 在 podspec 中我有以下几行 spec vendored frameworks MyPod

随机推荐