Mmh...so langsam regt mich Delphi echt auf ^^
Ich bin gerade dabei, eine im Quelltext implementierte Vektor-Font zu erstellen, damit das Flackern endlich verschwindet. Diese Funktioniert auch super, löst allerdings jedesmal, wenn ich an der
Unit nix verändert habe (und auch manchmal wenn ich etwas verändert habe) eine Zugriffsverletzung aus, die ich absolut nicht nachvollziehen kann (vor allem da das ganze hin und wieder funktioniert). Ich hoffe dass mir jemand von euch helfen kann, denn ansonsten wird es bei der Textsuite mit dem Flackern bleiben, da ich schon mit dem Online-Highscore ähnliche Probleme hatte (habe dazu auch nen Thread hier in der
DP gestartet, mir konnt niemand helfen), und mir eine zweite
Unit wo dieser Fehler auftritt zu viel ist. Also hab ich mich entschlossen mal den Quelltext von meiner Vektorfont (teilweise) zu veröffentlichen, und schauen ob mir jemand von euch helfen kann.
Delphi-Quellcode:
unit VekFont;
interface
uses dglOpenGL, SysUtils, Dialogs;
type
TLine =
record
x1, y1, x2, y2: Single;
end;
TSingleChar =
record
Length: Integer;
Lines:
array[0..6]
of TLine;
end;
procedure ResetAllLetters;
procedure SetupFont;
function SetUpLine(xx1, yy1, xx2, yy2: Single): TLine;
procedure RenderTextLine(Text:
String; XPos, YPos, Size: Single);
var Letters:
array[32..129]
of TSingleChar;
implementation
procedure RenderTextLine(Text:
String; XPos, YPos, Size: Single);
var x, i: Integer;
begin
// Text := UpperCase(Text);
glBegin(GL_LINES);
for x := 0
to Length(Text)
do
with Letters[Ord(Text[x])]
do
begin
for i := 0
to Length-1
do
begin
//Laut Compiler kommt hier die Exception her, funktioniert aber eig und ist Fehlerfrei in einer einzelnen Anwendung die nur die Font benutzt)
glVertex2f(Lines[i].x1 * Size + XPos + Size * 5 * x, Lines[i].y1 * Size + YPos);
glVertex2f(Lines[i].x2 * Size + XPos + Size * 5 * x, Lines[i].y2 * Size + YPos);
end;
end;
glEnd;
end;
procedure ResetAllLetters;
var
x: Integer;
y: Integer;
begin
for x := Low(Letters)
to High(Letters)
do
begin
Letters[x].Length := -1;
for y := 0
to Length(Letters[x].Lines)
do
begin
with Letters[x].Lines[y]
do
begin
x1 := 0;
x2 := 0;
y1 := 0;
y2 := 0;
end;
end;
end;
end;
function SetUpLine(xx1, yy1, xx2, yy2: Single): TLine;
begin
with Result
do
begin
x1 := xx1;
y1 := yy1;
x2 := xx2;
y2 := yy2;
end;
end;
procedure SetupFont;
begin
ResetAllLetters;
//Space
Letters[32].Length := 0;
// !
with Letters[33]
do begin Length := 2; Lines[0] := SetUpLine(2, 0, 2, 1); Lines[1] := SetUpLine(2, 2, 2, 6);
end;
// Hier werden halt alle Buchstaben deklariert, sind insgesamt etwa 100 Stück, alle Fehlerfrei soweit
end;
initialization SetupFont;
end.
Ich hoffe mal dass da einer von euch was findet was so einen Fehler verursachen könnte.