Auch wenn dieser Thread schon ein wenig älter ist, hole ich ihn nochmal aus der Versenkung... Ich habe nämlich das selbe Problem.
Und zwar möchte ich ein TBitmap direkt in eine Textur laden.
Bisher versuche ich dies so:
Delphi-Quellcode:
function LoadTextureFromBitmap(Appl:TAndorraApplication;ABitmap:Pointer):TAndorraTexture;
var Texture:IDirect3DTexture9;
Format,size:cardinal;
Cursor: pWord;
d3dlr: TD3DLocked_Rect;
begin
result :=
nil;
with TAndorraApplicationItem(Appl)
do
begin
with TBitmap(ABitmap)
do
begin
case PixelFormat
of
pf16bit:
begin Size := 2; Format := D3DFMT_R5G6B5;
end;
pf24bit:
begin Size := 3; Format := D3DFMT_R8G8B8;
end;
pf32bit:
begin Size := 4; Format := D3DFMT_A8R8G8B8
end;
end;
if D3DXCreateTexture(Direct3D9Device, Width, Height,0, 0, Format, D3DPOOL_MANAGED, Texture) = D3D_OK
then
begin
Texture.LockRect(0, d3dlr,
nil, 0);
Cursor := d3dlr.Bits;
//Hier will ich den Bitmapspeicher in den Texturspeicher kopieren, leider gibt es eine AV
Move(ScanLine[0]^,Cursor,Size*AWidth*AHeight);
Texture.UnlockRect(0);
end;
IDirect3DTexture9(Result) := Texture;
end;
end;
end;
Leider gibt es (wie im Quellcode verzeichnet) eine
AV beim kopieren des Bitmapspeichers in den Texturspeicher.
Bekomme ich mit "Scanline[0]" überhaupt den Pointer auf die erste Speicherstelle des Bitmaps? Ist meine Berrechnung von "Size" richtig? Mache ich sonst was falsch?
Danke für eure Antworten!
Andreas alias Igel457
[Edit]Einen "kleinen" Fehler selbst gefunden und im Code korrigiert...[/Edit]