我正在尝试将此 C++ Direct3D 函数转换为 Delphi,但我遇到了麻烦..
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;
}
这是我的 Delphi 转换函数,但有错误:
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;
我想我在转换一些错误的东西,但我不知道是什么......
谁能帮我?谢谢