问题标签 [wgpu-rs]

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 投票
0 回答
356 浏览

graphics - 如何在 wgpu 的渲染过程中更改制服?

我目前在wgpu工作,以获得优于 OpenGl 的效率优势。我之前的图形代码中的一个常见模式是使用单独的缓冲区、单独的统一数据、但相同的着色器绘制许多网格。它看起来像这样(在 C++ 中):

(可能有一些微妙且不相关的错误——我有一段时间没用过 OpenGl)

然而,当我尝试使用 wgpu 在 Rust 中复制相同的模式时,我遇到了问题。

渲染函数如下所示:

显然,需要可变借用来更新制服。为了提高效率,我强烈希望不要为每个网格开始新的渲染通道。所以,我问,如何在渲染过程中更新 wgpu 中的统一数据,以渲染许多具有相同设置的网格(除了统一)?是否有其他更好的方法来完成我想要的(使用自己的缓冲区和制服渲染许多网格,但共享着色器)?

我非常彻底地阅读了 wgpu 的 docs.rs 条目,但找不到与我想要的内容相关的任何内容。我也尝试过,但失败了,找到一个使用 wgpu 的严肃的 FOSS 项目,以便我可以看到它是如何处理这个问题的。

请注意,我使用的是 wgpu 0.5.0 而不是 0.6.0,因为这是我能找到的最好的 wgpu 介绍性文档

0 投票
1 回答
249 浏览

rust - 使用 wgpu-ris 和 winit 调整窗口大小“抖动”

我正在尝试一些 rust 代码,这些代码是对Learn WGPU 教程中所示代码的轻微重构,包括添加统一变换以在固定(像素)位置和大小处绘制对象。

我注意到,当我调整窗口大小时,我的框会急剧拉伸、挤压和抖动。

调整抖动大小

拉伸/变形遵循增量的大小和方向,一旦调整大小完成,盒子总是固定在正确的位置和大小

在此处输入图像描述

GifCam 的帧差异视图显示移动期间的拉伸程度

在此处输入图像描述

为了排除我对教程代码所做的任何更改,我克隆了存储库,构建并运行了“tutorial6-uniforms”,它显示了与调整大小相同的行为,在它们发生时拉伸和挤压形状。

在此处输入图像描述

将 println 添加到我的调整大小和渲染函数(并在 MainEventsCleared 上禁用重绘)甚至显示成对的调整大小事件和重绘

这一切都让我相信幕后发生了一些事情,也许在重绘完成之前首先拉伸框架以匹配窗口的新大小?有没有办法防止这种情况?当屏幕上有很多元素时,尤其是文本,这种效果会变得非常刺耳。更不用说大多数应用程序都不会受此影响,因此它看起来不专业且丑陋。

这是我的事件循环,我省略了其他代码以减小帖子大小,但如果有助于解决问题,我会添加更多代码,或者参考教程中的代码

0 投票
1 回答
117 浏览

rust - 为什么 Rust 似乎忽略了我的生命周期注释?

我有以下课程

哪个应该实现以下特征

我正在尝试按以下方式进行

这(显然?)给了我以下终身错误

但我很难理解问题所在。我试图声明 RectangleNode 应该比 RenderPass 有更长的生命周期,因为我认为问题是 Rust 需要确保是这种情况,但它似乎忽略了我在 RenderPass 上的生命周期注释并假设一个匿名生命周期为了它?

编辑:

我可以通过更改为来解决原始问题

但这现在导致了另一个问题,我尝试使用以下代码

然后给出以下错误

对我来说,这个错误似乎意味着我的生命周期注释表明我想在节点的生命周期内借用传递给我的渲染函数的 render_pass,但这根本不想做。我不知道如何正确注释这个,有什么想法吗?

0 投票
0 回答
53 浏览

qt5 - 获取 QWindow 的 XCB 连接

如何获得Qt5xcb_connection_t*中给定的 XCB 连接()QWindow

现在我正在使用QX11Info::connection()来检索这个指针,但这取决于libQt5X11Extras.so,它可能并非在每个目标系统上都可用。或者,我可以使用QPlatformNativeInterface::nativeResourceForWindow()“连接”作为第一个参数,但QPlatformNativeInterface它是不稳定的,并且可能会在次要 Qt 版本之间发生变化。

背景:我在 Qt 应用程序中集成了一个基于 wgpu 的渲染器,并且需要 QWindow 的本机句柄(窗口 ID 和连接指针)来创建交换链表面。到目前为止这是有效的,但如果可能的话,我想删除对 libQt5X11Extras 的依赖。

0 投票
1 回答
84 浏览

rust - 仅使用顶点和索引时如何画线?

我使用 wgpu 作为我的项目的图形后端。

这是我目前的实现:

但是当试图在 2 个点之间画一条线时,线的宽度相对于这些点的高度差会发生扭曲。并且 point1 的 X 和 Y 值必须小于 point2 上的值,否则它们不会显示,因为 wgpu 需要顺时针或逆时针正面

line_1 line_2

对于 2 点之间的一条线,是否有更好的函数可以返回顶点和索引

0 投票
1 回答
273 浏览

rust - Wgpu:正确编写的 WGSL 着色器解析错误

我正在使用 wgpu-rs 并在 WGSL 中编写着色器。为了测试示例着色器,我从这里复制了一些示例代码:https ://www.w3.org/TR/WGSL/#var-and-let 。

这是我的简单着色器:

但是,当我尝试编译它时,出现以下错误:

该错误是由 line 引起的i = i + step;,但是如前所述,这段代码是从 W3 文档中复制的,为什么它不能编译?

0 投票
1 回答
81 浏览

rust - wgpu-rs:`线程'main'在'Texture [1]不存在'时惊慌失措'`

wgpu::TextureView我在render如下方法中创建一个:

但是当我运行程序时,它会恐慌:

0 投票
1 回答
272 浏览

rust - wgpu WGSL 计算着色器似乎没有做任何事情

我正在尝试遵循Windows 10 上 wgpu 中的“hello compute”示例(进行了一些小的修改,主要是对着色器进行了内脏处理,因此它基本上没有实际计算),但是当我最后读取缓冲区时,它总是归零出去。

这是我要运行的着色器,它编译得很好,我认为它是正确的

至于 wgpu 代码,它非常接近教程:

我得到了实例、设备和队列

编译着色器并制作管道:

制作暂存和存储缓冲区。打印 12,这dbg!(size)对于 4 字节 u32s 的 3 长度数组应该是正确的。

设置绑定组:

获取编码器并创建计算通道。应该将copy_buffer_to_buffer存储缓冲区复制到暂存缓冲区,以便我可以在最后读取它。

然后提交计算通行证和结果块:

没有达到错误情况,程序终止时没有错误,但结果总是打印出来[0, 0 ,0],当它应该是[2, 3, 4]

我究竟做错了什么?

0 投票
0 回答
50 浏览

rust - How to make sure I pass the right byte layout to the wgpu shader as uniform

I have this structure

I pass to gpu like this:

Now I've debugged this, and I don't get the correct mat3 structure in the shader. it is off and twisted. How do I debug this thing?

This is shader code:

0 投票
1 回答
116 浏览

shader - Wgsl Naga - 我如何使用内置的 textureStore() 和 texture_storage_2d?

Naga 验证这个片段:

rgba8uint替换rgba8unorm会使 naga 抛出错误。

我在 textureStore: i32,u32,f32 中尝试了标量与 vec4<> 的不同组合,但没有运气。

问题是:如何使用内置函数textureStore()texture_storage_2d<rgba8uint,write>而不是texture_storage_2d<rgba8unorm,write>

编辑:按照丹的回答我尝试了以下

有用!

我尝试使用 textureStore(output, vec2(10,10), vec4(10,5,10,20)); 失败了 我忘记了10 u ,5 u等中的u ...

谢谢。