问题标签 [direct3d11]

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 投票
2 回答
2740 浏览

c++ - 如何创建具有有效尺寸的常量缓冲区

晚上好,

我正在尝试将 XMFLOAT3X3 发送到常量缓冲区(请参见下面的代码)。

但是编译器告诉我 XMFLOAT3X3 是常量缓冲区字节宽度的无效维度:

但是,我对 HLSL 有点陌生,所以我不确定是否将 bytewidth 设置为 48,着色器的 cbuffer 中的 float3x3 是否会正确注册。我应该如何最好地处理这个?

如果您需要更多信息,请发表评论,我将编辑问题。我希望它足够清楚。

0 投票
1 回答
3786 浏览

directx - 在 DirectX 11 中,如何在 SwapChain (DXGI_SWAP_CHAIN_DESC) 中创建和注册两个缓冲区

我是 DirectX 11 的初学者,在《Beginning DirectX 11》一书的第 2 章中,有一个使用以下代码创建缓冲区的代码:

我的问题是,在交换链的描述中,显然只有一个缓冲区的空间,因为只有一个 BufferDesc(DXGI_MODE_DESC 结构)。那么如果 BufferCount 设置为 2 或更大,那么第二个缓冲区是如何注册的呢?是否使用另一个 DXGI_SWAP_CHAIN_DESC?请发布一些示例代码。

BufferCount 也有 UNIT 类型,这意味着可以添加两个以上的缓冲区。而双缓冲技术中使用了2个缓冲区,其中一个缓冲区用于绘制,另一个缓冲区用于在场景上显示,并交换缓冲区。两个以上的缓冲区有什么用,有什么好处?

0 投票
1 回答
1131 浏览

c++ - 常量缓冲区中的纹理变换矩阵无法正常工作

我试图通过将纹理坐标硬编码到 0 和 1 来剪辑纹理,然后将包含 3x3 纹理变换矩阵的常量缓冲区发送到顶点着色器。

但是,纹理没有像我预期的那样渲染。我不确定我哪里出错了。有人可以帮忙吗?请参阅下面的代码。

为了测试,我尝试使用一个恒等矩阵来保持纹理坐标不变,但纹理以一种非常奇怪的方式显示出来。

这是纹理:(出现的颜色实际上是透明区域,除了黑色和心形较柔和的红色)

普通的

变形纹理:

变身


HLSL:


VBuffer 硬编码:


矩阵定义:


Game_Manager GMSetTransformMatrix() 定义:


缓冲区初始化:

0 投票
1 回答
1601 浏览

direct3d11 - 什么是绑定 ID3D11DeviceContext::PSSetShaderResource()

PSSetShaderResource()的第一个参数:

StartSlot:“索引到设备的从零开始的数组以开始设置着色器资源”

那么整数索引和您的 .hlsl 变量之间的关系是什么?在 d3d9 中,一切都是基于字符串的名称。现在这些整数索引似乎缺少了一些东西......

假设你有一个着色器文件:

还有一个..

如果您只使用shader_1.psh,那么当它们位于单独的文件中时,您如何区分它们?

0 投票
2 回答
1754 浏览

hlsl - 编写 HLSL4 像素着色器以从 2D 纹理执行查找

我是一个初学者像素着色器作家,我遇到了一些麻烦。我想获取一个 256x256、16 位输入 (DXGI_FORMAT_R16_UINT) 图像,并通过 256x256 查找纹理 (DXGI_FORMAT_R8_UNORM) 将其转换为 256x256 8 位输出。

不幸的是,我似乎遇到了很多麻烦,输出似乎总是夹在黑色或白色上。

此外,我不确定我应该使用哪种 DXGI 格式,以及哪种数据类型与每种格式相关。

在尝试将其转换为 2D 索引之前,我应该对 pixelValue 进行规范化吗?

我应该在使用索引之前对其进行规范化吗?

我应该取样吗?

我什至在正确的道路上吗?

我将不胜感激任何帮助,谢谢!

0 投票
1 回答
585 浏览

gpu - 您如何可靠地(u,v)将纹理索引为二维向量数组?

使用着色器模型 5/D3D11/HLSL。

我想将 texel 的 2D 数组视为 Vectors 的 2D 矩阵

(每个纹素是一个 4 分量向量)。对于不同的着色器,我需要访问纹理中数据的特定范围。因此,纹理中要访问的范围自然应该被索引为 u,v 分量。

我将如何在 HLSL 中做到这一点?我在想以下几点:

  • 按照正常方式创建纹理
  • 将向量值加载到纹理中(每个纹素 1 个向量)
  • 关闭纹理采样的所有线性插值(“最近邻”)
  • 在着色器中,使用纹理坐标查找您需要的向量

唯一让我感到不安的是,当我使用浮点 u's 和 v's 索引纹理时是否会引入奇怪的错误。

如果纹理是 1024x1024 纹素,并且我正在尝试索引 (3,2)->(3,7),那将是 u=(3/1024,2/1024)->(3/1024,7/ 1024)感觉有点摇晃。有没有办法通过 int 组件索引纹理?或者它会很好地工作吗?

Texture2DArray

不想为此使用 GPGPU 框架(所以请不要 CUDA 建议 :)。

0 投票
2 回答
8250 浏览

hlsl - 您可以在顶点着色器中查看纹理样本吗?

在着色器模型 3.0 中,我很确定这是否定的,但我还是想问这个,

在着色器模型 5.0 中,您可以在顶点着色器中对纹理进行采样吗?

如果我想为每个顶点提供大量补充信息,我有什么选择?

编辑:显然可以进行顶点纹理提取,如此,但是当我在我的 hlsl 着色器模型 5 程序中尝试它时,我得到了错误

错误 X4532:无法将表达式映射到 vs_5_0 指令集
0 投票
1 回答
186 浏览

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

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

0 投票
0 回答
260 浏览

c++ - 每个基于 DirectX SDK 的应用程序运行缓慢

不知从何而来,我运行的每个 directx 应用程序项目只给我 4fps,我不知道为什么会发生这种情况......?所有的示例、网站上的教程、基本的 directx 程序(例如在单个项目中初始化设备)都给了我相同的结果。

我仍然可以正常玩零售游戏,只是我使用directx sdk从visual studio运行的任何东西都运行异常。

我在 W7 64bit、GTX460m (DX11) 上运行最新的图形驱动程序、DX SDK(2010 年 6 月)、8gb 的 RAM、i7 cpu......

如果有人可以提供帮助,我将不胜感激。

0 投票
2 回答
631 浏览

d - D语言释放资源

例如,在 c++ 中使用 Direct3D 时,我可以编写一个“Cube”类,其中包含一个“ID3D11Buffer* vertexBuffer_”,并确保该 Cube 对象的析构函数调用 vertexBuffer_->Release()。

我可以有一个包含“unique_ptr cube_”对象的“场景”类。所以我知道当我删除我的场景时,立方体将被删除,因此将调用它正在使用的 D3D 资源的释放。

在 DI 中无法做到这一点。我可以编写析构函数,但我不知道什么时候会调用它们。如果 GC 不需要内存,它们可能永远不会被调用......

那么在 D 中处理这种事情的最佳方法是什么?我可以为每个对象添加一个“Free”成员函数,以释放它自己的所有资源并在它拥有的任何对象上调用“Free”,但这似乎是一个容易出错的手动操作,并且从 C++ 倒退了一步。

有没有更好的方法来处理 D 中的这种事情?