gpt4 book ai didi

c++ - DirectX 8.1 中来自表面的纹理

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:54 26 4
gpt4 key购买 nike

我正在通过创建一个渲染目标及其关联的深度和模板缓冲区来进行双缓冲,绘制到它,然后绘制一个全屏,可能是拉伸(stretch)的,使用后缓冲区作为纹理的四边形。

为此,我使用 CreateTexture() 调用来创建后台缓冲区,然后使用 GetSurfaceLevel() 调用从 Surface 获取纹理。这很好用。

但是,我想直接使用 CreateRenderTarget()。它返回一个表面。但是我需要一个纹理来将四边形绘制到前台缓冲区。

问题是,我找不到从表面获取纹理的函数。我一次又一次地搜索 DX8.1 文档,但没有成功。有这样的功能吗?

最佳答案

您可以创建与表面尺寸和颜色格式相匹配的空纹理。然后将表面的内容复制到纹理的表面。

这是我的 DirectX9 代码的一个片段,没有错误处理和其他复杂情况。它实际上创建了 mipmap 链。备注StretchRect通过拉伸(stretch)表面以匹配目标表面的几何形状来进行实际复制。

IDirect3DSurface9* srcSurface = renderTargetSurface;
IDirect3DTexture9* tex = textureFromRenderTarget;
int levels = tex->GetLevelCount();

for (int i=0; i<levels; i++)
{
IDirect3DSurface9* destSurface = 0;
tex->GetSurfaceLevel(i, &destSurface);
pd3dd->StretchRect(srcSurface, NULL, destSurface, NULL, D3DTEXF_LINEAR);
}

当然,这是针对 DirectX 9 的。对于 8.1,您可以尝试 CopyRect 或 Blt。

在 Dx9 上有 ID3DXRenderToSurface可以直接使用纹理中的表面。我不确定 Dx8.1 是否可行,但上面的复制方法应该可行。

关于c++ - DirectX 8.1 中来自表面的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4513082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com