问题标签 [webgl-extensions]

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 投票
2 回答
5529 浏览

javascript - 如何在 webgl 中正确设置透明度

我是图形和 webgl 的新手。我在为 webgl 1.0 中的模型设置适当的透明度时遇到了问题。模型包含多个部分(几何)。

着色器代码是

js代码是

渲染每个部分后,我将使 depthMask 为真。

下面是所需的渲染图像

在此处输入图像描述

下面是我在 webgl 中得到的实际渲染图像。

在此处输入图像描述

我没有使用任何 webgl 库,例如threejs。

请在这个问题上帮助我。

0 投票
1 回答
207 浏览

webgl - 使用来自多个着色器文件的 gl_FragData[]

我有一个带有一些着色器的 webgl 着色器。我正在使用多个渲染目标(gl_FragData[])

在第一个着色器中,我可以输出到

现在使用我的第二个着色器,我想输出到 gl_FragData[3] 并保存纹理以传递给我的第三个着色器。

第二个着色器似乎没有输出到 gl_FragData[3],但如果我在第一个着色器中使用它,它就可以工作。我希望将 gl_FragData[3] 的输出存储在纹理中并发送到第三个着色器。

我认为这可能与帧缓冲区有关,但我已经尝试改变它并且没有运气。我错过了什么?

0 投票
1 回答
1820 浏览

webgl - 有没有办法在着色器中测试 GLSL-ES 版本?

在诸如shadertoy 之类的 Web 工具中,我的片段着色器源包含在我无法控制或查看的 main() 中。如果我分发一些 GLSL 库,情况也是如此。

我的问题是确保 webGL2 和 1 之间的兼容性:如果浏览器或操作系统仅支持 WebGL1,我想编写 GLSL 后备来模拟缺少的内置 webGL2。-> 有没有办法从着色器测试当前的 webGL/GLSL 版本,就像我们为扩展的可用性所做的那样?

(顺便说一句,由于语言中包含了一些扩展,测试扩展变得越来越复杂:例如,尽管功能存在,但 GL_EXT_shader_texture_lod 在 webGL2 中未定义。因此能够测试 GLSL 版本至关重要。)

0 投票
1 回答
180 浏览

webgl - 为什么 sRGB 扩展丢失了一个常数?

旧的 WebGL 上下文具有EXT_sRGB扩展名。该扩展公开了 4 个常量:

该扩展在 WebGL2 中得到推广并成为核心的一部分,但失去了一个常数。WebGL2 只有常量:

没有SRGB_ALPHA。更多的 WebGL2 上下文没有值为 35906 的常量。我确实检查了两个浏览器,情况是一样的。另外,我检查了我在本地拥有的所有其他扩展。WebGL2 中所有提升的扩展都将其所有属性合并到上下文中,但 sRGB。在文档中没有找到太多。

sRGB扩展有什么问题,损失背后的原因是什么?有人使用SRGB_ALPHA_EXT常量吗?如何?请分享你的经验。

此外,disjoint_timer_query扩展发生了一些奇怪的事情。该扩展被部分合并。WebGL2 上下文获得了扩展的一些属性。我disjoint_timer_query_webgl2在 Chrome 中拥有所有缺少的属性,除了一个getQueryObject重命名为 的属性getQueryParameter,但在 Firefox 中,disjoint_timer_query扩展仍然可用于 WebGL2 上下文。

0 投票
1 回答
758 浏览

webgl - WebGL2 中推广扩展的完整列表

我有机会将我们使用的渲染器更新为 WebGL2。为了使渲染器尽可能向后兼容,我们一直跟踪加载的扩展(就像我们在升级之前所做的那样)并模拟扩展,即使这样的扩展被提升。渲染器通过扩展做了一些相关的事情。从外面看,一切都非常透明。

为了使其顺利运行,我需要完整的推广扩展列表。找到了一些博客,但这些列表并不完整。我在 GitHub 上找到的其他列表看起来是错误的,因为它们有多余的扩展,实际上没有提升或被删除。我在文档中没有找到太多。

所以,我做了一些实证研究,发现:

特别是我担心不在我的列表中的扩展OES_texture_float_linearOES_texture_half_float_linearWebGL2 的实现我在本地有OES_texture_float_linear但没有OES_texture_half_float_linear,而 WebGL 两者都有。我知道在 WebGL1 上下文中的OES_texture_float_linear行为有点不同,所以我的直觉说可能存在问题。

此外,disjoint_timer_query扩展发生了一些奇怪的事情。该扩展被部分合并。WebGL2 上下文获得了该扩展的一些属性。我disjoint_timer_query_webgl2在 Chrome 中拥有除getQueryObject重命名为的属性之外的所有属性getQueryParameter,但在 Firefox 中,disjoint_timer_query扩展仍然可用于 WebGL2 上下文。

那么,这份清单是否完整?而且,特别是,应该OES_texture_half_float_linear在名单上?为什么它消失了,而类似的却OES_texture_float_linear留下了?

感谢你的帮助。

-

所以最终答案(可能)应该是:

请注意,最后三个扩展是带有警告的。扩展EXT_sRGB失去了一个常数SRGB_ALPHA。扩展OES_texture_half_float_linear被提升,而类比OES_texture_float_linear没有被提升。部分推广EXT_disjoint_timer_query。该扩展的一些属性出现在 WebGL2 上下文中,而其他属性被移到EXT_disjoint_timer_query_webgl2扩展中。此外,目前(2017.05.16)Firefox WebGL2 上下文仍然有EXT_disjoint_timer_query扩展,没有EXT_disjoint_timer_query_webgl2扩展。

0 投票
0 回答
656 浏览

webgl - 如何使 GL_EXT_draw_buffers 扩展可用?

我想使用 WEBGL_draw_buffers 扩展。除了gl.getExtension('WEBGL_draw_buffers');在 JavaScript 中启用扩展外,显然还必须使用指令在着色器中启用扩展#extension GL_EXT_draw_buffers : require。然而,虽然我的 WebGL 实现似乎支持 WEBGL_draw_buffers 扩展(也根据WebGL Extension Viewer),但着色器不支持。我收到以下错误:

'GL_EXT_draw_buffers' : extension is not supported

有没有办法来解决这个问题?我已经更新了我的显卡驱动程序。使用专用的 AMD 显卡(也支持 OpenGL 4.5)和集成的 Intel 图形芯片时,我都遇到了错误。

0 投票
1 回答
765 浏览

android - WebGL:减少对 Android 上 OES_texture_float 的支持

有谁知道OES_texture_float多年来对 Android 上 WebGL 扩展的支持下降是怎么回事?

https://webglstats.com/webgl/extension/OES_texture_float?platforms=000000000010000400

这是某种数据收集错误,还是支持率真的下降了?

如果您将 Android 排除在过滤器之外,那么 `OES_texture_float 基本上 100% 的其他主流移动和桌面平台都支持:

https://webglstats.com/webgl/extension/OES_texture_float?platforms=000036048004003200

0 投票
1 回答
2101 浏览

javascript - 如何使用 THREE.ShaderLib 创建自定义着色器

我一直在尝试学习 THREEJS 着色器材料。到目前为止,我了解制服、vertexShader 和 fragmentShader 如何在 glsl 和 webgl 的世界中对顶点和片段进行投影和着色。我一直在尝试找到一些使用 THREE.ShaderLib 扩展 THREEJS 的 ShaderMaterial 的好例子。

假设我想扩展一个标准的threejs材质(THREE.ShaderLib['standard'])来编写envmap纹理,这可能吗?还是绝对有必要从头开始编写所有内容?

0 投票
1 回答
743 浏览

webgl - WebGL2 渲染到 R32F 纹理

我无法将R32F纹理绑定到,因为根据此来源framebuffer,此类纹理不是“默认情况下可渲染颜色” 。

但随后它说“这些功能可作为可选扩展使用”。

如何使用这些扩展?我如何让它工作?

0 投票
0 回答
292 浏览

webgl - 如何使用 ext_disjoint_timer_query 扩展来分析 WebGL?

在 WebGL 中,我们有特殊的扩展EXT_disjoint_timer_query用于正确的 GPU 分析,但我找不到好的手册如何使用它。例如下面的初始化在我的机器上工作

但最后一行返回undefined。我也从regl库中的源示例中获得灵感,但它太复杂了。