问题标签 [opengl-es-3.0]
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.
ios - glMapBufferRange 忽略 GL_MAP_UNSYNCHRONIZED_BIT
我正在尝试解决一个关于glMapBufferRange
. glMapBufferRange
我们的代码在运行 iOS 6.x 的 iPad4 上使用 VBO 进行流式绘图。模式类似于:
Map(第一个子区域)->向第一个子区域写入数据->取消映射->映射(第二个子区域)->向第二个子区域写入数据->UnMap...如果缓冲区已满,则绘制缓冲区并重新启动以从头开始填充数据。
仪器说有一些 GPU 等待glMapBufferRange
。我查看了我们的代码并参考了 API 手册。我将访问标志设置glMapBufferRange
为GL_MAP_WRITE_BIT | GL_MAP_INVALIDATA_RANGE_BIT | GL_MAP_UNSYNCHRONIZED_BIT
。但是,GL_MAP_UNSYNCHRONIZED_BIT
根据仪器被忽略。无论GL_MAP_UNSYNCHRONIZED_BIT
是否设置,性能都是一样的。
有谁知道为什么?有什么建议可以改进这个用例吗?
谢谢,华莱士
opengl-es - 使用 OpenGL ES 3.0 从顶点着色器访问 VBO
我有四个 VBO(BufferA、BufferB、BufferC 和 BufferD)和两个程序(program1 和 program2)。逻辑的主要步骤是:
问题:我需要做什么才能从 program2 访问 BufferB?我可以以某种方式将 BufferB 绑定为纹理并使用 texelfetch 读取它吗?
我正在使用 iOS 7 和 OpenGL es 3.0
opengl-es - OpenGL ES 3.0 上 32 位整数或浮点纹理的纹理过滤
我有一个大的 32 位整数纹理 ( R32I
),我需要对其执行双线性过滤。我天真地以为我只需要在我的纹理上启用过滤,但似乎整个事情并不那么简单。OpenGL ES 3.0 规范在第129-131 页上有一个纹理格式列表,该R32I
格式未标记为纹理可过滤。所有整数格式似乎都是不可过滤的,大于 16 位的浮点格式也是如此。我可以同时使用整数或浮点格式,但 16 位对我的数据来说根本不够精确。
现在我当然可以在着色器中手动执行过滤,但我想知道是否有 GPU 可以实际过滤这些格式,以及我如何检测 GPU 是否能够做到这一点?
在着色器中手动执行双线性过滤是否存在严重的性能缺陷?或者仅仅是方便,那么我就没有理由尝试让自动过滤为我的纹理工作。
ios - 如何在运行时在任何给定的 iOS 设备上获得支持的 OpenGL ES 版本?
我正在寻找一种方法来获取支持的 OpenGL ES 版本列表或运行时 iOS 设备上可用的最大 OpenGL ES 版本?
理想情况下,解决方案不得:
- 不检查特定的设备型号
PS:项目设置:Base SDK = Latest iOS (7.0) 部署目标:4.3
header - 通过其标头确定给定 astc 压缩图像的内部格式?
我正在编写一个基于 EbGL 的 HTML 应用程序,该应用程序使用 ASTC(自适应可伸缩纹理压缩)压缩纹理加载到我的三角形上。我想知道是否存在通过解析 ASTC 来了解压缩 ASTC 图像的内部格式(在我的情况下可能位于远程 Web 服务器上)是“线性”还是“srgb 编码”的方法标题。然后我可以使用internalFormat
获得的信息将我的 ASTC 纹理传递给glCompressedTexImage2D()
. 换句话说,例如。我想知道我的内部格式是来自任何 ASTC 压缩图像的标题COMPRESSED_RGBA_ASTC_4x4_KHR
还是COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
来自任何 ASTC 压缩图像的标题。有什么线索吗?
ios - 无法从 3.0 EAGLContext 创建 CIContext
EAGLContext
如果我像这样初始化
该程序运行良好,但使用kEAGLRenderingAPIOpenGLES3
,以下代码导致崩溃:
CIContext
类引用声明“OpenGL ES 上下文必须支持 OpenGL ES 2.0”,但我的印象是 3.0 应该是向后兼容的......
我错过了什么?
ios7 - glDrawElements 在 OpenGL ES 3.0 上使用 VBO 抛出 EXC_BAD_ACCESS
这个问题让我发疯,因为它似乎是正确的。我正在使用 iOS 7 和 OpenGL ES 3.0。
变量的类型是:
这仅执行一次:
这总是在渲染时执行:
glDrawElements(...) 正在抛出 EXC_BAD_ACCESS(代码=1,地址=0x0),我不知道为什么。
ios - 在许多 EAGLContext 之间切换的成本?
我正在处理一些具有网格视图的代码(一次在屏幕上显示约 20 个子视图)。每个子视图在 GL 中绘制其内容,并有自己的绘制线程和 EAGLContext。
这样做的好处是每个视图都与应用程序中的其他 GL 使用相对隔离,尽管屏幕上有 20 个这样的视图,我们必须每帧 glFlush+setCurrentContext: 20 次。我的直觉告诉我,这不是 GL 最有效的用法。
我的问题:
- 切换上下文的成本是多少?
- 必须为每个上下文执行 glFlush 实际上会减慢它的速度,还是 glFlush 只会停止当前上下文?
ios - 使用 OpenGL ES 3.0 进行 GLKit 多重采样
我正在将一个小型 iPad 应用程序从 OpenGL ES 2.0 迁移到 OpenGL ES 3.0。在应用程序中,我使用 的子类GLKView
来处理我的所有绘图,尽管我使用的唯一 GLKit 功能是:
我的-drawRect
方法如下所示:
我还没有支持 OpenGL ES 3.0 的设备,所以我所有的 OpenGL ES 3.0 测试都在 iOS 模拟器中完成。OpenGL ES 2.0 测试在设备上和模拟器中完成。
正如预期的那样,在 中ES2
,屏幕在启动时立即被清除为白色(-drawRect
已被调用一次,还没有要绘制的顶点)。但是,当我切换到ES3
时,上下文已成功创建,没有gl
调用失败,但屏幕并未按应有的方式清除 - 它只是显示为黑屏。寻找问题所在,我决定删除多重采样:
它奏效了!GLKit
(尽管没有抗锯齿。)因此,我的问题是,在 iOS 模拟器(iPad、iPad Retina 和 iPad Retina(64 位))中使用 OpenGL ES 3.0 进行多重采样是否存在任何已知问题?我的笔记本电脑有足够的可用内存来应对多重采样。
android - Android 4.3 PBO 不工作
我PBO
用来截屏。但是,结果图像全黑。没有PBO
. 在这样做之前我需要注意什么吗?
我什至尝试渲染到 aFBO
然后使用GLES30.glReadBuffer(GLES30.GL_COLOR_ATTACHMENT0)
,没有希望