问题标签 [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.
c++ - 如何创建具有有效尺寸的常量缓冲区
晚上好,
我正在尝试将 XMFLOAT3X3 发送到常量缓冲区(请参见下面的代码)。
但是编译器告诉我 XMFLOAT3X3 是常量缓冲区字节宽度的无效维度:
但是,我对 HLSL 有点陌生,所以我不确定是否将 bytewidth 设置为 48,着色器的 cbuffer 中的 float3x3 是否会正确注册。我应该如何最好地处理这个?
如果您需要更多信息,请发表评论,我将编辑问题。我希望它足够清楚。
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个缓冲区,其中一个缓冲区用于绘制,另一个缓冲区用于在场景上显示,并交换缓冲区。两个以上的缓冲区有什么用,有什么好处?
c++ - 常量缓冲区中的纹理变换矩阵无法正常工作
我试图通过将纹理坐标硬编码到 0 和 1 来剪辑纹理,然后将包含 3x3 纹理变换矩阵的常量缓冲区发送到顶点着色器。
但是,纹理没有像我预期的那样渲染。我不确定我哪里出错了。有人可以帮忙吗?请参阅下面的代码。
为了测试,我尝试使用一个恒等矩阵来保持纹理坐标不变,但纹理以一种非常奇怪的方式显示出来。
这是纹理:(出现的颜色实际上是透明区域,除了黑色和心形较柔和的红色)
变形纹理:
HLSL:
VBuffer 硬编码:
矩阵定义:
Game_Manager GMSetTransformMatrix() 定义:
缓冲区初始化:
direct3d11 - 什么是绑定 ID3D11DeviceContext::PSSetShaderResource()
PSSetShaderResource()的第一个参数:
StartSlot:“索引到设备的从零开始的数组以开始设置着色器资源”
那么整数索引和您的 .hlsl 变量之间的关系是什么?在 d3d9 中,一切都是基于字符串的名称。现在这些整数索引似乎缺少了一些东西......
假设你有一个着色器文件:
还有一个..
如果您只使用shader_1.psh,那么当它们位于单独的文件中时,您如何区分它们?
hlsl - 编写 HLSL4 像素着色器以从 2D 纹理执行查找
我是一个初学者像素着色器作家,我遇到了一些麻烦。我想获取一个 256x256、16 位输入 (DXGI_FORMAT_R16_UINT) 图像,并通过 256x256 查找纹理 (DXGI_FORMAT_R8_UNORM) 将其转换为 256x256 8 位输出。
不幸的是,我似乎遇到了很多麻烦,输出似乎总是夹在黑色或白色上。
此外,我不确定我应该使用哪种 DXGI 格式,以及哪种数据类型与每种格式相关。
在尝试将其转换为 2D 索引之前,我应该对 pixelValue 进行规范化吗?
我应该在使用索引之前对其进行规范化吗?
我应该取样吗?
我什至在正确的道路上吗?
我将不胜感激任何帮助,谢谢!
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 组件索引纹理?或者它会很好地工作吗?
不想为此使用 GPGPU 框架(所以请不要 CUDA 建议 :)。
hlsl - 您可以在顶点着色器中查看纹理样本吗?
在着色器模型 3.0 中,我很确定这是否定的,但我还是想问这个,
在着色器模型 5.0 中,您可以在顶点着色器中对纹理进行采样吗?
如果我想为每个顶点提供大量补充信息,我有什么选择?
编辑:显然可以进行顶点纹理提取,如此处,但是当我在我的 hlsl 着色器模型 5 程序中尝试它时,我得到了错误
错误 X4532:无法将表达式映射到 vs_5_0 指令集
pixel-shader - 片段的行列索引,HLSL着色器
您可以在 HLSL (DX11) 片段着色器中获取当前片段的行和列吗?
c++ - 每个基于 DirectX SDK 的应用程序运行缓慢
不知从何而来,我运行的每个 directx 应用程序项目只给我 4fps,我不知道为什么会发生这种情况......?所有的示例、网站上的教程、基本的 directx 程序(例如在单个项目中初始化设备)都给了我相同的结果。
我仍然可以正常玩零售游戏,只是我使用directx sdk从visual studio运行的任何东西都运行异常。
我在 W7 64bit、GTX460m (DX11) 上运行最新的图形驱动程序、DX SDK(2010 年 6 月)、8gb 的 RAM、i7 cpu......
如果有人可以提供帮助,我将不胜感激。
d - D语言释放资源
例如,在 c++ 中使用 Direct3D 时,我可以编写一个“Cube”类,其中包含一个“ID3D11Buffer* vertexBuffer_”,并确保该 Cube 对象的析构函数调用 vertexBuffer_->Release()。
我可以有一个包含“unique_ptr cube_”对象的“场景”类。所以我知道当我删除我的场景时,立方体将被删除,因此将调用它正在使用的 D3D 资源的释放。
在 DI 中无法做到这一点。我可以编写析构函数,但我不知道什么时候会调用它们。如果 GC 不需要内存,它们可能永远不会被调用......
那么在 D 中处理这种事情的最佳方法是什么?我可以为每个对象添加一个“Free”成员函数,以释放它自己的所有资源并在它拥有的任何对象上调用“Free”,但这似乎是一个容易出错的手动操作,并且从 C++ 倒退了一步。
有没有更好的方法来处理 D 中的这种事情?