问题标签 [d3dx]

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

c++ - D3DXGetImageInfoFromFile 函数

使用D3DXGetImageInfoFromFile()函数给了我这个:

Unhandled exception at 0x004114d4 in SAMPLE.exe: 0xC0000005: Access violation reading location 0x00000000.

这是包含错误的一段代码:

那么,这里发生了什么?当我输入数字而不是 时Info->...,一切正常......

0 投票
1 回答
1346 浏览

directx - 为另一个渲染通道检索渲染的 depthBuffer。(D3DX9)

我正在将场景渲染到纹理,然后在后续渲染中使用该纹理及其 depthBuffer 来应用一些效果(景深、绽放等)。

这是问题所在:我设法将 DepthStencilBuffer 设置为自定义表面并将我的场景渲染为纹理。场景渲染完美,没有深度问题。话虽如此,当使用纹理(自定义表面绑定到的)时,所有深度值都是 1.0

我怀疑对 device->clear 的调用会影响错误的表面,但即使禁用它们,它也无法解决任何问题。

这是实际的代码:

这是纹理和表面的初始化,因为可能存在错误:

Note that no ASSERT is getting triggered (which is exactly what is pissing me off, I would like some errors as an indication of where to look)

Nic

0 投票
1 回答
183 浏览

c++ - 通常有多少个 D3DXEffect?

我必须使用几个着色器。在这种情况下,通常首选哪种方式?

  1. 制作几个效果
  2. 只有一种效果和几种技术
  3. 或其他方式
0 投票
0 回答
436 浏览

transparency - (D3D11) 透明纹理部分显示以前的纹理而不是渲染场景

我有一个应用程序可以在本质上是 2D 上下文中渲染多个纹理四边形(图像),效果很好。然而,在修改它以使某些纹理的部分透明之后,我停下来试图让它以一种看似标准的、理论上简单的方式表现:我只是希望它按顺序绘制纹理(就像它一直在做的那样),并且当纹理具有透明像素时,显示之前在这些点中绘制的任何内容。

但它所做的是在透明部分后面显示每个先前绘制的纹理的缩放版本,而不是渲染目标的先前渲染部分。因此,例如,如果我尝试绘制一个不透明的背景纹理,然后绘制一个较小的完全透明的纹理,那么背景会绘制得很好,但是透明图像会显示整个背景缩放到新透明图像的大小/位置。

随后的渲染纹理以这种方式继续,显示之前渲染的纹理最终结果(包括之前的纹理中的元素)。

我显然遗漏了一些关于 DirectX 中的纹理/像素着色器如何工作的基本知识(这并不奇怪,因为我对它比较陌生),但是在阅读了所有在线内容之后,我可以搜索并以无数种方式进行实验,我仍然无法弄清楚我需要做什么。

我在像素着色器中使用了一个纹理,这可能是问题的一部分,也可能不是问题的一部分。每次渲染场景时,我都会循环遍历所有要渲染的纹理,调用 PSSetShaderResources() 将不同的纹理绑定到该像素着色器纹理,每次循环,并在每次更改后调用 DrawIndexed()。这似乎是一种有效的方法,因为当像素着色器似乎无法使用任意一个着色器时,拥有大量着色器纹理似乎没有意义(它需要预编译,不?)。

无论如何,我希望这些症状足以让比我更有知识的人立即意识到我所犯的错误。这些领域的代码非常简单,但我不妨包括几个部分:

曾经的场景,对于每个着色器RV:

着色器:

混合描述设置(不要认为问题出在此处): blendDesc.RenderTarget[0].BlendEnable = true;

请让我知道是否有任何其他代码段有用!

0 投票
1 回答
4587 浏览

c++ - 在 MSFT CreateDevice() 函数中创建没有 HWND 输入参数的 D3D 设备

如果我的怀疑是愚蠢或愚蠢的,请原谅我。我对 DirectX 编程完全陌生。只需具备 C++ 知识(非常基本的 COM 知识)。

下面的代码示例来自 MSDN创建 D3D 设备,它解释了如何从头开始创建 D3D 设备。

我的怀疑是

这里函数“ pD3D->CreateDeviceEx() ”接受一个参数HWND hwnd。如果我尝试从需要使用 D3D 设备接口中的某些功能的 commadline C++ win32 应用程序创建 D3D 设备怎么办?如何获得 HWND 字段。在这种情况下如何创建 D3D 设备。请详细解释。

0 投票
1 回答
357 浏览

crash - DirectX 应用程序导致计算机崩溃

我编写了一个 DirectX11 应用程序,该应用程序在带有 GeForce GT 555m 显卡的 Alienware 笔记本电脑上运行,所以我知道计算机支持它。

我遇到了这个奇怪的事情,如果我的笔记本电脑没有插入电源,它会在没有任何警告的情况下关闭,但是如果它插入电源,应用程序运行良好。

我试图用其他 DirectX11 应用程序来复制它,包括 DirectX 附带的示例,但是我的应用程序是唯一一个这样做的,但我使用与示例非常相似的代码。我一定错过了什么,但我不知道是什么。

这是我设置 SwapChain 和 RenderTargetView 的代码

然后这是我设置 DepthStencilState 和 RasterState 的代码

如果有人对可能发生的事情有任何想法,请提供帮助!

0 投票
1 回答
735 浏览

c++ - 使用 ID3DXEffect->SetTexture 取消绑定纹理

在使用 FX 框架将纹理绑定到使用 FX 框架的采样器时,我遇到了一些问题:

一旦该纹理绑定到采样器,我就不能再次渲染它(比如说,当太阳改变位置时)。当我这样做时,会出现以下错误:

Direct3D9:(警告):无法渲染到也用作纹理的渲染目标。渲染目标被检测为绑定,但无法检测纹理是否实际用于渲染。

但是,我不知道如何使用 FX 框架或其他任何可靠的方法“取消设置”纹理。我尝试了几件事:

  • ID3DXEffect->SetTexture(FXShadowtex,NULL)。这会导致崩溃。
  • ID3DXEffect->SetTexture(FXShadowtex,SomeDummy)。这真的很丑。
  • 编译后找出与fx文件中定义的采样器对应的采样器索引,并将其设置为NULL:IDirect3DDevice9->SetTexture(i,NULL)。这显然不是很实用。
  • 忘记警告。由于无休止的垃圾邮件,这使得 D3D 调试输出毫无用处,而且非常难看。
  • 在进行任何渲染之前,从零循环到 fx 文件中定义的采样器数量,并将它们全部设置为 NULL。这也太丑了。

还有其他我忘记的方法吗?解释为什么上述任何“解决方案”都是必要的邪恶也很好。:)

0 投票
1 回答
2751 浏览

c++ - D3DX11SaveTextureToFile 与 ID3D11ShaderResourceView

我有ID3D11ShaderResourceView * textureResView,我想将该纹理保存到文件中。我想我应该先从中提取ID3D11Texture2D出来,所以我做了一个代码:

不幸的是,返回E_FAIL。我做错了什么?

0 投票
1 回答
752 浏览

windows-8 - Windows 8 上的 D3DXCreateFont 替代方案?

我正在玩弄一个挂钩的 DirectX 9 应用程序。如您所知,D3DX 框架在 Windows 8 中已被弃用。Microsoft 建议我们“研究使用 Direct3D API 的替代解决方案”。在 Windows 8 中使用方便的 D3DXCreateFont 的替代解决方案是什么?我正在使用 DirectX 版本 9。如果我仍然能够在 Windows 8 中以某种方式引用 D3DX 框架,那么这是我的首选解决方案。

0 投票
1 回答
780 浏览

direct3d - 如何在每帧(在 D3D10 中)更新像素着色器中的 Texture2D?

使用 D3D10,我正在绘制一个 2d 矩形,并希望用应该每秒更改几次的纹理(位图)填充它(例如显示视频)。

我正在使用带有 Texture2D 变量的着色器效果,并尝试更新 ID3D10EffectShaderResourceVariable 并重绘网格。

我的实际用法是从内存中复制位图,并使用 UpdateSubresource。但它不起作用,所以我将其缩小以测试两个 DDS 图像之间的切换。结果是它按预期绘制了第一张图像,但继续绘制它而不是在两个图像之间切换。

我是 D3D 的新手。您能否解释一下这种方法是否可行,或者建议正确的方法。

着色器效果:

代码(跳过了很多部分):