问题标签 [pixel-shader]

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 回答
2377 浏览

hlsl - 在 HLSL 中使用着色器资源(端口 DX9->DX10)

我正在尝试将我的 DX9 体积渲染器移植到 DX10 版本。目前,我遇到以下错误:

D3D10:错误:ID3D10Device::DrawIndexed:着色器代码中声明的视图尺寸与绑定到像素着色器单元的插槽 0 的视图类型不匹配。如果着色器实际使用视图,这是无效的(例如,由于着色器代码分支,它没有被跳过)。[执行错误#354:DEVICE_DRAW_VIEW_DIMENSION_MISMATCH]

我的猜测是我没有以正确的方式将 2D 和/或 3D 纹理(着色器资源)发送到着色器;或者不要以正确的 (dx10) 方式使用它们。DX9 代码类似于以下内容(为了这个问题而进行了简化):

HRESULT 小时;int nVertexShaderIndex = 0;

具有实际数据的 3D 体积纹理以类似方式发送。对应的像素着色器代码:

在 DX10 中我们可以简化一些着色器代码(据我了解)。我创建了一个空纹理并用 map()/unmap() 填充这个纹理。接下来我将它作为着色器资源绑定到我的 PS。c++ 和着色器代码如下:

绑定到着色器:

在着色器中使用:

请注意,此代码引入了错误只是有根据的猜测。如果上面的代码对您来说是正确的,请也回复(在评论中)。在这种情况下,寻找解决方案的新方向将受到重视。

0 投票
1 回答
1184 浏览

direct3d - direct3d alphablend and pixel shaders

I have a 2D scene, 2 textures set as render targets, and a vertex buffer.

first texture is filtered out by contrast/brightness pixel shader, the second acts as a menu, which I would not like to be processed by the same shader, but want it to be alphablended with the first one.

Everything runs fine, until I go to extreme values for brightness/contrast which looks like the fade out effect when changing the the second one and it stops to redraw at all on very extreme ones, though the data is always fed to the first one.

Disabling AlphaBlendnable corrects it, but I loose alpha blending... Any way to clean the buffers prior to applying pixel shaders? Any help appreciated.

pixel shader code:

Rendering code

0 投票
1 回答
186 浏览

pixel-shader - 片段的行列索引,HLSL着色器

您可以在 HLSL (DX11) 片段着色器中获取当前片段的行和列吗?

0 投票
2 回答
348 浏览

opengl - 使用 OpenGL/OpenCL 加速每行纹理处理

我有一个渲染步骤,我想在动态生成的纹理上执行。

该算法可以并行独立地对行进行操作。对于每一行,该算法将以从左到右的顺序访问每个像素并就地修改它(如果有帮助,则不需要不同的输出缓冲区)。每次传递都使用状态变量,这些变量必须在每行的开头重置并在我们遍历列时持续存在。

我可以设置 OpenGL 着色器、OpenCL 或其他什么来执行此操作吗?请提供带有代码的最小示例。

0 投票
4 回答
1241 浏览

c# - 图像处理 C#

我有一个功能来检查图像是否只是一种颜色。

但是这个算法对于大图像来说很慢。有谁知道使用像素着色器和 GPU 的方法?

0 投票
1 回答
1445 浏览

delphi - FireMonkey 中的像素着色器模型 > 2.0

从我的主要问题开始:

我可以在 FireMonkey 应用程序中使用像素着色器模型 3、4 或 5 吗?

我希望能够在我的 FireMonkey 程序中动态创建像素着色器。为此,我现在使用 DirectX SDK 附带的 fxc.exe 编译像素着色器,并将编译后的代码加载到我的 TShaderFilter 后代中。效果很好(如果您对我的操作方式感兴趣,请告诉我)。

ps_2_0但是,如果我作为目标配置文件编译,我只能让事情正常工作。

我目前遇到了着色器模型 2.0 的限制。例如,循环似乎是由编译器展开的,并且您可以在 2 级着色器中拥有最大数量的指令。因此,可能性的数量非常有限。


示例: 下面的着色器代码创建了一个 mandelbrot 分形。如果我设置Iterations得太高,它不会编译。错误信息:

error X5608: Compiled shader code uses too many arithmetic instruction slots (78). Max. allowed by the target (ps_2_0) is 64.

使用着色器模型 ps_3_0 我可以编译更多迭代,但编译后的着色器似乎在 FireMonkey 中不起作用。我没有收到任何错误消息;结果,我得到了一张红色的图像。


这里有人知道如何解决这个问题,还是 FireMonkey 无法充分利用我的显卡的全部潜力?

请注意,我已经看到 FireMonkey 的最低要求是具有着色器级别 2.0 的显卡,但不清楚这是否意味着您不能使用着色器级别 3 或更高级别。

0 投票
0 回答
372 浏览

c++ - 像素格式转换哪个更快?像素着色器或计算着色器,或者可能是 OpenCL?

我想即时将帧从 YUV420p 格式(或类似格式)转换为 ABGR 格式,并将结果帧作为纹理放入视频内存中。

我现在可以考虑两种方法:

  1. 让每个通道成为一个源纹理,并渲染到另一个纹理。
  2. 在计算着色器中“正常”执行。

我不太了解 GPU 中的规则。在我的卡片中,有 720 个着色器核心、36 个纹理单元和 16 个输出单元。这是否意味着在每个周期内,我最多可以采样 40 个纹理并输出 16 个像素,而我可以执行 720 个着色器操作?因此,如果我使用方法 1,即使我对每个像素只使用 2 或 3 个操作,我也会被限制为 16 个像素输出?如果我使用方法2,是否意味着只要我可以在45个周期内转换一个像素,它就会比使用方法1更快?

0 投票
2 回答
870 浏览

3d - HLSL 中的斜角效果

我正在尝试在 HLSL 中制作类似 Photoshop 的斜角效果。
困难的部分是找到一个点与最近边缘的距离(其中 alpha=0)
任何人有任何想法如何做到这一点?

最好的,
西南

0 投票
2 回答
200 浏览

graphics - 透明物体相互覆盖

对于一个学术项目,我正在尝试编写一个从头开始绘制广告牌的代码;现在我正处于使它们半透明的地步。我已经设法让它们在背景下看起来不错,但它们仍然可以用它们应该是透明的角相互覆盖,就像这张照片中一样:

我不确定我做错了什么。这是我用来绘制广告牌的效果文件。我省略了与顶点着色器相关的部分,我认为这些部分现在无关紧要。

我有两个纹理,命名为 Texture 和 MaskTexture,后者是灰度的。广告牌很可能在同一个顶点缓冲区中,并GraphicsDevice.DrawIndexedPrimitives()通过 XNA 的一次调用来绘制。

我有一种感觉,我没有把整件事都做对。

0 投票
2 回答
2900 浏览

pixel-shader - 像素着色器实际上是做什么的?

我对图形编程比较陌生,而且我刚刚阅读了一些书籍并且一直在浏览教程,所以如果这似乎是一个愚蠢的问题,请原谅我。

我已经掌握了directx11 的基础知识并开始运行,现在我想找点乐子。所以很自然地,我一直在大量阅读着色器管道,我已经着迷了。编写一段简单、微小的代码,它必须足够高效,以每 60 秒运行数万次而不浪费资源,这让我急于掌握这个概念,然后再继续下去,可能会弄得一团糟东西的。我遇到的问题是掌握像素着色器实际在做什么。

顶点着色器很容易理解,你将一个对象的顶点组织在统一的数据结构中,这些数据结构与它相关的信息,比如位置和纹理坐标,然后将每个顶点传递给着色器,通过变换矩阵从 3d 转换为 2d . 只要我理解它,我就可以弄清楚如何编码。

但我没有像素着色器。我得到的是顶点着色器的输出是像素着色器的输入。那么这不就是将多边形顶点的二维坐标交给像素着色器吗?我所理解的是像素着色器接收单个像素并对它们执行计算以确定颜色和照明等内容。但如果这是真的,那么哪些像素呢?整个屏幕还是仅位于转换后的 2d 多边形内的像素?

还是我完全误解了某些东西?