问题标签 [opengl-es-3.1]
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.
opengl-es - 来自默认帧缓冲区的样本深度?(GL ES 3)
我想知道是否可以将默认帧缓冲区的深度绑定为纹理,以便可以从片段着色器中对其进行采样(在不写入该深度缓冲区的渲染过程中)?如果是这样,一些指针将不胜感激。
android - Android Opengles 3.1 - 是否支持统一缓冲区对象
我有一个 opengles 3.1 应用程序,可以在桌面上很好地呈现,但不能在 android 上呈现。
出错的地方是当我有统一的缓冲区对象时。在顶点着色器中,我有以下示例
使用桌面驱动程序可以正常工作,但在 android 上它会失败。我正在测试的 opengles 版本是 3.2 兼容的,并且函数调用在 android 中可用。
我已经尝试在顶点着色器中设置绑定并使用 glUniformBlockBinding 方法设置它们,但两者都不能在 android 上工作(但都可以在桌面上工作)。
如果我不使用这些来矩阵化,那么对象确实可以渲染(我可以在我的 android 手机上看到它们正常)但是当我包含这些矩阵时,没有绘制任何内容,这告诉我矩阵充满了零。
为了在 android 上支持 UBO,有什么特别需要做的吗?
我很乐意根据需要提供更多信息。
opengl-es - 在 OpenGL ES 3.x 中使用 Sampler3D 从 3D 纹理中读取
我正在使用 OpenGL ES 3.2 从片段着色器中的 3D 纹理读取并将该值写入 FBO。然后我使用 glReadPixels 从 FBO 附件中读取,并打印出获得的值。
我将采样器附加为:
在着色器中,我从纹理中读取为:
从纹理读取时,我只能从 z 坐标为 0 的值读取。从任何其他深度读取值会给出垃圾值或 NAN。
3D 纹理不应该允许我使用 (x, y, z) 值作为纹理坐标,其中 x、y甚至 z可以介于 0.0 和 1.0 之间?
opengl-es - Web 中的几何着色器
我有兴趣在 web(站点/应用程序)中使用几何着色器是否可以在没有 webgl 的情况下直接在 web 中使用 opengl es 3.1?是否有任何其他 API 可以使用比 webgl2 更新版本的 opengl es?
完全有什么方法可以在网络中使用几何着色器吗?
提前致谢
编辑: 或者无论如何要在网络中使用opengl?
android - 在 Android NDK 中包含 GLES31
我遵循了包含 gles3 的 android-ndk/gles3jni 示例。但我仍然得到对 gl* 函数的未定义引用。我的cmmakelist:
在我的 gradle 构建中:
我在我的 File.c 中包含#include。
opengl-es - 打开 GL ES 错误:未定义对“glDispatchCompute”的引用
我在带有原生 C++ 代码的 Android 应用程序中使用 Open GL ES 3.1。所以我需要运行一个支持 Android 的 C++ 库。
我使用了一些 Open GL ES 函数,它们运行良好。但是当我尝试使用时glDispatchCompute
,一个链接器给出了以下error: undefined reference to 'glDispatchCompute'
。
这是电话:
这是我的包括:
以下是我对 clang 的选择:
我也试过-lGLESv3 -lEGL
同样的效果。
opengl-es - 打开 GL ES 本地和全局工作组大小关系
我在 Open GL ES 中有一个着色器程序。我想调整本地/全局工作组大小以使用 Compute Shader 完成一维任务。
我有一个任务的总大小(可以在不同运行之间改变的线程总数),比如 [task_size]。假设我指定本地工作组大小,让它成为 [local_size]。而且我知道我有多少个工作组,比如说[工作组]。我在这里指定本地大小:
我在 glDispatchCompute 中指定了工作组的数量:
如果local_size * workgroups == task_size
,我清楚地了解会发生什么。任务的每个部分由单独的组计算。
但是如果 task_size 不能被 local_size 整除会发生什么?我知道我需要的最少工作组数是task_size / local_size + 1
. 但它是如何工作的?最后一个工作组实际上比其他工作组少吗?会影响性能吗?让 task_size 能被 local_size 整除是个好主意吗?
java - 调用 GLES32 glGetDebugMessageLog 时出现 UnsupportedOperationException
我想通过Debug Output调试我的 OpenGL 实现。我有几个平台的界面。在桌面上,glGetDebugMessageLog调用照常工作。
但在 Android 上,我收到此错误:
我还在两个使用 OpenGL ES32 (Android O + P) 的设备上检查了它。(AVD 模拟器还不能支持 OpenGL ES 3.2。)
为什么该方法没有实现,因为它已经添加到 API 级别 24 中?我创建了一个新项目(最低 API 24)并在 InstrumentedTest 部分测试了代码。
可能是什么问题呢?
readonly - OpenGL ES 和 Spir-V 中的只读存储缓冲区
在 OpenGL ES 着色语言中,着色器存储缓冲区对象 (SSBO) 可以用限定符readonly
或writeonly
. OpenGL ES Shading Language 3.1 版规范
的第 4.9 节(内存访问限定符):
着色器存储块、在着色器存储块中声明的变量和声明为图像类型的变量(在其关键字中带有“image”的基本不透明类型)可以进一步使用以下一个或多个内存限定符进行限定:...(A table已列出)
所以我可以在 opengl es 着色器中有这样的东西:
但是如何在 spir-v中指定只读呢?
在spir-v 规范的 3.18 部分,访问限定符中,它说:
由 OpTypeImage 和 OpTypePipe 使用。
这是否意味着,在 spir-v 中,SSBO 不能指定为只读?我不认为 SSBO 属于 OpTypeImage 或 OpTypePipe 类型。