问题标签 [webgl2]
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 - 为什么 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
扩展。
javascript - 悬垂检测着色器 - 如何返回顶点的坐标?
我正在尝试使用three.js在浏览器中编写支持生成应用程序,我尝试了很多方法,但所有方法都很慢,所以现在我决定让着色器计算悬垂位置,我的程序构建支持这些点。
现在的问题是我无法弄清楚如何将这些红色区域返回给 CPU / 主 JavaScript 应用程序以生成对这些点的简单支持,我在这里读到了关于涉及 FBO 的 GPU CPU 方法但无法理解这一点,是有什么方法可以将红色区域坐标返回给 CPU?
我也可以在顶点着色器中计算这个以将非悬垂顶点的位置更新为 0,0,0,但问题是三个 JavaScript 中的顶点位置不会以这种方式更新,如果有某种方法可以在顶点着色器执行后获取更新的顶点位置,这可能是一个解决方案。
也许转换反馈?如何使用来自three.js 的转换反馈?
webgl2 - Access to gl_InstanceID in WebGL 2 Instancing
I am trying to do instancing in WebGL 2. I want to use the built-in variable gl_InstanceID
to index into a uniform float array.
I get the following error:
glDrawElementsInstancedANGLE: attempt to draw with all attributes having non-zero divisors
Is the only instancing allowed in WebGL 2 instancing with vertex attributes (instanced arrays)?
Also, is the spec the only definitive place to find out about these capabilities?
android - 什么是 OpenGL 中的“活动”统一块
OpenGL 文档不太清楚什么是活动的统一块(相对于那些不活动的块)。所以我的理解是它们在着色器程序中被引用/使用......或者是它!
考虑以下着色器程序:
顶点着色器
片段着色器
即使我不使用foo
或dog
统一块,查询以获取活动统一块的数量......
...对于这个着色器程序总是返回3 。无论我在 Android、iOS 还是 WebGL2 上运行,我都会得到相同的结果。我还没有在桌面OpenGL(相对于 OpenGL ES 3.0)上进行测试,但我不希望有不同的结果(但我想它可以?)。
- 那么,统一块处于活动状态意味着什么?
- 有没有办法只检索使用过的统一块(跳过未使用的块)?
谢谢!
webgl2 - WebGL 2 何时清除绘图缓冲区?
我目前正在开发一个名为 readPixels的演示。
这个关于 SO 的答案preserveDrawingBuffer
是我可以在该选项中找到的大部分信息。
在测试时,我观察到在 WebGL 2 中这个答案仍然正确 - 你必须设置preserveDrawingBuffer
为true
.
这真的正确吗?
是否有 OpenGL 等价物preserveDrawingBuffer
?
有什么方法可以设置preserveDrawingBuffer
并false
仍然调用 readPixels?
这个答案让您看起来可以打电话gl.flush
。
preserveDrawingBuffer 与刷新上下文有何相同之处?
glsl - 绑定多个统一缓冲区对象
使用 WebGL 2,我们现在可以使用统一缓冲区对象。
它们看起来是个好主意,不必将通用制服附加到每个单独的程序(例如投影和视图矩阵,每个被渲染对象都通用)。
我创建了一个辅助类,每次我想绑定一个统一的缓冲区对象时都会调用它。
是否像这样创建统一缓冲区的想法
在我的渲染循环中,然后我通过调用更新“perScene”制服
然后我将查看场景中的所有对象,我的想法是像这样更新 perObject 统一缓冲区
我所说的vec4
只是为了使示例更容易,但想法是在 perScene 上拥有矩阵(投影和视图),在 perObject 上拥有(对象和法线矩阵)。
在我的着色器中,我将它们声明为
我在这里有一个工作片段
我不应该看到一个白色方块,因为所有颜色加起来都会导致 avec4(1.0, 1.0, 1.0, 1.0)
吗?(jsfiddle第41行)
我究竟做错了什么?谢谢
html - WebGL 帧缓冲区:gl.clearColor 似乎不会影响 FBO 中的 alpha 通道
我正在尝试将某些东西从 OpenGL 移植到 WebGL。我发现由于某种原因,gl.clearColor(0,0,0,0)
当从我的帧缓冲区中调用时,似乎根本没有改变 alpha 值,而不是尝试在主后缓冲区上调用该函数,从而正确地渲染后缓冲区透明。
我相信我在 Fbo- 上正确设置了 RGBA 纹理
- 内部格式为 RGBA16F
- 格式为 RGBA
- texel 设置为 FLOAT
(注意我记得内部格式通常也是 RGBA,但这会在 WebGL2 中引发错误,因为它与其他设置的组合无效)
任何人都知道如何让 alpha 透明度在帧缓冲区中工作?任何想法表示赞赏。
编辑:忘了注意在我的 OpenGL 代码中我没有使用混合
javascript - textImage2D 加载 1 个组件纹理而不复制
我正在尝试从ArrayBuffer
包含 1 个组件的图像创建 2D 纹理。而且我想这样做而不将其复制到 4 个组件图像中。我想知道两者是否可行webgl
(webgl2
对 webgl2 有更多希望)。
webgl 1
我试过这个
正如文档所说,我尝试了两个gl.LUMINANCE
ansgl.LUMINANCE_ALPHA
每个颜色分量都是...
与gl.ALPHA
例如它说的相反:
丢弃红色、绿色和蓝色分量并读取 alpha 分量
由此看来,很明显gl.ALPHA
会期望一个 4 个组件的图像,而gl.LUMINANCE
只会gl.LUMINANCE_ALPHA
期望 1 个组件。
但是当我执行以下操作时,我收到一个错误,告诉我缓冲区太小。如果我传入一个大小为 4 倍的缓冲区,则不会出现错误,因此它似乎也期待一个 4 分量图像。
我还尝试将宽度和高度除以 4,以为我可以在我的着色器上超越纹理坐标,但得出的结论是,这对于插值来说可能是个坏主意,或者我必须自己做。
webgl 2
所以我对 webgl 1 没有太多期望,但我很确定使用 webgl2 会很容易。但不幸的是,以下方法不起作用:
它正在做同样的抱怨缓冲区太小并且不会在缓冲区大 4 倍时抛出任何错误。
那么是否有可能使用任何(或两个)版本,或者我注定要创建一个包含 4 个组件的临时图像?
javascript - Emscripten OpenGL (3) 给出版本错误
OS X - 铬。
我是 OpenGL / emscripten 的新手,并试图设置一个使用 WebGL 2、OpenGL 3+ 并通过 emscripten 构建到 webassembly 的简单脚本。
WebGL 1 / OpenGL 2 的编译没有问题。并且将画布设置为 WebGL 2 / OpenGL 3 似乎也有效。当我检查正在运行的当前版本时,它会通知我有关 OpenGL 3.0 和 WebGL2 的信息(但可能它没有使用它......?)。
但是,emcc 仍然对我提供的着色器仅与 3.0+ 版本兼容并因此暗示我正在运行 openGL 1/2 的错误尖叫?
通过 emscripten 设置新的上下文
着色器:
当我在创建上下文后立即记录当前 OpenGL 版本时,
我明白了:
本平台支持的OpenGL版本OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium))
Chrome 控制台这样说
我这样调用 emscripten,启用了 FULL_ES3 和 WEBGL2。
谢谢!