问题标签 [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.
webgl - 使用来自多个着色器文件的 gl_FragData[]
我有一个带有一些着色器的 webgl 着色器。我正在使用多个渲染目标(gl_FragData[])
在第一个着色器中,我可以输出到
现在使用我的第二个着色器,我想输出到 gl_FragData[3] 并保存纹理以传递给我的第三个着色器。
第二个着色器似乎没有输出到 gl_FragData[3],但如果我在第一个着色器中使用它,它就可以工作。我希望将 gl_FragData[3] 的输出存储在纹理中并发送到第三个着色器。
我认为这可能与帧缓冲区有关,但我已经尝试改变它并且没有运气。我错过了什么?
webgl - 有没有办法在着色器中测试 GLSL-ES 版本?
在诸如shadertoy 之类的 Web 工具中,我的片段着色器源包含在我无法控制或查看的 main() 中。如果我分发一些 GLSL 库,情况也是如此。
我的问题是确保 webGL2 和 1 之间的兼容性:如果浏览器或操作系统仅支持 WebGL1,我想编写 GLSL 后备来模拟缺少的内置 webGL2。-> 有没有办法从着色器测试当前的 webGL/GLSL 版本,就像我们为扩展的可用性所做的那样?
(顺便说一句,由于语言中包含了一些扩展,测试扩展变得越来越复杂:例如,尽管功能存在,但 GL_EXT_shader_texture_lod 在 webGL2 中未定义。因此能够测试 GLSL 版本至关重要。)
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 上下文。
webgl - WebGL2 中推广扩展的完整列表
我有机会将我们使用的渲染器更新为 WebGL2。为了使渲染器尽可能向后兼容,我们一直跟踪加载的扩展(就像我们在升级之前所做的那样)并模拟扩展,即使这样的扩展被提升。渲染器通过扩展做了一些相关的事情。从外面看,一切都非常透明。
为了使其顺利运行,我需要完整的推广扩展列表。找到了一些博客,但这些列表并不完整。我在 GitHub 上找到的其他列表看起来是错误的,因为它们有多余的扩展,实际上没有提升或被删除。我在文档中没有找到太多。
所以,我做了一些实证研究,发现:
特别是我担心不在我的列表中的扩展OES_texture_float_linear
。OES_texture_half_float_linear
WebGL2 的实现我在本地有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
扩展。
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 图形芯片时,我都遇到了错误。
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
javascript - 如何使用 THREE.ShaderLib 创建自定义着色器
我一直在尝试学习 THREEJS 着色器材料。到目前为止,我了解制服、vertexShader 和 fragmentShader 如何在 glsl 和 webgl 的世界中对顶点和片段进行投影和着色。我一直在尝试找到一些使用 THREE.ShaderLib 扩展 THREEJS 的 ShaderMaterial 的好例子。
假设我想扩展一个标准的threejs材质(THREE.ShaderLib['standard'])来编写envmap纹理,这可能吗?还是绝对有必要从头开始编写所有内容?
webgl - 如何使用 ext_disjoint_timer_query 扩展来分析 WebGL?
在 WebGL 中,我们有特殊的扩展EXT_disjoint_timer_query用于正确的 GPU 分析,但我找不到好的手册如何使用它。例如下面的初始化在我的机器上工作
但最后一行返回undefined。我也从regl库中的源示例中获得灵感,但它太复杂了。