Moravian instruments
Vyhledávání
Hlavní menu
Hlavní stránka
O společnosti
Stažení software
Stažení dokumentů
Obchodní partneři
Produkty
Programový systém Control Web
Strojové vidění VisionLab
Kamery DataCam a  osvětlovače DataLight
Průmyslový počítačový systém DataLab
Vědecké CCD kamery
Speciální technika
Ceník
Aktivace produktů
Služby
Školení
Zakázková řešení
Podpora
Rady pro tvorbu aplikací


Hlavní stránka  Produkty  Programový systém Control Web  Články

Vytváříme dobré aplikace - vykreslovače grafiky v programovém prostředí Control Web
 Vykreslovače grafiky nám vymožňují vybrat si, jaké grafické programové rozhraní operačního systému bude použito pro zobrazování virtuálních přístrojů.

Je nutno uznat, že kdo nechce, nemusí se touto problematikou příliš zabývat. Pouze si poskládá vybrané komponenty do podoby své aplikace a má práci hotovou. Se znalostí věci ale můžeme dokázat vice.

V ideálním světě bychom se o metody vykreslování grafiky nemuseli vůbec zajímat. Počítač a operační systém by poskytovaly rychlou 2D i 3D grafiku, k tomu i kvalitní a vždy ostrá písma a vše by samozřejmě bylo možno plynule zvětšovat a zmenšovat. Kvalita, hladkost a současně ostrost by byly vždy maximální bez ohledu na fyzické rozlišení obrazovky. A že by se vše vždy bleskurychle překreslovalo bez jakéhokoliv mihotání, blikání a jiných rušivých efetků se rozumí samo sebou. V prostředí systému Control Web se nám podařilo tohoto ideálu dosáhnout, nebo alespoň jsme se k němu velice přiblížili. Nejdříve si ale odpovězme na několik otázek.

Co jsou to vykreslovače grafiky? Jaký mám zvolit vykreslovač v panelu své aplikace? Jak bude vykreslování grafiky rychlé a jaký na to budu potřebovat počítač?

Vykreslovače grafiky jsou programové komponenty, které pro aplikace zajištují veškeré služby spojené s vykreslováním grafiky. Virtuální přístroje v aplikaci pak tyto služby používají zcela nezávisle na konkrétním typu vykreslovače. Lze volit mezi několika grafickými vykreslovači. Již samotná tato možnost volby může být pro někoho mírně matoucí a vede k několika dalším otázkám. Správný výběr vykreslovače podstatně ovlivňuje vlastnosti vyvíjené aplikace. Pokusme se proto problematiku vykreslování grafiky blíže popsat.

Obr. 1: Volba typu vykreslovače v inspektoru virtuálního přístroje

Obr. 1: Volba typu vykreslovače v inspektoru virtuálního přístroje

Pro virtuální přístroje v aplikacich systému Control Web můžeme pro parametr graphics_mode zvolit jednu z následujících možností:

  • inherited - programová komponenta přebírá vykreslovač od svého vlastníka ve vizuální struktuře.

  • gdi - klasické grafické rozhraní Windows GDI (Graphics Device Interface) s celočíselnými souřadnicemi a vykreslováním přímo do obrazovkové paměti

  • gdi_off_screen - pomocí rozhraní GDI je kresleno do paměti a poté je hotový obrázek přenesen do obrazovkové paměti

  • gdi_plus - grafické rozhraní řešené prostřednictvím C++ tříd využívající již souřadnice v plovoucí řádové čárce

  • direct2d - grafické API, které využívá systému Direct3D. Vektorová grafika je z větší části řešena softwarovým rasterizerem.

  • opengl - otevřené grafické rozhraní, které je používáno řadou operačních systémů. Grafická služby jsou podporovány vždy výrobci grafických karet a grafických procesorů. Odtud plyne maximální akcelerace pomocí hardware a programovatelnost grafických procesorů.

Proč je správná volba jedné z této možností pro kvalitu aplikace důležitá?

Operační systém Windows si s sebou nese docela velkou historickou zátěž. Tato zátěž se pak samozřejmě týká i většiny programového vybavení, které je v tomto operačním systému instalováno. My se nyní z celého rozsáhlého aplikační programové rozhraní Windows budeme zabývat jen podporou vykreslování grafiky. Od počátků existence Windows je jednou z jeho hlavních součástí rozhraní GDI. Byť jsou možnosti GDI v mnoha směrech na dnešní dobu velmi omezené, pro použití při vykreslování např. textů a tabulek nebo klasických dialogových oken je stále velmi dobrým řešením. Výkon je limitovám prakticky nulovým využíváním grafických procesorů ale největším problémem je pro nás omezení na celočíselné souřadnice. Obecné křivky jsou kostrbaté bez možnosti vyhlazování antialiasingem. Omezenost na celá čísla také znemožňuje plynulé zvětšování a zmenšování grafiky. Vzhledem k tomu, že při DGI vykreslování se každý virtuální přístroj překresluje nezávisle na ostatních virtuálních přístrojích ležících vedle něj i pod ním, může u transparentních přístrojů, které nepřekreslují celou svou plochu, docházet k blikání, neboť je nutno překreslovat vše odspodu nahoru. Blikání lze eliminovat volbou gdi_off_screen, kdy se vše pomocí GDI překreslí v paměti počítače a teprve poté se hotový obrázek přenese na obrazovku.

Obr. 2: Panel s přístroji s nastaveným GDI nebo OpenGL vykreslovačem

Obr. 2: Panel s přístroji s nastaveným GDI nebo OpenGL vykreslovačem

GDI vykreslovač je výbornou volbou pro grafiku, která obsahuje např. hodně textu a tabulek. Naopak kvalita vektorových kreseb je velmi problematická. Také je tento grafický systém nutností v panelech, které obsahují např. ActiveX komponenty nebo také OpenGL vykreslovací kontexty kamer využívajících masivně paralelního výkonu grafických procesorů.

Prostřednictvím GDI není možno dostatečně kvalitně vykreslovat obecnou vektorovou grafiku, o 3D grafice nemluvě, proto bylo do Windows doplněno grafické rozhraní GDI+. Toto rozhraní, které je mimochodem tvořeno přímo C++ třídami, přináší do 2D grafiky souřadnice v plovoucí řádové čárce, antialiasing, alpha blending, gradientní výplně a maticové transformační operátory. Obdobně jako GDI, ani GDI+ grafika není nijak hardwarově akcelerována. Vektorová grafika je vykreslována kvalitně, ale výkon může být často nedostatečný.

Obr. 3: Virtuální přístroje 2D a 3D přepínačů umístěné ve scéně nebo v panelu

Obr. 3: Virtuální přístroje 2D a 3D přepínačů umístěné ve scéně nebo v panelu

Větší využití hardwarové akcelerace ve Windows poskytuje aplikační knihovna Direct2D, která využívá grafického systému Direct3D. Klíčovou komponentou systému Direct2D je ale softwarový rasterizer, který využívá pouze CPU počítače. Není tedy zcela zdokumentováno ani není zřejmé, co vše je při používání tohoto rozhraní hardwarově akcelerováno. Vykreslovací výkon je však znatelně vyšší než u GDI+ při srovnatelné kvalitě vykreslené grafiky.

Vykreslovače DGI+ a Direct2D umožňují plynulé zvětšování a zmenšování grafické podoby aplikací. Největší míru hardwarové akcelerace poskytuje grafické rozhraní OpenGL. Tento vykreslovač nejenže poskytuje vysoký výkon, plynulé zvětšování a zmenšování grafiky aplikací, ale jako jediný umožňuje také neomezené současné používání 2D i 3D virtuálních přístrojů ve společném panelu. To zní jako onen ideál, zmíněný v úvodu tohoto článku.

Největším problémem OpenGL grafiky je asi to, že toto grafické rozhraní nemá firma Microsoft příliš ráda. Nejviditelnějším projevem toho vztahu je fakt, že operační systém Windows neposkytuje pro OpenGL prakticky žádnou podporu rasterizace a vykreslování fontů, která je samozřejmá, a mimochodem velmi kvalitní, pro všechna ostatní grafická API z dílny Microsoftu.

Obr. 4: I v klasickém 2D panelu lze využívat grafické efekty 3D přístrojů

Obr. 4: I v klasickém 2D panelu lze využívat grafické efekty 3D přístrojů

Proto byl v systému Control Web 7 pro vysoce kvalitní rasterizaci fontů v OpenGL vykreslovači použit rasterizer FreeType, jaký je využíván např. v operačních systémech Linux, Android, iOS, macOS, PlayStation a v prostředí Java atd. Fonty jsou při zvětšování a zmenšování obrazu vždy rasterizovány s maximální ostrostí ve všech velikostech a ve všech poměrech šířky k výšce. Rozsah znaků byl ale stále omezen na aktuální kódovu stránku. Až Control Web 8 byl vybaven správou fontů v plném rozsahu UNICODE kódování. Problém byl tedy odstraněn.

Předností je hodně, k těm důležitým snad patří, že:

  • OpenGL je podporováno výrobci grafických procesorů. Konkurence mezi firmami Nvidia, AMD a Intel má pozitivní vliv na výkon a kvalitu - tedy za předpokladu, že si vždy nové grafické ovladače také nainstalujeme.

  • OpenGL poskytuje jednotný programovací standard GLSL pro masivně paralelní běh shaderů v grafických procesorech. To je velkým přínosem mimo jiné pro akceleraci virtuálních přístrojů kamer a strojové vidění VisionLab.

  • V jednom panelu nebo scéně lze neomezeně používat virtuální přístroje s tradiční grafikou, přístroje s 2D vektorovými kresbami i virtuální realitu s plně 3D prostorovými přístroji.

  • Velké části grafiky jsou pro zrychlení vykreslování uschovávány v rychlé grafické paměti grafického adaptéru. Značná část grafické zátěže běží v grafickém procesoru a nijak nezatěžuje CPU počítače při běhu aplikace v reálném čase. Při vykreslování 3D scén se uplatňuje architektuta klient - server, také CPU část grafiky běží ve vlastním prováděcím toku.

  • Při vykreslování vektorové grafiky na GPU Nvidia může být využíváno rozšíření nv_path_rendering a veškerá rasterizace grafických objektů včetně písma pak běží s fragmentovou přesností masivně paralelně v GPU. Na grafických adaprérech jiných výrobců bohužel tato technika není k dispozici. Zde musíme využít vestavěnou tesselaci, tj. rozklad kresby do elementárních objektů. Množiny elementů jsou i tak často uloženy do grafické paměti a následně vykreslovány rychle a efektivně.

  • Při vykreslování rasterizovaného písma a některých grafických objektů, jako jsou např. čáry a obdélníky jsou jejich pozice počítány vzhledem k obrazovým bodům aktuálně použité obrazovky pro dosažení maximální ostrosti.

Obr. 6: 3D virtuální přístroje poskytují precizní grafiku ...

Obr. 6: 3D virtuální přístroje poskytují precizní grafiku ...

Obr. 7: ... i při značném přiblížení a zvětšení

Obr. 7: ... i při značném přiblížení a zvětšení

Musíme se při tvorbě aplikace tímto vším zabývat?

Nemusíme, ale pro tvorbu vizuálně působivých aplikací je výhodou znát přednosti i nedostatky jednotlivých grafických vykreslovačů. Náš aplikační program pak může být nejen hezčí, ale také současně i rychlejší a plynuleji běžící.

Obr. 8: Ukázka kvality vestavěné softwarové tesselace a triangulace vektorové grafiky

Obr. 8: Ukázka kvality vestavěné softwarové tesselace a triangulace vektorové grafiky

Snad se nedopustíme přílišného zjednodušení, když uvedeme:

  • Jestliže máme panel s ovládacími prvky v klasickém stylu dialogoných oken systému Windows nebo chceme zobrazovat rozsáhlé tabulky a textové výpisy, zvolíme vykreslovač gdi. Stejně tak musíme učinit u panelu, do kterého vložíme nějaký objekt, který má vlastní vykreslovací kontext, např. ActiveX komponentu nebo virtuální přístroj gl_camera.

  • Vykreslovač gdi_off_screen vybereme tehdy, postačuje-li nám kvalita GDI grafiky, ale chceme odstranit blikání při postupném překreslování jednotlivých grafických objektů nebo chceme-li používat částečně transparentní přístroje.

  • Chceme-li mít hladkou a čistou vektorovou grafiku a nemáme výkonný grafický adaptér ani příliš velké nároky na rychlost, můžeme zvolit vykreslovač gdi_plus.

  • Máme-li lepší grafický adaptér a nebudeme-li v panelu používat trojrozměrné virtuální přístroje, dobře nám vyhoví vykreslovač direct2d.

  • Máme-li výkonný grafický adaptér nebo chceme-li mít v panelu také 3D virtuální přístroje, pak zvolíme vykreslovač opengl. Panel s tímto vykreslovačem bude zobrazovat veškeré 3D komponenty, i když pouze v kolné projekci a bez možnosti pohybu prostorem. Budeme-li chtít využít všech možností, které nám 3D grafika přináší, použijeme místo panelu scénu, která umožňuje zobrazovat prostor s perpektivní projekcí, v tomto prostoru se volně pohybovat, zobrazovat 3D objekty se všemi efekty, jako jsou např, prostorové stíny, mlha, světelné a čočkové efekty, postprocesové filtry atd. Také 3D scéna ale dokáže vykreslovat veškeré 2D virtuální přístroje s klasickým vzhledem v DGI stylu.

Obr. 9: Editaci přístrojů v prostoru scény usnadňují mechanismy lepení a spojování přístrojů i hromadná manipulace s přístroji

Obr. 9: Editaci přístrojů v prostoru scény usnadňují mechanismy lepení a spojování přístrojů i hromadná manipulace s přístroji

Univerzální systém pro moderní grafiku.

Architektura komponent grafických vykreslovačů přináší virtuálním přístrojům možnost používat grafiku na abstraktní úrovni zcela nezávisle od jednotlivých implementací grafických funkcí. To nám otevírá přístup k moderním a výkonným technologiím počítačové grafiky a současně dlouhodobě zachová zpětnou kompatibilitu a umožňuje provoz prostředí Control Web na široké škále počítačů.

Článek tak, jak vyšel v magazínu Elekto Průmysl je v PDF podobě zde: ElektroPrumysl2018grafika.pdf.

Roman Cagaš

 
 | O společnosti | Produkty | Podpora | Stažení software | Stažení dokumentů | 
Moravské přístroje, a.s., Masarykova 1148, Zlín-Malenovice, 76302