我想這個C++的Direct3D功能德爾福轉換,但我有麻煩..轉換Direct3D的C++函數德爾福
HRESULT GenerateTexture(IDirect3DDevice9 *pD3Ddev, IDirect3DTexture9 **ppD3Dtex, DWORD colour32)
{
if(FAILED(pD3Ddev->CreateTexture(8, 8, 1, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, ppD3Dtex, NULL)))
return E_FAIL;
WORD colour16 = ((WORD)((colour32>>28)&0xF)<<12)
|(WORD)(((colour32>>20)&0xF)<<8)
|(WORD)(((colour32>>12)&0xF)<<4)
|(WORD)(((colour32>>4)&0xF)<<0);
D3DLOCKED_RECT d3dlr;
(*ppD3Dtex)->LockRect(0, &d3dlr, 0, 0);
WORD *pDst16 = (WORD*)d3dlr.pBits;
for(int xy=0; xy < 8*8; xy++)
*pDst16++ = colour16;
(*ppD3Dtex)->UnlockRect(0);
return S_OK;
}
這是我的德爾福轉換函數錯誤:
function GenerateTexture(pD3Ddev: IDirect3DDevice9; ppD3Dtex: IDirect3DTexture9; colour32: dword):HRESULT;
var
colour16: word;
d3dlr: D3DLOCKED_RECT;
pDst16: pword;
xy: integer;
begin
if failed(pD3Ddev.CreateTexture(8, 8, 1, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, ppD3Dtex, nil)) then result := E_FAIL;
colour16 := (word(((colour32 shr 28)and $F) shl 12)
or word((((colour32 shr 20)and $F) shl 8))
or word((((colour32 shr 12)and $F) shl 4))
or word((((colour32 shr 4)and $F) shl 0)));
ppD3Dtex.LockRect(0, d3dlr, 0, 0);
pDst16 := PWORD(d3dlr.pBits);
xy:=0;
while xy<(8*8) do begin
Inc(pDst16^);
pDst16^ := color16; //THIS IS THE LINE WITH ERROR: '('Expected but ';' found.
inc(xy);
end;
ppD3Dtex.UnlockRect(0);
Result := S_OK;
end;
我想我將一些錯誤,但我不知道是什麼...
誰能幫助,我呢?謝謝
colour16的拼寫錯誤也許? – 2012-04-12 16:23:07
LOL ...哈哈,謝謝..我沒有注意..其餘的都沒問題?一切正確轉換? – paulohr 2012-04-12 16:28:20
我認爲TheVedge在他的答案中得到了答案。 – 2012-04-12 16:30:32