Code: Alles auswählen
type
TSingleArray = array[0..15]of Single;
TMatrix = array[0..3, 0..3] of GLfloat;
{ TMatrixfHelper }
TMatrixfHelper = type Helper for TMatrix
function GetList:TSingleArray;
end;
...
function TMatrixfHelper.GetList: TSingleArray;
var
x, y: integer;
begin
for x := 0 to 3 do begin
for y := 0 to 3 do begin
Result[x + y * 4] := Self[x, y];
end;
end;
end;
...
// Hier wird zwingend ein 1D Array gebraucht.
procedure TShader.SetUniformMat4(Name: string; Value: TMatrix);
begin
gl.uniformMatrix4fv(GetUniformLocation(Name), False, Value.GetList);
end;
Jetzt zur Frage, kann man es auf solch eine Art machen, so das nur ein Zeiger auf die List geht, so etwa wie bei "absolute"
Code: Alles auswählen
TMatrixfHelper = type Helper for TMatrix
List: array[0..15] of single absolute Self; // Geht das irgendwie ?
end;
Code: Alles auswählen
procedure TShader.SetUniformMat4(Name: string; Value: TMatrix);
var
m:array[0..15] of Single absolute Value;
begin
gl.uniformMatrix4fv(GetUniformLocation(Name), False, m);
end;