vložil Radek Červinka
13. září 2011 23:39
Na FireMonkey se mi líbí x věcí a jedna z nich je portabilita. Nyní se objevila nová "platforma", resp. implementace Canvas pro Windows (kromě standardních GDI+ a Direct2D) tak přibyla FMX.Canvas.VPR. Jedná se o malou knihovnu, jejíž autorem je Mattias Andersson ze serveru graphics32.org a projektu VPR, což je polygon rasterizer.
Zdrojové kódy jsou na vpr.svn.sourceforge.net/svnroot/vpr/trunk/fmx. Je tam ještě několik problémů, ale není to špatný pokus - hlavně z hlediska toho, že to používá jen GDI a rychlosti. Prostě jako první řádek v DPR dáte uses FMX.Canvas.VPR a to je vše.
TExtended a 64bit
Jelikož v 64bit se TExtended mapuje na TDouble (což je nativní pro SSE), je možné že pro některé operace budete opravdu potřebovat přesnost extended - v tom případě cc.embarcadero.com/Item/28488 - TExtendedX87: FPU-backed 80-bit Extended type for Win64. Podrobněji blog.synopse.info.
{$EXCESSPRECISION OFF}
U 64bit a float operací ještě zůstaneme: pokud náhodou pracujete se single přesností (tj. například při OpenGL atd), je dobré vědět, že např. mezivýsledkem sčítání (resp. jakékoliv operace) dvou single operandů je double (k vůli zmenšení ztráty přesnosti). To je samozřejmě z hlediska rychlosti ztráta (ale např. MS VC++ to dělá úplně stejně). Pokud ale specifikujete {$EXCESSPRECISION OFF}, viz.wiki tak mezivýsledky zůstanou single a nedojde ke ztrátě.
Jinak rychlosti 64bit počítání se podrobněji věnuje Eric Grange (autor profileru) tady a tady a abych ho citoval: good job Embarcadero. Výsledný kód je 2x - 3x rychlejší v FP operacích než 32bit verze.
TComponent a Observer
Třída TComponent byla rozšířena o Observer pattern.
protected
function CanObserve(const ID: Integer): Boolean; virtual;
procedure ObserverAdded(const ID: Integer; const Observer: IObserver); virtual;
function GetObservers: TObservers; virtual;
public
property Observers: TObservers read GetObservers;
Zatím nevím jak moc to mohu použít - jen je to mohutně používáno ohledně DataBinding.