c++ - 任意大小的 DirectX9 纹理(非 2^n)

标签 c++ directx textures

我对 DirectX 比较陌生,必须处理现有的 C++ DX9 应用程序。该应用程序对相机图像进行跟踪并显示一些 DirectDraw(即 2d)内容。相机的纵横比为 4:3(始终),屏幕未定义。

我想加载一个纹理并将该纹理用作蒙版,因此仅在纹理的蒙版区域内跟踪和显示内容。因此,我想加载一个与相机图像大小完全相同的纹理。

我已经完成了加载纹理的所有步骤,但是当我调用 GetDesc()WidthHeight 的字段 D3DSURFACE_DESC 结构是下一个更大的 2 次幂大小。我不关心用于纹理的实际内存是否针对显卡进行了优化,但我没有找到任何方法来获取硬盘上原始图像文件的尺寸。

我确实(曾经做过,但没有成功)寻找一种可能性,即只将图像加载到计算机 RAM 中(不需要显卡),而无需向代码添加新的依赖项。否则我将不得不使用 OpenCV(这在跟踪方面可能是个好主意),但目前我仍然尽量避免使用 OpenCV。

感谢您的指点, 诺伯特

最佳答案

D3DXCreateTextureFromFileEx参数 3 和 4 为

D3DX_DEFAULT_NONPOW2.

之后,你可以使用

D3DSURFACE_DESC Desc;
m_Sprite->GetLevelDesc(0, &Desc);

获取高度和宽度。

关于c++ - 任意大小的 DirectX9 纹理(非 2^n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1187157/

相关文章:

c++ - 解析 linux 内核文件 "Idle Service Error semantic-idle-summary-idle-function - Arithmetic error"时出现 cedet-语义错误 "jiffies.h"

c++ - 使用 Directx10 渲染

c++ - 在 DirectX 10 中导入 .x 模型

c++ - irrlicht 模型加载/动画

java - Java 中的纹理数组

c++ - std::vector pop_back() 实现

c++ - arduino错误: expected ',' or '...' before numeric constant

c++ - unique_ptr 没有操作删除

c++ - DirectX 11 调试层捕获错误字符串

canvas - 我们可以在 Threejs 中预加载纹理/图像以避免渲染期间等待吗?