Současná verze programového prostředí Control Web v6 sice obsahuje
vedle dnes již letité GDI grafiky také moderní a výkonný 3D
vykreslovací stroj s architekturou klient – server.
Je zde ale několik problémů:
GDI grafické API systému Windows je již velmi zastaralé,
docela dobře vyhovuje pro vykreslování grafického uživatelského
rozhraní vývojového prostředí, ale pro efektní vizualizace má
podstatné nedostatky:
Nelze používat antialiasing.
Nejsou k dispozici potřebné funkce pro vektorovou grafiku
s cestami a gradienty.
Možnosti akcelerace pomocí grafických procesorů jsou
zcela minimální
Stávající 3D vykreslovací systém neobsahuje veškeré
komponenty a virtuální přístroje pro tvorbu grafických uživatelských
rozhraní.
2D a 3D grafické panely jsou zcela samostatnými oddělenými
světy bez možnosti sdílení virtuálních přístrojů.
A v neposlední řadě je postupně stával problémem i
poměrně konzervativní a dlouhodobě nezměněný vzhled řady bitmap,
ikon i vektorově vykreslovaných virtuálních přístrojů.
Všechny tyto nedostatky jsme se rozhodli v nové verzi odstranit.
Navrhli jsme skutečně velkorysý systém, který nejen řeší veškeré výše
uvedené problémy, ale přináší spoustu nové funkčnosti a je s rezervou
připraven na několik scénářů budoucího vývoje počítačové grafiky.
Objektově orientovaná grafika
Grafické funkce, které používají programové komponenty systému
Control Web jsou nezávislé na grafickém API operačního systému.
Celé rozhraní na grafické funkce je soustředěno do objektů tzv.
vykreslovačů (rendererů). Během kreslení grafiky strukturou
komponent protéká událost s vazbou na konkrétní aktivní
vykreslovač. Programové komponenty se tedy kreslí stále stejnými
postupy nezávisle na grafickém API operačního systému. Externí
komponenty vykreslovačů grafiky Počet a druhy vykreslovačů není
nijak omezen. Vykreslovače jsou pro systém Control Web externími
komponentami v samostatných dynamicky linkovaných knihovnách. Při
startu prostředí Control Web jsou vykreslovače dynamicky
detekovány a připojeny k systému.

Kombinace 2D a 3D virtuálních přístrojů v jedné
scéně
Nyní jsou k dispozici tyto vykreslovače:
GDI – vše je kresleno pomocí standardního GDI API systému
Windows. Vykreslení některých grafických primitiv může být
částečně akcelerováno grafickým adaptérem. Míra akcelerace je
ale neznámá a něco o ní ví asi pouze firma Microsoft.
GDI offscreen – kreslí se rovněž pomocí GDI, ale obraz
vzniká v paměti počítače a zobrazuje se až celý naráz. Tím jsou
odstraněny rušivé efekty během vykreslování.
GDI+ – využívá se grafické API systému Windows v podobě
C++ tříd. Tento vykreslovač má již grafický kontext, jehož obsah
se na obrazovku vykresluje bez rušivých efektů. Je zde k
dispozici antialiasing, transformace obrazu s plovoucí řádovou
čárkou a lepší možnost pro kreslení cest a gradientů. Nevýhodou
tohoto vykreslovače je téměř naprostá absence akcelerace pomocí
grafických procesorů.
D2D – tento vykreslovač využívá API Direct2D. Toto API je
k dispozici od operačního systému Windows 7 a je postaveno jako
další vrstva nad rozhraním DirectX a Direct3D. Je zde již silně
využívána akcelerace grafickými procesory, i když o míře
akcelerace jednotlivých funkcí rovněž nejsou dostatečné
informace. Tento vykreslovač má již plnou podporu pro
vykreslování cest a gradientů. Transformace a souřadný prostor v
plovoucí řádovou čárkou je samozřejmostí. Silnou stránkou je
rovněž kvalita vykreslování fontů a textů.
OpenGL – Tento vykreslovač využívá všech výhod standardu
OpenGL, který je nejrozšířenějším grafickým API, používají jej
všechny současné operační systémy, jako je Linux, Android, iOS a
naštěstí je k dispozici i ve Windows. Implementace tohoto
vykreslovače v prostředí Control Web maximálně využívá
akcelerace grafických funkcí pomocí grafických procesorů a
dosahuje tak vysokého výkonu grafiky. OpenGL vykreslovač dokáže
v jednom 2D panelu či 3D scéně propojit možnosti veškerých 2D i
3D virtuálních přístrojů. V běžných panelech mohou být používány
3D virtuální přístroje a naopak v 3D scéně mohou být pro
vytvoření grafického uživatelského rozhraní vloženy veškeré
existující 2D přístroje.
Nové vykreslovače pro vektorovou grafiku a standard
SVG
Ve 3D grafice máme v prostředí systému Control Web již nějakou
dobu vše, co jen můžeme potřebovat – pomocí třírozměrných modelů,
textur, shaderů, mlhy, stínů, zdrojů světla a postprocesových
efektů můžeme zobrazit téměř cokoliv v prakticky fotografické
kvalitě. Ve 2D grafice potřebujeme pro grafické rozhraní dokázat
vykreslit základní grafická primitiva, jako je čára, obdélník
vyplněný buď plnou barvou nebo barevným přechodem, bitmapa a
fonty. Pro škálovatelnou vektorovou grafiku je to ale
nedostatečné. Zde musíme kvalitně a rychle vykreslovat libovolné
spojité křivky a tvary ohraničené těmito křivkami je nutno
vyplňovat lineárními i radiálními barevnými přechody. To vše je
nutno dělat v souřadnicích s plovoucí řádovou čárkou.
Právě tyto vlastnosti přinášení nové vykreslovače GDI+, D2D a
OpenGL. Nové funkce vykreslovačů nám umožňují vytvořit lépe
vypadající virtuální přístroje. Nyní máme k dispozici virtuální
přístroje, které mohou načítat a zobrazovat škálovatelné vektorové
kresby ve formátu SVG (Scalable Vector Graphics). Tento formát je
otevřeným všeobecně přijatým standardem. Jeho podstatnou předností
je to, že se jedná textový XML dokument, který je čitelný i pro
člověka.
SVG grafická data lze v prostředí systému Control Web
pomocí několika komponent:
Virtuální přístroj svg – tento přístroj funguje ve všech
vykreslovačích, tedy i v základním GDI. Kvalita kresby je
omezena vlastnostmi jednotlivých grafických rozhraní.
Virtuální přístroj gl_drawing – tento přístroj může být
umístěn do 3D scény, 3D panelu nebo i do 2D panelu s OpenGL
vykreslovačem. Vektorové grafické prvky jsou tesselovány a
jejich vykreslování je akcelerováno pomocí grafického procesoru.
Radiální barevné gradienty jsou vytvářeny fragmentovým
shaderem.
Virtuální přístroj gl_gpu_draving - tento přístroj může
být rovněž umístěn do 3D scény, 3D panelu a do 2D panelu s
OpenGL vykreslovačem. Grafická karta musí podporovat OpenGL
rozšíření NVidia Path Rendering. Vektorová grafika je v tomto
případě dynamicky generována grafickým procesorem s přesností na
jednotlivé pixely. Toto řešení zajišťuje maximální možnou
kvality výsledného obrazu při minimální zátěži CPU počítače.
Většina grafických dat je v podobě objektů uložena v grafické
paměti. Rychlost je zajištěna vysokým masivně paralelním výkonem
současných GPU.
Architektura objektů grafických vykreslovačů je
navržena s ohledem na maximální možnosti optimalizace a
akcelerace grafiky při využívání jednotlivých grafických
rozhraní:
Vykreslovače podporují veškeré stávající bezprostřední
grafické příkazy pro vykreslování prvků uživatelských
rozhraní
Jsou k dispozici grafické objekty, které lze jednou
vytvořit a opakovaně používat.
Vykreslovače mohou tyto objekty tesselovat do základních
akcelerovaně vykreslovaných primitiv.
U některých grafických rozhraní lze objekty nebo skupiny
objektů uložit do rychlé paměti grafických karet pro maximálně
rychlé a efektivní vykreslování.
Barvy, fonty, šířky čar, barevné přechody atd. jsou
ukládány do objektů barev, které lze mezi grafickými objekty
sdílet.
Vykreslovače jsou otevřené externí dynamicky linkované
komponenty, které jsou připraveny pro libovolné budoucí grafické
standardy a potřeby.
Spojení 2D a 3D světa
Způsoby vykreslování 3D a 2D grafiky se značně odlišují.
Zatímco v trojrozměrném obrazu je viditelnost každého bodu
definována jeho hloubkou v prostoru scény a jeho případným
překrytím bližšími body (bude-li bod vykreslen se řeší testem jeho
hloubky – bližší body překrývají vzdálenější a vzdálené nejsou
kresleny), pro kreslení dvourozměrných obrazů je používán tzv.
malířův algoritmus, kdy se jednotlivé vykreslované body neustále
přepisují novým obsahem a nakonec zůstane viditelné to, co bylo
nakresleno jako poslední. OpenGL vykreslovač dokáže tyto rozdílné
mechanismy vytváření grafiky spojit do jediného obrazu. Konečně
již tedy nenarážíme na bariéru mezi prostorem 3D scény a plochou
panelu.
Nyní můžeme:
Používat veškeré existující 3D virtuální přístroje mezi
ostatními přístroji v běžném panelu. 3D modely jsou zobrazovány
v orthografické kolmé projekci a mohou být rovněž libovolně
natočeny pomocí parametru ortho_rotate. V panelu také fungují
všechny animace i částicové efekty, jako je kouř, oheň, jiskry
atd. 
Standardní 2D panel s OpenGL
vykreslovačem
Používat veškeré existující 2D virtuální přístroje mezi
ostatními přístroji v prostoru 3D scény. 2D přístroje se
vykreslují na stejné pozici, jako by byly umístěny v 2D panelu.
Při pohybu kamery ve scéně zůstávají stále na své pozici a
pohybuje se prostor scény za nimi. 
2D přístroje ve 3D scéně
Obecné neomezené možnosti zvětšování a zmenšování grafiky
její přizpůsobení libovolnému monitoru
Vývoj výpočetní techniky přináší grafické zobrazovací panely se
stále vyšším bodovou hustotou. Tzv. retina displeje v telefonech,
tabletech a přenosných počítačích vyžadují takové aplikace, které
nejsou vytvořeny pro nějakou pevnou pixelovou velikost obrazovky.
Obrazovky se liší jak poměrem stran, tak hustotou obrazových bodů.
V současnosti jsou běžné displeje 2560 × 1440 a 3200 × 1800 bodů a postupně se objevují
2840 × 2160 a
5760 × 3210 bodů.
Ve Windows je možnost, a u obrazovek s vysokým rozlišením i
nutnost, nastavit si DPI obrazovky (počet bodů na palec). Toto nám
umožní zvětšit si písmo a prvky uživatelského rozhraní abychom pro
práci nepotřebovali lupu, ale pro řešení problému libovolného
rozlišení a poměru stran obrazovky je toto nedostatečné. Proto
vykreslovače systému Control Web, které již dokážou pracovat se
souřadným systémem v plovoucí řádové čárce, umožní každý
panel aplikace libovolně zvětšit či zmenšit. Při těchto změnách
velikosti vykreslovaného obrazu může být zachována původní
proporce mezi šířkou a výškou virtuálních přístrojů.
U vektorových kreseb není změnou velikosti téměř nijak
poznamenána kvalita obrazu. Pro zachování kvality bitmapových
obrázků systém dokáže pracovat s několika velikostmi každé ikony a
tyto velikosti zdrojových bitmap volit podle míry zvětšení či
zmenšení.

Při zvětšování a zmenšování mohou být buď zachovány
proporce grafiky ...
Architektura grafických vykreslovačů překovává veškerá minulá
omezení a je dobře připravena na budoucnost.
Roman Cagaš
|