问题标签 [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.

0 投票
3 回答
17750 浏览

android - Android 模拟器是否支持 OpenGL ES 3.0?

我知道模拟器从 SDK 工具 17 和 Android 4.0.3 开始就支持 OpenGL ES 2.0,但这是在 2012 年 4 月推出的。

Android 模拟器是否支持 OpenGL ES 3.0,还是我们还在等待呢?
如果没有,是否有任何其他第三方仿真器/模拟器(例如 Genymotion)支持 OpenGL ES 3.0?

0 投票
1 回答
329 浏览

android - OpenGL ES 3.0 遮挡查询总是结果为假

我正在尝试对 android OpenGLES 3.0 中位于不同 Z 的两个三角形进行遮挡查询。

这是我的使用方式:

drawTriangle()方法中,我只是将颜色、顶点和 MVP uinform 传递给顶点着色器。

在我的设备屏幕上,我可以看到 TRAINGLE 2 完全被 TRIANGLE 1 遮挡。另外,如果我反转 Z 平移,其他三角形完全被遮挡。但是测试结果(isHidden)仍然保持不变吗?我哪里错了?如何进行正确的遮挡测试?

0 投票
0 回答
971 浏览

android - 在 Android 4.3 上使用 opengl es 3.0 PBO 时,glreadpixels 像素被截断并显示黑色部分

我正在尝试通过在 Android 4.3 上使用带有 opengl es 3.0 的 PBO 来进行快速像素读取。我的设备分辨率是 1280 * 720。

在调用 glReadPixels() 并获取像素数据后,我将数据编码为 JPEG 文件。

问题是,原始的opengl图像是1280 * 720,但jpeg就像,像素[0~720,0~720]矩形是90度旋转的opengl图像,[721~1280,0~720]是黑色(黑色似乎是垃圾数据)。

以下是我使用 pbo 和 glReadPixels() 的代码。

PS:经过一些研究,我发现

  1. 不使用pbo,直接调用glReadPixels(0, 0, 1280, 720, GL_RGBA, GL_UNSIGNED_BYTE, buffer_ptr); ,像素是正确的。jpeg文件没问题。

  2. 如果我在代码中将所有 720 更改为 1280,我可以获得整个 opengl 图像,右侧填充黑色。

你能帮忙指出问题吗?任何建议将不胜感激~非常感谢!

…… // 使用 OpenGL ES 3.0 绘制一些东西

……</p>

…… // 编码为 jpeg

0 投票
1 回答
443 浏览

ios7 - OpenGL ES 2.0-3.0 gl_LightSource 等效?

我正在尝试将顶点着色器转换为在 iOS 7 上工作,但我无法弄清楚 gl_LightSource[0].position.xyz 的等价物应该是什么。

这是 OpenGL ES 1.0 顶点着色器

我已经将所有 gl_xxx 东西换成了统一的 mat4/vec4 等,我可以从我的代码中传入,但我不知道如何处理这一行

vec4 eyeLightPos = gl_LightSource[0].position;


这是要转换的顶点着色器代码


这是片段着色器代码

0 投票
1 回答
594 浏览

ios - SceneKit 支持的 OpenGL ES 3.0 子集是什么?

SCNView 的文档中指出:

SceneKit 支持 OpenGL ES 3.0,但在 OpenGL ES 3.0 上下文中渲染时​​某些功能被禁用

我在任何地方都找不到哪些功能被禁用。我想在 SceneKit 中使用我自己的着色器(将 SCNProgram 分配给我的材质)并且我尝试使用 3D 纹理。但我收到以下错误:

所以我猜测 3D 纹理是禁用功能的一部分,但我无法在任何地方找到确认。我是否必须放弃 SceneKit 并手动使用 OpenGL 进行所有渲染才能使用 3D 纹理?

额外的问题:既然 iOS 已经完全支持,为什么 Apple 在 SceneKit 中只支持 OpenGL ES 3.0 的一个子集?

0 投票
4 回答
20991 浏览

java - 有没有办法检查 Android 设备是否支持 openGL ES 3.0?

我需要动态检查使用的设备是否支持 openGL ES 3.0。

我怎样才能做到这一点?

我在谷歌或这里找不到任何东西......

0 投票
1 回答
1043 浏览

java - 如何在 Android 上使用 OpenGL ES 扩展

我正在Android上开发一个OpenGL ES 3.0应用程序,主要是Java,我需要使用浮点渲染纹理。

返回一个包含 GL_EXT_color_buffer_half_float 和 GL_EXT_color_buffer_float 的字符串 => 我的设备显然支持浮点纹理。

但是,我现在有点迷失如何使用这些扩展。打电话

导致 glError 1282。当我使用 GL_RGBA 而不是 GL_RGBA16F 时,一切正常。我想试试 GL_RGBA16F_EXT,但这不包含在 GLES30 中。所以,我试图传递值 0x881A ,我认为这是 GL_RGBA16F_EXT 的定义方式。但是,同样的错误:glError 1282。

有一个函数 eglGetProcAddress 有时需要使用 OpenGL ES 扩展,但由于我不需要函数的地址,我怀疑这对我也没有帮助。我真的不知道下一步该尝试什么。如何创建浮点 FBO?

0 投票
1 回答
547 浏览

opengl-es - 如何使用 openl-es 3.0 访问顶点着色器上的缓冲内存?

我听说顶点着色器使用 OpenGL 3.x(使用 TexelFetch 方法)访问用户自己的缓冲区数据(纹理缓冲区对象)

所以最近我尝试在 IOS7 的 OpenglES 3.0 顶点着色器上应用 TPB 技术,但我无法使用 TBO bcz OpenGLES 3.0 无法提供它。

我的顶点着色器必须访问 TBO 并使用它的数据,例如速度、位置和力。

我想在 OpenglES 3.0 上使用类似的 TBO techinc。

如果我使用像素缓冲区对象,我可以在着色器上使用“texelFetch()”方法访问它们吗?

我怎样才能弄清楚我的工作?有人知道什么好方法吗?

0 投票
1 回答
96 浏览

ios - 数值不稳定导致 iOS OpenGL ES 3.0 顶点着色器、着色器语言版本 300 崩溃

我正在对 6x6 矩阵进行块矩阵求逆,将其拆分为 4x4、2x4、4x2 和 2x2 块,但在某处出现问题并尝试访问其中一个值会导致崩溃。我想我会尝试使用 isnan() 或 isinf() 来检测错误值,但这似乎也会导致崩溃。

有任何想法吗?我不确定如何调试它,因为崩溃发生在顶点着色器中,而且我没有检查矩阵内部值的好方法。矩阵中 [0][1] 处的值是否可能是某些描述的非数字值,它与 INF 的 NaN 不同,并且会使 isnan() 和 isinf() 都崩溃?

0 投票
2 回答
672 浏览

ios - iOS OpenGL ES 3.0 上的变换反馈变量重新声明错误

我目前正在尝试从 GPU 中获取像素信息,以便可以通过循环对其进行处理/保存/反馈。

为此,我正在尝试实现转换反馈。我遇到了拆分 GPU 管道的问题。顶点和片段着色器程序的这种分离也意味着编译和着色器程序创建的分离。在实现这一点时,编译器给了我 catch-22 反馈,它告诉我如果我分离着色器,那么我需要重新声明某些内置的每个顶点变量,例如 gl_Position。

但是当我这样做时,它告诉我不允许重新声明内置变量:

错误:0:1:可能不会重新声明常规非数组变量“gl_Position”。

我尝试按照我找到的示例重新定义 gl_PerVertex ,但它无法识别 gl_PerVertex 是一个内置的东西:

错误:0:1:标识符名称“gl_PerVertex”不能以“gl_”开头

有谁知道要在 iOS 的顶点着色器中重新声明哪些变量以有效地重新声明 gl_Position?还是我已经尝试过的两件事中的任何一个有问题?