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

0 投票
1 回答
1288 浏览

webgl - gl_FragData 必须为零

我在尝试编译片段着色器时遇到问题。我不断收到此错误:

这是代码:

如果我正在设置gl_FragColor(将 4 个纹理附加到帧缓冲区),整个设置工作正常,但尝试执行上面的代码(索引缓冲区以输出到)似乎无法编译。我已经看到使用扩展在 WebGL1 中运行良好。我正在使用 WebGL2,所以在这种情况下可能有些不同?(我正在最新版本的 Chrome 中尝试)。

0 投票
0 回答
8778 浏览

google-chrome - 如何在 Google chrome 浏览器中启用 webgl 2.0?

我正在尝试在我的谷歌 Chrome 浏览器中启用 WebGL 2.0,但未成功。如果你们中的任何人遇到过这样的问题并有解决方案,请分享。这将是一个很大的帮助!

在这里发布之前,我在网上花了很多时间来解决这个问题。但什么都没有解决。

(I)这是我已经尝试过的。

  1. 在 chrome://settings 中使用硬件加速
  2. 在 chrome://flags 中启用 WEBGL 2.0
  3. 在 chrome://flags 中启用 WebGL Draft Extensions
  4. 覆盖 chrome://flags 中的软件渲染列表
  5. 最后尝试卸载并重新安装chrome浏览器

(二)关于Chrome版本及其他详情:

  1. 我的 Chrome 浏览器版本是 61.0.3163.100 (Official Build) (64-bit)
  2. 我在 Windows 10 64 位戴尔笔记本电脑上运行 Chrome 浏览器。
  3. Webgl 2.0 在同一台机器上的 Mozilla firefox 浏览器中没有任何问题。
  4. 我检查了 www.webglreport.com 以检查 WebGL 2.0 对我的浏览器的支持。此处显示以下消息。

    “此浏览器支持 WebGL 2,但已禁用或不可用。有时这是旧视频驱动程序被浏览器拒绝的结果。如果可能,请尝试更新您的视频驱动程序。”

  5. Webgl 1.0 在同一台机器上运行良好,没有任何问题。
  6. 我的 GL_RENDERER 是“ANGLE (Intel(R) HD Graphics 530 Direct3D9Ex vs_3_0 ps_3_0)”& GL_VERSION 是 OpenGL ES 2.0。从chrome
    ://gpu 看到的 chrome
  7. 我的机器中有 AMD 显卡 (Amd Firepro W5130M) 我无法让我的 Chrome 浏览器使用此显卡。它始终使用上述步骤中描述的内置 Intel 卡。
  8. 我确定,我的两张显卡都没有列入黑名单,而且它们都是最新的。

还有什么其他选项可以从 chrome 浏览器设置中启用 webgl 2.0?生无可恋。任何帮助深表感谢。

提前致谢。

0 投票
1 回答
3589 浏览

webgl - 模板缓冲区和掩蔽如何工作?

我想在特定区域绘制对象。请看一下这张图片以供参考
图片

2 个三角形(图片 A)仅绘制在四边形(图片 B)内的区域中,因此结果看起来会被剪裁(图片 C)。

首先,我在模板缓冲区中绘制四边形。

据我了解,现在模板缓冲区在四边形区域的值为 1s。然后,绘制三角形。

我原以为结果会像图片(C)上那样,但事实并非如此。我做错了什么?

请在此处找到完整代码https://jsfiddle.net/z11zhf01/1

0 投票
0 回答
150 浏览

webgl2 - Webgl 着色器属性类型不匹配

我有一个像这样的缓冲区,用它来实例化曲线几何 Distance: { numComponents: 1, data: new Uint8Array(0), type: gl.BYTE , // signed byte normalize: true, divisor: 1 }

顶点着色器是:

片段着色器是:

当我运行代码时,它没有给我任何错误,但只有一个警告

[.Offscreen-For-WebGL-00000200FD87E610]GL ERROR :GL_INVALID_OPERATION : glDrawArraysIntancedANGLE: vertexAttrib function must match shader attrib type

任何人都可以帮助我我做错了什么吗?

提前致谢

0 投票
1 回答
312 浏览

javascript - WebGL 2.0:即使 VBO 被删除,Draw 调用也会成功

所以我使用 VAO 来存储来自 VBO 的指针。我想测试在绑定 VAO 并调用绘图之前删除我的数据缓冲区(vbo、ibo 等)时会发生什么。由于 VAO 将指向数据的指针存储在相应的数据缓冲区中,因此我预计渲染器会崩溃。但是,一切都在继续工作。这怎么可能?我正在使用 WebGL 2.0 上下文。该文档指出 VAO 是根据 OpenGL 文档实现的。这是否与 JavaScript 如何处理对象有关?也许我的 vbo 在我调用 deleteBuffer 之前被缓存在某个地方(不知不觉)。这可能吗?这里发生了什么?

0 投票
1 回答
85 浏览

webgl2 - 为什么在 webgl2 中从 16 字节缓冲区创建 2x8 R8 纹理失败?

当我尝试在 webgl2 中创建 2x8 R8 纹理时,出现错误。4x8 纹理不会发生这种情况。如果我将输入缓冲区的大小比我预期的大小增加一倍,则 2x8 成功。

创建/读取纹理时,webgl2 的“列对齐”是否为 4?

这是一些重现该问题的代码。我在 Chrome 和 Firefox 中的 Windows 上对其进行了测试:

出现的错误代码是 0x502 (INVALID_OPERATION)。读取通过扩展缓冲区创建的纹理时会发生类似的问题:它似乎期望“列对齐”为 4。

0 投票
1 回答
7250 浏览

webgl2 - 渲染警告:绑定到纹理单元 0 的纹理不可渲染。它可能不是 2 的幂并且具有不兼容的纹理过滤

所以我正在尝试使用 WebGL 来卸载稍后图像所需的一些数据处理。

我有两个阶段,首先我尝试将无符号整数“渲染”到纹理。在第二遍中,我从这个纹理中读取并渲染到画布上。

如果我将纹理定义为 RGBA,那么我没有问题。但是当我将格式更改为 RGBA32UI 时,我不断得到:

我将着色器减少到单个像素,但仍然出现相同的错误。

纹理初始化如下:

在片段着色器中,我有两种颜色类型:

谢谢您的帮助!

0 投票
1 回答
1002 浏览

webgl - WebGL2 FBO 深度附件值

我只是尝试使用 WebGL2 渲染场景的深度值,如下所示:

然后我像这样渲染它:

它似乎工作正常,但是在对附加的深度纹理进行采样时,我得到了看起来像线性深度的东西...... 在此处输入图像描述

我用来渲染到 FBO 的程序非常基础

垂直:

碎片:

我期待深度缓冲区是对数的,即使我不能确定我目前得到的东西是否真的是线性的,它看起来也不是对数的......如果它真的是线性的,不知何故这就是你应该从深度附件中得到,我很好,因为我可能需要线性而不是对数深度,但目前我不确定这是否是预期的行为,或者我正在做有问题(可能是后者)

干杯

0 投票
1 回答
300 浏览

javascript - 获取使用 gl.texImage2D 绘制的纹理的“红色”像素值

我正在使用纹理将 Float32array 发送到我的片段着色器(这里的目标是使用纹理将数据发送到着色器,在着色器中处理此数据,然后将其发送回 javascript)。由于我的数据实际上不是图像,因此我决定通过“gl.R32F”发送它,并且在使用 gl.readPixels 处理后尝试读取这些数据。这是我的代码,例如,尚未处理数据,首先我试图找到一种将数据发送回javascript的方法;

当我尝试将数据写入纹理时,我没有收到任何错误(尽管我不知道数据是否在没有任何更改的情况下发送,因为我无法将其读回)。但是,当我尝试使用 gl.readPixels 将其读回时,出现以下错误,

所以,我的问题是这样的;

  1. 如果我使用纹理发送数据的方式是正确的,并且在此过程中我的数据没有更改,我该如何将其发送回 JavaScript?
  2. 如果我发送数据的方式是错误的,我该如何实现我的目标?

如果你能帮助我解决这个问题,我将不胜感激。谢谢你。

Ps:数据并不总是完美的正方形。

0 投票
0 回答
487 浏览

c++ - WebGL 渲染到 cubetexture 错误 1282 - “没有纹理绑定到单元 0”

我正在尝试将一个小场景渲染到一个立方体贴图中,以用于 WebGL 中的反射——使用 Emscripten(C++ 到 JavaScript)。我的代码只是通过 6 个面,并将所有对象渲染到立方体纹理的当前绑定侧。该代码适用于桌面版本,没有错误。但是 WebGL 说:

渲染警告:没有纹理绑定到单元 0。

在检查 glGetError(); 后,我也收到错误 1282;当我调用“glDrawElements”时。两条消息出现 30 次(将 5 个网格渲染为 6 个面 - 6*5=30)

Fbo & 纹理创建

渲染:

我在这里做了什么 WebGL 不喜欢的事情?当我将场景渲染到 2D 纹理到另一个 FBO 时,这正是我渲染场景的方式。唯一不同的是,这一次,我渲染成立方体纹理。