To určitě ne. Ta složitost totiž není v jazyce. V jiných jazycích vypadá GPU programování +- stejně hnusně, protože je to furt variace na téma "Vyplním 250 parametrů, strčím příkaz do fronty".
A jeden zásadní rozdíl oproti programování v ASM je ten, že tady už naprosto není možné udržovat iluzi toho, že se nějaké instrukce vykonávají jedna po druhé. :)
Naprosto souhlasím s uetoyo a Jiřím Havlem!
A ještě doplním k celé diskuzi: Být blízko železa má své nevýhody, tedy mnoho kódu, jak již zmíněno. Ale má to i své výhody: máte perfektní kontrolu nad věcmi. Máte je doslova ve svých rukou. Dokonce si můžete i spočítat kdy se začíná rendrovat nový snímek na obrazovku. Když víte, že váš snímek se rendruje 6.6ms a snímky se přepínají po 16.6ms, můžete začít rendrovat 10ms po přepnutí předchozího snímku, nebo raději 8 a dát si dvě milisekundy rezervu. Budete tak mít nejnižší možnou latenci. Těsně před rendrováním pak můžete naposledy přečíst pohyb myši a případně ještě pootočit kamerou, takže budete mít nejrychlejší možnou odezvu kamery. Nejsem si vůbec jist, jak by se podobná věc dala implementovat v OpenGL. Nějaký guru by možná nějaký přístup našel (?), ale ve Vulkan to máme tak trochu v ceně zájezdu a "snadno" si to naprogramujeme dle vlastní potřeby.
Co se týká glfw zmíněné v této diskuzi a SDL2 zmíněné ve kterési dřívější diskuzi, bude-li zájem, mohu zvážit doplnit i tyto platformy. Sám potřebuji integrovat Vulkan rendering do Qt, takže můžeme zvážit i tuto platformu. Filozofie tohoto tutoriálu je neomezit člověka na konkrétní knihovnu (glfw, SDL2,...), ale dát mu svobodu použít, co se mu zlíbí, co potřebuje nebo co mu nejvíce vyhovuje. Beru tyto díly mimo jiné také jako "zásobárnu" kódu pro všechny, kteří pracují na různých platformách, takže si vezmou právě ten kód, který potřebují.
Dobry den.
Zasa dakujem za tutorial. Mal som mierne problemy s kompilaciou, cmake sa stazoval na nejake "policy" a nepoznal prikaz "IN_LIST". Co som pochopil ako bezbecnostne opatrenia (?) a ze pre pouzitie urcitych prikazov je mu ich treba povolit. Kompilacia sa podarila pridanim
if(COMMAND cmake_policy)
cmake_policy(SET CMP0057 NEW)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
na zaciatok "CMakeLists.txt" (da sa to obist aj pridanim parametrov k cmake prikazu).
Ale ine som chcel. Mam otazku. Po spusteni mi vykreslilo okno, to ale bolo nedekorovane. Co ma zmiatlo, lebo na Vasom obrazku na konci dekoracie boli. Od coho to zalezi ci budu dekoracie, ci nie?
Dakujem.
Hm, trochu jsem pogooglil po netu a vypadá, že problém se objevil v posledním cmake 3.24.1. Mě se ale zdá, že je to bug v cmake. Nová policy pro CMP0057 je zde od verze 3.3 a CMP0003 od verze 2.6.0. Pokud tedy zavoláme cmake_policy(VERSION 3.10.2), měly by tyto policies být automaticky nastaveny na NEW. A stránka https://cmake.org/cmake/help/latest/command/cmake_policy.html explicitně říká, že:
Note that the cmake_minimum_required(VERSION) command implicitly calls cmake_policy(VERSION) too.
A my v projektu voláme cmake_minimum_required(VERSION 3.10.2). Buď mi něco uniká, nebo je to buga v cmake. Kdybyste ještě na něco přišel, napište.
Aha, tak to bude tym, ze sa neriadim navodom a skusam buildovat priamo z github repozitara a nie z .zip suboru.
V githubovom CMakeLists.txt ten prikaz cmake_minimum_required(VERSION 3.10.2) nie je, pridava sa az v make-zip.sh, ktory vytvare spomnany .zip subor s lekciou. Tam to funguje.
Takze sa ospravedlnujem za pripomienku.
Ale aj tak ma zaujuma to dekorovanie okien. V tomto priklade a aj v nasledujucom (12-resizableWindow) mi na waylandovom GNOME 42 (Manjaro Linux) otvori okno bez dekoracii. Teda bez hornej listy a okrajov. A teda okno sa neda ani presuvat, ani zmenit jeho velkost. Neviete co by to mohlo byt?
Super. Záhada vyřešena. Ano, pokud kompilujete z githubu, musíte v cmake kompilovat všechny examples naráz. Abych se vyjádřil přesně: v cmake musíte nastavit cestu ke zdrojákům do kořene toho, co stáhnete z github. Tam je CMakeLists.txt, který obsahuje cmake_minimum_required a který vám vytvoří solution pro všechny examply naráz. Pro aktivaci konkrétního examplu v MSVC na něj musíte kliknout pravým a vybrat "Set as Startup Project".
Ohledně dekorací okna, pokusím se něco zjistit a odpovím v diskuzi následujícího článku, kde tato věc zazněla poprvé.