2010-12-22 103 views
1

我正在做雙緩衝,方法是創建一個渲染目標及其關聯的深度和模板緩衝區,然後繪製它,然後繪製一個全屏,可能拉伸的四邊形,並使用後臺緩衝區作爲紋理。DirectX 8.1中Surface的紋理

爲此,我使用CreateTexture()調用來創建後臺緩衝區,然後調用GetSurfaceLevel()以從Surface中獲取紋理。這工作正常。

但是,我想直接使用CreateRenderTarget()。它返回一個Surface。但是之後我需要一個紋理來繪製一個四邊形到前端緩衝區。

問題是,我找不到從表面獲取紋理的函數。我已經搜索了DX8.1 doc一次又一次沒有運氣。這樣的功能是否存在?

+0

爲什麼你使用這樣一箇舊版本的DirectX? – 2010-12-22 20:49:34

+0

有沒有理由使用如此古老的DirectX? – Virne 2010-12-22 20:55:38

回答

1

您可以創建與表面匹配尺寸和顏色格式的空紋理。然後將表面的內容複製到紋理的表面。

這是從我的DirectX9代碼片段沒有錯誤處理和其他併發症。它實際上創建了mipmap鏈。 注意StretchRect通過拉伸曲面來匹配目標曲面的幾何圖形進行實際複製。

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是否可行,但上面的copy-method應該可以工作。