dynamische Arrays sind Zeiger, demnach sind die Unterarrays dieses auch
c: Array Of Array Of Array Of byte;
Delphi-Quellcode:
type c2 = Array Of byte;
type c1 = Array Of c2;
var c: Array Of c1;
die ganzen unterarrays (c2) liegen also beim dynamischen Array nicht hintereinander, da für jedes dynamische array ein eigener Speicherblock resserviert wird.
Stell dir
C einfach so vor:
Delphi-Quellcode:
type c2 = Array Of byte;
type c1 = Array Of Pointer{@c2};
var c: Array Of Pointer{@c1};
demnach ist @c[0, 0, 0] nur ein Zeiger auf c[0, 0, 0] bis c[0, 0, ende].
du ließt also nur einen ArrayTeil aus, nämlich c[0, 0] und nachfolgend 'ne Menge Bytes, welche nicht zu deinem Array gehören müssen (halt "undefinierten" Speicher).
[add]
wenn du eine dynamisch Größe brauchst, dann kommst du am einfachsten wenn du nur ein dynamisches Array nimmst und dessen Speicher selber einteilst.
z.B.: (ungetestet, aber ich denk mal es stimmt)
Delphi-Quellcode:
Function LoadAplhaSourceTexture(Maskname, Filename: String): Gluint;
Var
a: packed Array Of Record r, g, b, a: Byte; end;
i, j: Integer;
b, b2: Tbitmap;
const
x = 128;
y = 128;
Begin
b2 := TBitmap.create;
b2.LoadFromFile(Filename);
b := TBitmap.create;
b.LoadFromFile(Maskname);
setlength(c, x * y);
For i := 0 To high(a) Do
For j := 0 To high(c[0]) Do Begin
a[j * y + i].r := getrvalue(b2.canvas.pixels[i, y - 1 - j]);
a[j * y + i].g := getgvalue(b2.canvas.pixels[i, y - 1 - j]);
a[j * y + i].b := getbvalue(b2.canvas.pixels[i, y - 1 - j]);
If b.Canvas.pixels[i, y - 1 - j] = clblack Then a[j * y + i].a := 255
Else a[j * y + i].a := 0;
End;
glGenTextures(1, @Result);
glBindTexture(GL_TEXTURE_2D, Result);
glEnable(GL_TEXTURE_2D);
glTexParameteri(gl_texture_2d, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
glTexParameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
gluBuild2DMipmaps(gl_Texture_2d, GL_RGBA, x, y, GL_RGBA, GL_UNSIGNED_BYTE, @a[0]);
a := nil; // SetLength(a, 0);
b.free;
b2.free;
End;
PS: high(a) + 1 = Length(a)