问题标签 [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 - gl_FragData 必须为零
我在尝试编译片段着色器时遇到问题。我不断收到此错误:
这是代码:
如果我正在设置gl_FragColor
(将 4 个纹理附加到帧缓冲区),整个设置工作正常,但尝试执行上面的代码(索引缓冲区以输出到)似乎无法编译。我已经看到使用扩展在 WebGL1 中运行良好。我正在使用 WebGL2,所以在这种情况下可能有些不同?(我正在最新版本的 Chrome 中尝试)。
google-chrome - 如何在 Google chrome 浏览器中启用 webgl 2.0?
我正在尝试在我的谷歌 Chrome 浏览器中启用 WebGL 2.0,但未成功。如果你们中的任何人遇到过这样的问题并有解决方案,请分享。这将是一个很大的帮助!
在这里发布之前,我在网上花了很多时间来解决这个问题。但什么都没有解决。
(I)这是我已经尝试过的。
- 在 chrome://settings 中使用硬件加速
- 在 chrome://flags 中启用 WEBGL 2.0
- 在 chrome://flags 中启用 WebGL Draft Extensions
- 覆盖 chrome://flags 中的软件渲染列表
- 最后尝试卸载并重新安装chrome浏览器
(二)关于Chrome版本及其他详情:
- 我的 Chrome 浏览器版本是 61.0.3163.100 (Official Build) (64-bit)
- 我在 Windows 10 64 位戴尔笔记本电脑上运行 Chrome 浏览器。
- Webgl 2.0 在同一台机器上的 Mozilla firefox 浏览器中没有任何问题。
我检查了 www.webglreport.com 以检查 WebGL 2.0 对我的浏览器的支持。此处显示以下消息。
“此浏览器支持 WebGL 2,但已禁用或不可用。有时这是旧视频驱动程序被浏览器拒绝的结果。如果可能,请尝试更新您的视频驱动程序。”
- Webgl 1.0 在同一台机器上运行良好,没有任何问题。
- 我的 GL_RENDERER 是“ANGLE (Intel(R) HD Graphics 530 Direct3D9Ex vs_3_0 ps_3_0)”& GL_VERSION 是 OpenGL ES 2.0。从chrome
://gpu 看到的 chrome - 我的机器中有 AMD 显卡 (Amd Firepro W5130M) 我无法让我的 Chrome 浏览器使用此显卡。它始终使用上述步骤中描述的内置 Intel 卡。
- 我确定,我的两张显卡都没有列入黑名单,而且它们都是最新的。
还有什么其他选项可以从 chrome 浏览器设置中启用 webgl 2.0?生无可恋。任何帮助深表感谢。
提前致谢。
webgl - 模板缓冲区和掩蔽如何工作?
2 个三角形(图片 A)仅绘制在四边形(图片 B)内的区域中,因此结果看起来会被剪裁(图片 C)。
首先,我在模板缓冲区中绘制四边形。
据我了解,现在模板缓冲区在四边形区域的值为 1s。然后,绘制三角形。
我原以为结果会像图片(C)上那样,但事实并非如此。我做错了什么?
请在此处找到完整代码https://jsfiddle.net/z11zhf01/1
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
任何人都可以帮助我我做错了什么吗?
提前致谢
javascript - WebGL 2.0:即使 VBO 被删除,Draw 调用也会成功
所以我使用 VAO 来存储来自 VBO 的指针。我想测试在绑定 VAO 并调用绘图之前删除我的数据缓冲区(vbo、ibo 等)时会发生什么。由于 VAO 将指向数据的指针存储在相应的数据缓冲区中,因此我预计渲染器会崩溃。但是,一切都在继续工作。这怎么可能?我正在使用 WebGL 2.0 上下文。该文档指出 VAO 是根据 OpenGL 文档实现的。这是否与 JavaScript 如何处理对象有关?也许我的 vbo 在我调用 deleteBuffer 之前被缓存在某个地方(不知不觉)。这可能吗?这里发生了什么?
webgl2 - 为什么在 webgl2 中从 16 字节缓冲区创建 2x8 R8 纹理失败?
当我尝试在 webgl2 中创建 2x8 R8 纹理时,出现错误。4x8 纹理不会发生这种情况。如果我将输入缓冲区的大小比我预期的大小增加一倍,则 2x8 成功。
创建/读取纹理时,webgl2 的“列对齐”是否为 4?
这是一些重现该问题的代码。我在 Chrome 和 Firefox 中的 Windows 上对其进行了测试:
出现的错误代码是 0x502 (INVALID_OPERATION)。读取通过扩展缓冲区创建的纹理时会发生类似的问题:它似乎期望“列对齐”为 4。
webgl2 - 渲染警告:绑定到纹理单元 0 的纹理不可渲染。它可能不是 2 的幂并且具有不兼容的纹理过滤
所以我正在尝试使用 WebGL 来卸载稍后图像所需的一些数据处理。
我有两个阶段,首先我尝试将无符号整数“渲染”到纹理。在第二遍中,我从这个纹理中读取并渲染到画布上。
如果我将纹理定义为 RGBA,那么我没有问题。但是当我将格式更改为 RGBA32UI 时,我不断得到:
我将着色器减少到单个像素,但仍然出现相同的错误。
纹理初始化如下:
在片段着色器中,我有两种颜色类型:
谢谢您的帮助!
javascript - 获取使用 gl.texImage2D 绘制的纹理的“红色”像素值
我正在使用纹理将 Float32array 发送到我的片段着色器(这里的目标是使用纹理将数据发送到着色器,在着色器中处理此数据,然后将其发送回 javascript)。由于我的数据实际上不是图像,因此我决定通过“gl.R32F”发送它,并且在使用 gl.readPixels 处理后尝试读取这些数据。这是我的代码,例如,尚未处理数据,首先我试图找到一种将数据发送回javascript的方法;
当我尝试将数据写入纹理时,我没有收到任何错误(尽管我不知道数据是否在没有任何更改的情况下发送,因为我无法将其读回)。但是,当我尝试使用 gl.readPixels 将其读回时,出现以下错误,
所以,我的问题是这样的;
- 如果我使用纹理发送数据的方式是正确的,并且在此过程中我的数据没有更改,我该如何将其发送回 JavaScript?
- 如果我发送数据的方式是错误的,我该如何实现我的目标?
如果你能帮助我解决这个问题,我将不胜感激。谢谢你。
Ps:数据并不总是完美的正方形。
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 时,这正是我渲染场景的方式。唯一不同的是,这一次,我渲染成立方体纹理。