Seite 1 von 1
Font Antialiasing
Verfasst: 24.12.2009 19:57
von X0r
Hi!
Es geht um folgendes:
Ich verwende ne Grafik-Engine, die, wie so ziemlich jede andere auch, Windows Schriftarten laden kann. Allerdings unterstützt sie dabei kein AA.
Meine Frage wäre nun, wie ich mir Zugriff auf den über die WinAPI geladenen Font verschaffen kann, um so das AA zu aktivieren.
Bin für jede Hilfe dankbar!
Re: Font Antialiasing
Verfasst: 24.12.2009 20:36
von Kaeru Gaman
meines Wissens liegt es nicht daran, wie eine Schriftart geladen wird, sondern an der verwendeten Drawing-Routine.
Re: Font Antialiasing
Verfasst: 24.12.2009 20:40
von Rebon
Vielleicht hilft dir das weiter, aber wenn ich lese was Kaeru geschrieben hat, befürchte ich das es das nicht wird, ich poste es mal trotzdem(ist fast 2 Jahre alt und aus dem englischen Forum von Trond):
Code: Alles auswählen
#DEFAULT_QUALITY
#DRAFT_QUALITY
#PROOF_QUALITY
#NONANTIALIASED_QUALITY = 3
#ANTIALIASED_QUALITY = 4
#CLEARTYPE_QUALITY = 5
#CLEARTYPE_NATURAL_QUALITY = 6
OpenWindow(0, 0, 0, 512, 384, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
LF.LOGFONT
LF\lfHeight = 34
LF\lfWidth = 0
LF\lfEscapement = 0
LF\lfOrientation = 0
LF\lfWeight = #FW_DONTCARE
LF\lfItalic = 0
LF\lfUnderline = 0
LF\lfStrikeOut = 0
LF\lfCharSet = #DEFAULT_CHARSET
LF\lfOutPrecision = #OUT_DEFAULT_PRECIS
LF\lfClipPrecision = #CLIP_DEFAULT_PRECIS
LF\lfQuality = #NONANTIALIASED_QUALITY
LF\lfPitchAndFamily = #DEFAULT_PITCH | #FF_DONTCARE
PokeS(@LF\lfFaceName[0], "Tahoma")
Font = CreateFontIndirect_(@LF)
Debug Font
TextGadget(0, 10, 10, 300, 30, "Welcome to Pixel Palace")
SetGadgetFont(0, Font)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
http://www.purebasic.fr/english/viewtop ... wrapheader
Re: Font Antialiasing
Verfasst: 24.12.2009 20:42
von X0r
@KG:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
fdwQuality Parameter: ANTIALIASED_QUALITY
@Rebon:
Naja, in dem von dir geposteten Code wird ja ein neuer Font erstellt bzw. geladen. Ich hingegen will ja den von der Grafik-Engine bereits geladenen Font irgendwie manipulieren. Wenn ich Glück habe, erwartet die SetFont-Funktion der Engine das OS-handle eines Fonts...moment, ich probiers mal aus...
Edit:
Ne, funktioniert leider nicht. Die LoadFont-Funktion der Engine gibt nicht das OS-handle zurück.
Hm, das was ich vorhabe geht dann wohl so in Richtung "Hack", was?

Re: Font Antialiasing
Verfasst: 25.12.2009 01:23
von Kaeru Gaman
interessant, also findet das bei der Objekterzeugung statt... jedenfalls bei GDI
verwendet denn deine obskure Engine überhaupt diese API?
die damit erzeugte Font ist dann ein GDI-Objekt, das hat doch mit DX/oGL nix zu tun, oder wie seh ich das?
ach btw.. wenn du nicht sagst, welche Engine du benutzt, ist die Wahrscheinlichkeit doch eher gering, dass dir jemand helfen kann, meinst du nicht?
Re: Font Antialiasing
Verfasst: 25.12.2009 02:21
von X0r
Geht um das Blitz3D SDK, und ja, es verwendet diese API. Der Text dürfte auch über GDI gezeichnet werden.
Ich hab mal ausprobiert, selbst nen Font zu laden und einen Text über GDI auf den Frontbuffer zu zeichnen. Funktioniert auch eigentlich, nur flackerts leider (hat auch anscheinend nichts mit der Double-Buffer-Methode zu tun).
Zu diesem Thema habe ich übrigens auch das hier entdeckt:
http://www.blitzbasic.com/Community/pos ... opic=68020
Da schildert jemand dasselbe, obengenannte Problem.
Mit MixailVs Trick kann man sich u.a. direkten Zugang zum BackBuffer verschaffen. Allerdings bekomme ich bei
immer ein IMA. Kompiliert man das ganze als DLL und benutzt die Methode direkt in Blitz3D, scheints zu funktionieren. Liegt wohl irgendwie an den Offsets...
Nur komisch, wieso dann
funktioniert.
Re: Font Antialiasing
Verfasst: 25.12.2009 12:13
von Kaeru Gaman
X0r hat geschrieben:Allerdings bekomme ich bei
immer ein IMA. Nur komisch, wieso dann
funktioniert.
ganz spontan: sicher dass Release den Wert und nicht den pointer auf den Wert haben will?
Re: Font Antialiasing
Verfasst: 25.12.2009 18:03
von X0r
Ja, bei Blitz3D selbst funktioniert es sogar. Nur halt beim SDK nicht.