Pixel
v jazyku GoŠtudent | Vedúci |
---|---|
Michal Štrba | Michal Forišek |
Stránka na GitHub-e: https://github.com/faiface/pixel
Programovací jazyk Go je (relatívne) nový jazyk, ktorý sa odlišuje od iných jazykov predovšetkým tým, že neprináša žiadne revolučné vlastnosti, ale zato revolučným spôsobom spája existujúce a vytvára tak veľmi konzistentný jazyk, v ktorom je prinicipiálne jeden správny spôsob na všetko.
V Go existuje veľa knižníc na robenie webových serverov a rôznych iných “backend-ových” záležitostí, ale chýbajú dobré knižnice na grafiku, zvuk, prehrávanie videí, či robenie grafických aplikácii s tlačidlami. Totiž, existujú, ale každá existujúca má buď nejaké nedostatky, alebo je iným spôsobom zlá a zle použiteľná.
Preto som sa rozhodol vytvoriť vlastnú multimediálnu knižnicu v jazyku Go.
Toto trio zhrňuje hlavné vlastnosti, ktoré chce knižnica implementovať. Knižnica Pixel sa nesnaží robiť 3D grafiku, všetko prispôsobuje 2D vykresľovaniu. Chce podporovať prehrávanie zvukov a nechce bežať (aspoň zatiaľ) na ničom inom, ako počítače s operačnými systémami Windows, MacOS a Linux.
Hlavná výhoda týchto cieľov je, že sú splniteľné: 3D knižnicu by som nebol schopný spraviť sám, podpora mobilných zariadení by bolo veľa práce navyše, ktorú by nikto nevyužil.
Štandardná knižnica v Go je veľmi bohatá, funkčná a vyspelá. Pokúšať sa implementovať veci, ktoré už sú implementované v nej by bola rana do nohy.
Konkrétne sa jedná napríklad o tieto veci:
"image"
, ktorý načítava rôzne druhy formátov obrazkov a poskytuje aj iné výborné funkcie."image/color"
, ktorý poskytuje rôzne formáty farieb."time"
, ktorým sa dá nie len merať uplynutý čas, ale aj vyvolávať pravidelné “impulzy”, alebo spúšťať funkcie po uplynutí daného času.Cieľom knižnice Pixel je umožniť jej používateľovi robiť veci, nie určovať, ako ich má robiť. Preto knižnica Pixel nedefinuje žiaden “strom entít”, “hierarchiu objektov”, nutnosť registrovať funkcie pre spracovanie udalostí, a podobné veci, ktoré nútia používateľa prispôsobiť sa istéj paradigme tvorby aplikácie.
Knižnica Pixel umožňuje vytvárať okná, kresliť obrázky, geometrické útvary, a podobne, v čo najflexibilnejšom API.
Knižnica Pixel je postavená na niekoľkých základných rozhraniach, ktoré ju robia veľmi flexibilnou. Tieto rozhrania sú Target
, Triangles
a Drawer
. Rozoberme si ich:
Target
je niečo, na čo sa dá kresliť, napríklad okno, mimoobrazovkové plátno a podobne.Triangles
je konkrétny objekt reprezentujúci trojuholníky, ktorý je možné nakresliť len na jeden konkrétny Target
. Tento objekt je zvyčajne vygenerovaný priamo Target
-om. Toto je nutné, pretože každý Target
môže používať iný formát a spôsob kreslenia.Drawer
je niečo, čo sa vie nakresliť na ľubovoľný Target
, napríklad obrázok, alebo geometrický útvar. Zvyčajne to dosiahne tak, že pre každý Target
si vygeneruje vlastnú inštanciu Triangles
, ktorými sa potom kreslí na daný Target
.Tieto rozhrania spolu tvoria veľmi silný systém. Vďaka nim je napríklad možné ľahko implementovať grafické efekty. Grafický efekt môže byť objekt typu Target
, na ktorý sa kresli “rozmazane”, a tak ďalej.
Jedným z hlavných cieľov knižnice Pixel je využiť túto flexibilitu a poskytnúť bohatú zásobu grafických efektov, ľahkých na použitie.
"github.com/faiface/pixel/pixelgl"
(Shader, Texture, VertexArray)Target
, Triangles
, Drawer
TODO: