Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 14, 2025 22:07

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Mär 04, 2011 12:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hallo (vorallem Lossy),

Ich hab mich auch mal an der TextSuite versucht, hauptsächlich weil ich eine schnelle und stabile Textlösung suche. Leider bekomme ich keine Ausgabe. Die TextSuite wirft keine Fehler. Wenn ich das Blending ausschalte, sehe ich, wo der Text sein sollte, mehrere weiße Quads, mit Blending sehe ich nur den grünen (Test-)Hintergrund.

Hier ein paar Codeschnipsel:
Code:
procedure TMainForm.InitTextSuite;
var
  SDL, GDI: Boolean;
begin
  if tsInit(TS_INIT_TEXTSUITE) = TS_FALSE then
    raise Exception.Create('Could not initialize TextSuite. Font rendering will fail.');
  if tsInit(TS_INIT_OPENGL) = TS_FALSE then
    raise Exception.Create('Could not initialize opengl interface of TextSuite. Font rendering will fail.');
  SDL := tsInit(TS_INIT_SDL_TTF) = TS_TRUE;
  GDI := (not SDL) and (tsInit(TS_INIT_GDI) = TS_TRUE);
  if not (GDI or SDL) then
    raise Exception.Create('Could neither initialize SDL_TTF nor GDI interface of TextSuite. Font rendering will fail.');

  tsContextCreate(@FTSContext);
  tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL);
  if SDL then
    tsSetParameteri(TS_CREATOR, TS_CREATOR_SDL)
  else
    tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI);
  RaiseLastTSError;

  tsFontCreateCreatorA(PChar(XDG.GetXDGReadOnlyDataPath+'fonts/default.ttf'), 8, TS_STYLE_NORMAL, TS_DEFAULT, TS_DEFAULT, @FTSFont);
  RaiseLastTSError;
  tsPostAddShadow4f(1.1, 0, 0, 1, 1, 1, 0);
  RaiseLastTSError;
end;   

procedure TMainForm.RenderWaterfall;
begin
  // […]
  glTranslatef(0, 529, 0);
  glDisable(GL_TEXTURE_2D);
  glBegin(GL_QUADS);
    glColor4f(0.0, 1.0, 0.0, 1.0);
    glVertex2f(0.0, -16.0);
    glVertex2f(0.0, 0.0);
    glVertex2f(100.0, 0.0);
    glVertex2f(100.0, -16.0);
  glEnd;
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glEnable(GL_TEXTURE_2D);
  tsTextColor4f(1.0, 1.0, 1.0, 1.0);
  glColor4f(1.0, 1.0, 1.0, 1.0);
  RaiseLastTSError;
  tsFontBind(FTSFont);
  RaiseLastTSError;
  tsTextOutA('Hello World');
  RaiseLastTSError;
  glTranslatef(0, -529, 0);
  glDisable(GL_BLEND);
  glDisable(GL_TEXTURE_2D);
end;


Tiefentest und solche Späße sind eigentlich aus. Jedenfalls habe ich sie nicht explizit angeschaltet, Tiefentest und Backfaceculling sogar explizit ausgeschaltet.

Ich hoffe auf Hilfe :)

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 04, 2011 14:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Tja. Keine Ahnung. So auf den ersten Blick sehe ich Nichts wodurch es Probleme geben sollte.
- Fontgröße von 8 ist sehr klein, da es keine Punkte sondern Pixel sind. Also nicht mit den Größen in Office oder Windows verwechseln.
- tsPostAddShadow4f war eigentlich nur ein Workaround für skalierte Fonts. Mittlerweile gibt es dort einen richtig echten Parameter der das auf saubere Art löst. Also entweder einen richtigen Schatten hinmachen oder entfernen. :P
- Haben die weißen Flächen denn wenigstens auch so die Ausmaße wie "Hello World"? Also die müssen so groß sein wie die Buchstaben normal auch wären (H = groß breit; e = kleiner und mittelbreit, l = groß und schmal...). Wenn der Pseudoschatten weg ist dann müsste zwischen den Quads auch ca. 1 Pixel Luft sein. Wenn das der Fall ist, dann stimmen zu mindest schon mal die ausmaße.
- Alternativ bevorzuge mal GDI vor SDL. Keine Ahnung ob SDL/SDL_ttf irgendwann mal aktualisiert wurde. Kann natürlich sein, dass es inkompatibel geworden ist.
- 64 oder 32 Bit Anwendung? 64 Bit macht Probleme.
- Ansonsten wird bei den Zeichen in der Textur nur der Alphakanal gesetzt. RGB sollte über die gesammte Textur weiß sein. Mit tsPostAddBorder könntest du allerdings um den Alphakanal herum einen Rahmen in die RGB Kanäle schreiben. Also selbst ohne Blending sollte da (bei entsprechender Schriftgröße) so was wie Buchstaben in den weißen Quads erkennbar sein. Natürlich nicht, wenn weiß als Farbe nimmt.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 04, 2011 15:27 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Liefert Lossy Beispiele mit? Wennja, dann probier die mal aus um sicher zu gehen, dass nichts grundlegend falsch läuft auf deiner Kiste.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 04, 2011 15:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Lossy eX hat geschrieben:
- Fontgröße von 8 ist sehr klein, da es keine Punkte sondern Pixel sind. Also nicht mit den Größen in Office oder Windows verwechseln.
Ist hauptsächlich Testweise. Wollte erstmal sehen, wie 8px wirkt.

Lossy eX hat geschrieben:
- tsPostAddShadow4f war eigentlich nur ein Workaround für skalierte Fonts. Mittlerweile gibt es dort einen richtig echten Parameter der das auf saubere Art löst. Also entweder einen richtigen Schatten hinmachen oder entfernen. :P
Habe ich so aus den Beispielen übernommen. Welcher Parameter wäre das?

Lossy eX hat geschrieben:
- Haben die weißen Flächen denn wenigstens auch so die Ausmaße wie "Hello World"? Also die müssen so groß sein wie die Buchstaben normal auch wären (H = groß breit; e = kleiner und mittelbreit, l = groß und schmal...). Wenn der Pseudoschatten weg ist dann müsste zwischen den Quads auch ca. 1 Pixel Luft sein. Wenn das der Fall ist, dann stimmen zu mindest schon mal die ausmaße.
Ja, passt so ungefähr.

Lossy eX hat geschrieben:
- Alternativ bevorzuge mal GDI vor SDL. Keine Ahnung ob SDL/SDL_ttf irgendwann mal aktualisiert wurde. Kann natürlich sein, dass es inkompatibel geworden ist.
Irgendetwas sagt mir, dass das unter Linux schwierig werden könnte…

Lossy eX hat geschrieben:
- 64 oder 32 Bit Anwendung? 64 Bit macht Probleme.
Das wirds sein. Ich versuch mal ein 32bit build… (lange gebraucht) Ja, das ist das Problem. Das ist natürlich Mist. Gibts da nen Workaround oder so?

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 04, 2011 16:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Lord Horazont hat geschrieben:
Habe ich so aus den Beispielen übernommen. Welcher Parameter wäre das?
Überredet. Muss ich dann wohl vergessen haben anzupassen. Der Parameter ist TS_CREATOR_ADD_RESIZING_BORDER und muss vor dem Erstellen von Zeichen (nicht Fonts) gesetzt werden. Also idealerweise direkt nach dem setzen des Creators den Parameter hinterschießen.
Code:
tsSetParameteri(TS_CREATOR_ADD_RESIZING_BORDER, TS_TRUE);

Lord Horazont hat geschrieben:
Irgendetwas sagt mir, dass das unter Linux schwierig werden könnte…
Dann ist deine versuchte GDI Initialisierung leicht irreführend. ;)

Lord Horazont hat geschrieben:
Das wirds sein. Ich versuch mal ein 32bit build… (lange gebraucht) Ja, das ist das Problem. Das ist natürlich Mist. Gibts da nen Workaround oder so?
Ich dachte ich hätte eine dev mit FreeType2 auf meinem Server gehabt. Scheint wohl nicht so zu sein. Ansonsten hätte ich gesagt, dass du mal das anschauen kannst. Wobei Linux da eh gar nicht getestet wäre. Geschweige denn 64 Bit.

Es gibt aber keinen Workaround. Ich hatte schon mal versucht den Fehler zu finden. Allerding hatte da wohl Lazarus was dagegen. Ich hatte keine Chance das zu debuggen. Das Einzige was ich feststellen konnte war, dass die Höhe und Breite in dem von TTF_RenderGlyph_Shaded zurückgelieferten Surface nicht zu stimmen scheinen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 04, 2011 16:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Lossy eX hat geschrieben:
Lord Horazont hat geschrieben:
Irgendetwas sagt mir, dass das unter Linux schwierig werden könnte…
Dann ist deine versuchte GDI Initialisierung leicht irreführend. ;)

Ja, ist cross-platform, daher habe ich auch eine optionale GDI-Initialisierung drin ;).

Lossy eX hat geschrieben:
Lord Horazont hat geschrieben:
Das wirds sein. Ich versuch mal ein 32bit build… (lange gebraucht) Ja, das ist das Problem. Das ist natürlich Mist. Gibts da nen Workaround oder so?
Ich dachte ich hätte eine dev mit FreeType2 auf meinem Server gehabt. Scheint wohl nicht so zu sein. Ansonsten hätte ich gesagt, dass du mal das anschauen kannst. Wobei Linux da eh gar nicht getestet wäre. Geschweige denn 64 Bit.
Kann man die FreeType2-dev-Version bekommen? Ich würd die dann mal antesten.

Lossy eX hat geschrieben:
Es gibt aber keinen Workaround. Ich hatte schon mal versucht den Fehler zu finden. Allerding hatte da wohl Lazarus was dagegen. Ich hatte keine Chance das zu debuggen. Das Einzige was ich feststellen konnte war, dass die Höhe und Breite in dem von TTF_RenderGlyph_Shaded zurückgelieferten Surface nicht zu stimmen scheinen.
Wo wir hier drüber stolpern, ich hatte das Problem auch bei anderen Projekten schon… Irgendwie kommt da tatsächlich mist raus. Ich habe aber auch schon in den SDL-Source geschaut und die Typen müssten eigentlich stimmen.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 04, 2011 20:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
SDL: Ich meine die JEDIs hätten so ein Problem auch mal gehabt und irgendwann hieß es es wäre beseitigt. Aber was genau da gemacht wurde. Keine Ahnung. Ich benutze da ja aber auch die JEDIs nicht sondern eigene Header.

FreeType2: Ich habe eben eine Version (0.9 dev) in mein Downloadverzeichnis hochgeladen. Die enthält allerdings nur die Quellen. Mit meinem Skript konnte ich die nicht builden lassen, da mein System aktuell dafür nicht ausgelegt ist.

Unter Linux wird es definitv einen Fehler geben. Und zwar der Dateiname der FreeType.so. Ich weiß nicht genau wie der lauten muss. Der Rest sollte hoffentlich keine Probleme bereiten, da es ja auf den seperaten FreeType Header basiert der von dem ein oder anderen schon mal benutzt wurde (glaube ich). Und wie gesagt. Keine Ahnung ob das unter 64Bit überhaupt läuft. PS: Coolcat hatte mich vor 2 Wochen auch wegen 64 Bit angeschrieben. Er hatte noch folgendes gefunden.
Zitat:
In den Methoden TtsStringHash.Add und .Delete wird ein Hash vom String berechnet: Hier habe ich QWord(pString) statt Cardinal(pString) genommen.
Also dabei wird die Adresse des Strings in ein Hash einsortiert. Und 64Bit Adressen und Cardinal passen nicht so ganz. Das wirst du wohl noch anpassen müssen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 04, 2011 21:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich benutze die TextSuite eh direkt. Also ich habe ein paar korrekturen vorgenommen und damit eine Zugriffsverletzung behoben, genaugenommen in der TextSuiteImportsFreeType2.pas:
Code:
FT_Bool = Byte;
  FT_Int = ptrint;
  FT_Int32 = Integer;
  FT_Short = Smallint;
  FT_Long = ptrint;
  FT_UShort = Word;
  FT_UInt = ptruint;
  FT_ULong = ptruint;
  FT_Fixed = Integer;
  FT_F26Dot6 = Integer;

  FT_Pos = ptrint;     

und
Code:
const
  {$ifdef TS_WIN}
  LIB_FREETYPE2 = 'freetype6.dll';
  {$else}
  LIB_FREETYPE2 = 'libfreetype.so';
  {$endif}         

(ptr(u)int ist jeweils so groß wie ein pointer, ptruint logischerweise unsigned)

Allerdings sehe ich nun nicht mal mehr weiße Quads wenn das Blending aus ist. Irgendein Hinweis, wo ich da mit dem Debugger ansetzen kann?

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mär 05, 2011 10:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wo ist denn da die Zugriffsverletzung aufgetreten? Und ptrint/ptruint gibt es nur unter FreePascal. Delphi bleibt damit außen vor.

Zitat:
LIB_FREETYPE2 = 'libfreetype.so';
Sicher? Bin echt kein Linux Experte. Allerdings wärend meiner Tests etc habe ich festgestellt, dass die ".so" nur existiert, wenn ein developerpacket davon installiert ist. Da fast alles statisch gelinkt ist geht der linker her und verbindet die Anwendung, dann mit einer ".so.irgendwas". Wenn du also die ".so" benutzt wird deine Anwendung nur laufen, wenn da auch das developer packet installiert ist.

Wegen der leeren Bilder da kann ich nur raten. Du solltest da wohl mal in dem Creator schauen und überprüfen was da für Werte ankommen. SDL hatte nur weiße Quads angezeigt, weil die Größen richtig waren aber keine Texturen erstellt wurden. Ich denke hier wird bereits etwas mit den Größen nicht stimmen. Es wird vorher auch überprüft ob die Zeichen überhaupt in dem Font existieren.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mär 05, 2011 11:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Lossy eX hat geschrieben:
Wo ist denn da die Zugriffsverletzung aufgetreten?
An der Stelle wo die Fontmetriken ausgelesen werden. war sowas wie with pFont^.size^.metrices do oder so, ich hab den Code gerade nicht da. Durch die falschen Typen ist da in den Records was verrutscht.

Lossy eX hat geschrieben:
Und ptrint/ptruint gibt es nur unter FreePascal. Delphi bleibt damit außen vor.
Richtig. Deshalb baut man dann für Delphi ein:
Code:
{$IFNDEF FPC}type ptrint = Integer; ptruint = Cardinal;{$ENDIF}
(wahlweise mit mehr oder weniger Zeilenumbrüchen) ein.

Lossy eX hat geschrieben:
Zitat:
LIB_FREETYPE2 = 'libfreetype.so';
Sicher? Bin echt kein Linux Experte. Allerdings wärend meiner Tests etc habe ich festgestellt, dass die ".so" nur existiert, wenn ein developerpacket davon installiert ist. Da fast alles statisch gelinkt ist geht der linker her und verbindet die Anwendung, dann mit einer ".so.irgendwas". Wenn du also die ".so" benutzt wird deine Anwendung nur laufen, wenn da auch das developer packet installiert ist.

Hmm kann sein, ich habe die Dev-Pakete notgedrungen drauf, weil ich eben dagegen linken muss. Der richtige Name ist dann libfreetype.so.6.

Lossy eX hat geschrieben:
Wegen der leeren Bilder da kann ich nur raten. Du solltest da wohl mal in dem Creator schauen und überprüfen was da für Werte ankommen. SDL hatte nur weiße Quads angezeigt, weil die Größen richtig waren aber keine Texturen erstellt wurden. Ich denke hier wird bereits etwas mit den Größen nicht stimmen. Es wird vorher auch überprüft ob die Zeichen überhaupt in dem Font existieren.
Gut, ich werde mir das dann in naher Zukunft mal anschauen.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]