我試圖寫的代碼一小塊搶後備緩衝到像素陣列。我之前幾乎沒有使用過directX,因爲我更像是一名OpenGL粉絲。 我的願望是實際替換項目中的一些代碼,該代碼使用非常緩慢的BitBlt和DC抓取後緩衝器。
這應該在所有計算機上工作,這就是爲什麼我選擇了DirectX7的。
我的問題是......我該怎麼做?
謝謝。抓住後備緩衝與DirectX 7
0
A
回答
0
我要做的是使用一個輔助類做鎖定/如下解鎖。然後你使用它像這樣:
mBackBuffer->Flip(DDFLIP_WAIT);
{
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ReadLock r(mBackBuffer, ddsd, NULL /* for whole surface */);
if (r)
{
// ddsd.lpSurface contains the void* pointer to the bytes
// ddsd.lPitch contains the byte count of each horizontal line
}
} // ReadLock當它超出範圍解鎖
class ReadLock
{
public:
ReadLock(IDirectDrawSurface7* surface, DDSURFACEDESC2& ddsd, LPRECT pRect = 0) : surface_(surface), mpRect(pRect), hr(S_OK)
{
hr = surface_->Lock(mpRect, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_NOSYSLOCK | DDLOCK_WAIT | DDLOCK_READONLY, 0);
}
HRESULT getResult() const { return hr; }
bool operator!() const { return FAILED(hr); }
operator bool() const { return SUCCEEDED(hr); }
~ReadLock()
{
if (surface_ && SUCCEEDED(hr))
surface_->Unlock(mpRect);
}
private:
HRESULT hr;
RECT* mpRect;
IDirectDrawSurface7* surface_;
};
0
TBH DirectX 9的將與古卡甚至工作。你沒有所有可用的功能,但你有一個SHED加載更多有用的信息。雖然我認爲你可能在Win 95/9/me的支持上有點勉強,並贏得2K。請記住,NT4從來沒有像樣的DirectX版本。
唉我沒有DX7文檔的任何地方方便,但我敢肯定,你可以只得到後緩衝區表面,然後將其鎖定,以獲得數據。儘管您需要牢記抓取後臺緩衝區的速度有多慢,特別是在舊卡上。通過PCI或AGP總線將本地視頻內存中的後臺緩衝區複製到系統內存的速度非常慢。
究竟是你想達到什麼目的?必須有更好的方式來實現你是什麼後做......
相關問題
- 1. DirectX 11交換鏈和7個後備緩衝區
- 2. DirectX 12索引緩衝區
- 3. DirectX Z緩衝區問題
- 4. crtdbg.h與DirectX衝突嗎?
- 5. Javascript抓住然後承諾
- 6. 在DirectX,C++中映射緩衝區
- 7. DirectX 11多個常量緩衝區
- 8. DirectX深度緩衝不起作用
- 9. 重寫到Directx 3D11緩衝區
- 10. DirectX的自動鎖定緩衝
- 11. DirectX 11的常量緩衝區錯誤
- 12. 結合sdl和directx緩衝區
- 13. DirectX 11.1禁用深度緩衝區
- 14. Java的後備緩衝和動畫
- 15. 複製後備緩衝直接顯存
- 16. 金屬是否有後備緩衝器?
- 17. 如何抓住與preg_match_all
- 18. MYSQL-抓住最後5行後日期
- 19. 爲什麼這個elisp的功能,抓住從緩衝區文本不行
- 20. 緩衝與子
- 21. 與緩衝區
- 22. DirectX:如何初始化錐體的頂點緩衝區和索引緩衝區?
- 23. iOS 7後臺抓取
- 24. 播放緩衝 - iOS設備
- 25. 緩衝IO與非緩衝IO
- 26. 無法抓住protractor.promise.defer.reject
- 27. 抓住的iframe
- 28. php preg_match抓住
- 29. Fiddler抓住PhantomJs
- 30. 如何抓住