问题标签 [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.
windows - 全屏上的 d3d11 alt-tab 给出了奇怪的结果
首先,经过 4 小时的调试,我的代码没有问题。但我很好奇为什么我遇到了问题。
我用 d3d11 渲染创建了全屏窗口。当我尝试 alt-tab 窗口并且循环中没有 Present()时出现问题(我只是在实现渲染功能之前发现了这个问题)。在这种情况下,在我的屏幕上最小化窗口红色和蓝色通道后交换(是的,字面意思)。
我花了很长时间才找到,因为我怀疑我的交换链或窗口本身(sdl)。你能帮我找出这个错误的原因吗——出于教育目的?
gpgpu - GPU 和确定性
我正在考虑将一些数学运算卸载到 GPU。因为我已经在使用 D3D11,所以我会使用计算着色器来完成这项工作。但问题是我需要相同输入的结果相同,无论用户可能拥有什么 GPU。(仅要求它支持计算着色器 4.0)。
那么 GPU 上的浮点数学是确定性的吗?
如果不是,GPU 是否支持整数数学?
c++ - 当 SampleDesc.Count > 1 时,Direct3D11 调试模式在最终 COM 版本上崩溃
*** FML:这是 FRAPS。停止DX屏幕录制软件并且它可以工作。特别感谢 @zdd 进行了一些联合测试,帮助我解决了这个问题。***
记住:FRAPS + D3D11_CREATE_DEVICE_DEBUG +
SampleDesc.Count > 1
不要混合。
我对 DX 真的很陌生……就像一周前一样。但是这个问题很容易描述,即使我的术语和理解有限。我保持这DEBUG
一层,因为它提供了有价值的反馈。但反过来,它会产生一个我无法克服的问题。我花了 1 天的时间来一根一根地拉头发。
问题
如果我创建一个D3D11
设备:
->Release()
...无论它是哪个对象,它都会在 final 上崩溃。完全相同的DAMN 代码:
... 顺利清理 COM 引用。更不用说这两种变体都可以在没有标志的情况下正常工作。Release
DEBUG
在 中Output
,我得到一些神秘的错误说法live children without parents
。但是我只有 5 个与 COM 包装器一起使用的 COM 对象。
因此,我删除了 COM 包装器,为它们中的每一个手动执行->Release()
和操作。= nullptr
IMO ,不可能错误地发布某些东西。在决赛中->Release()
,它说它遇到了断点。
那么...有没有其他人遇到过这种行为?除非其他人经历了完全相同的事情,否则我认为我无法得到答案。太奇怪了……
编码
帮助!
如果你想让我评论代码以更好地解释逻辑,我会的。我收到的评论提到了清楚地解释问题和代码的事情......也许我不够清楚。
最后的想法
也许我没有调用的某些对象内部有某种释放函数。也许我做错了什么或者真的错了。但我是从一个有信誉的网站上得到的。它与Hello DirectX!
我目前正在沉迷的书中的代码相匹配。
这个片段被精简和简约。在试图找出问题时,这是一个更复杂的版本的精简版本。另外,我删除了所有 OOP,以便将其放在一个易于遵循的代码块中。
现在有最后一个问题:除了这个之外,还有另一种平滑线条的方法
SampleDesc
吗?
PS:它是 Windows 7 x64,VS 2013 + 2014 CTP。并且该卡在调试和发布模式下都支持它(边缘平滑)。只有在调试模式下失败的最终版本。
directx - 将数组作为参数传递给 HLSL 顶点着色器?
我需要将一个数组作为 Direct3D 中的参数传递给我的顶点着色器。着色器函数的签名如下所示:
签名正常吗?如何定义输入布局描述?
提前致谢。
direct3d - 为什么 Direct3D 11 区分 SRV 和 UAV?
我一直在玩 Direct3D 11,并惊讶地发现 HLSLStructuredBuffer<T>
必须绑定到着色器资源视图 (SRV),而RWStructuredBuffer<T>
必须绑定到统一访问视图 (UAV)。深入研究,似乎所有读写着色器资源都需要 UAV,而只读资源需要 SRV。
比较UNORDERED_ACCESS_VIEW_DESC和SHADER_RESOURCE_VIEW_DESC结构,UAV 或多或少是用描述 SRV 的信息子集来描述的。将 UAV 和 SRV 设置为流水线阶段的 API 也非常相似。甚至这两个接口的文档看起来都像是由两位不同的技术作者解释的同一个概念:
- SRV:着色器资源视图接口指定着色器在渲染期间可以访问的子资源。
- UAV:视图接口指定渲染期间管道可以访问的资源部分
我对 D3D11 不是很精通,但在我看来,UAV 的概念使 API 变得复杂而没有太多好处。SRV 和 UAV 之间的区别是为了更好地映射到硬件还是因为技术限制?或者它只是一个 API 设计决定?
c# - SV_DEPTH 在 SharpDX 工具包中不起作用
我正在尝试使用写入 SV_DEPTH 的像素着色器,但使用的是默认值。我确信我写的深度值是正确的,但它们没有写入深度缓冲区。
我在着色器中使用颜色和深度结构作为像素着色器的输出:
我没有在默认的后备缓冲区上渲染。我像这样创建渲染目标和相应的深度缓冲区:
由于我使用的是工具包(v2.5),因此我将深度模板状态设置如下:
对应于sharpdx 文档,默认用法设置了GPU 的读写访问权限。
c++ - D3D11_INPUT_ELEMENT_DESC:元素类型/排序/包装
是否存在与 D3D11_INPUT_ELEMENT_DESC 结构中元素的类型/顺序相关的问题(性能或其他)?例如,我现在有一个这样定义的输入布局:
TEXID
元素是类型UINT
而不是FLOAT
这里重要吗?是否首选针对四分量向量结构(float4)的“对齐”;R32G32B32A32_FLOAT
我应该在布局开始时将所有 s 一起“打包”吗?有什么垫的吗?
c++ - 基于 3DTexture 的体积渲染
我一直在尝试获取一系列 2D 图像,它们的大小都相同并格式化为原始数据,加载到 3D 纹理中,然后在屏幕上渲染该 3D 纹理。由于我对 DirectX 还是很陌生,我不确定我做错了什么。以下是相关代码:
着色器代码尽可能简单:
现在我知道我需要实现某种 alpha 混合才能使其正常工作,但我希望我至少能得到与此一起显示的图片的第一片。但是,我得到的只是我在 Render 函数中设置的背景颜色:
关于我可能做错的任何帮助以及为实现这一目标我需要做的任何进一步提示(从一系列图像中制作 3D 纹理并将其渲染到屏幕上)都会非常有帮助,因为那里网上关于这个的文档很少。
windows-phone-8 - DirectX 11 中的 glPointSize 等效项
我正在渲染一个由点组成的星空(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST)。如果一个点更靠近相机,我会将其放大一倍。这与使用 glPointSize(2.0f) 的 OpenGL 1.x 配合得很好有没有办法在 Windows Phone 8 上使用 DirectX 11 实现这一点?我需要的是一种使渲染点在某些自定义值上显得更大的方法。
任何想法都非常感谢。
direct3d - 请求 RGBA 时 ABGR 格式的 Direct3D 11 纹理
我正在尝试学习如何在 Direct3D 11 中进行纹理映射。
我已成功将纹理映射到四边形。问题是 Direct3D 将我的像素数据解释为 ABGR,当我特别要求DXGI_FORMAT_R8G8B8A8
时,我不明白为什么。
这是我用来创建ID3D11Texture2D
对象的代码:
创建ID3D11ShaderResourceView
对象的代码:
创建ID3D11SamplerState
对象的代码:
最后是 HLSL 像素着色器:
渲染纹理的颜色是
但他们应该是
deviceContext->PSSetShaderResources(0, 1, &shaderResourceView);
而且,当然,我记得打电话给deviceContext->PSSetSamplers(0, 1, &samplerState);
谁能帮我理解这里发生了什么?