Shadery. Zaawansowane programowanie w GLSL

Ebook Shadery. Zaawansowane programowanie w GLSL Karol Sobiesiak, Piotr Sydow

Karol Sobiesiak, Piotr Sydow
61,07 zł
Dodaj do ulubionych

Opis treści

Programowanie procesorów graficznych (GPU) staje się coraz popularniejsze. Dzieje się tak przede wszystkim z powodu dynamicznie rozwijającego się rynku gier i zapotrzebowania na deweloperów w tej dziedzinie, ale również z powodu wysokich możliwości obliczeniowych dostarczanych przez te układy. Shadery (programy wykonywane przez GPU) w przeciągu kilku ostatnich lat znacząco się rozwinęły. Aktualnie w OpenGL 4.5 dostępnych jest ich sześć, co jest znacznym wzrostem w stosunku do dwóch, w nadal wszechobecnym, choć archaicznym już OpenGL 2.1. Są one wykorzystywane głównie do zadań związanych z odwzorowywaniem fizycznych własności świata w celu wyświetlania realistycznej grafiki trójwymiarowej, ale także coraz częściej do rozwiązywania bardziej ogólnych problemów natury matematycznej i algorytmicznej. Książka ta zawiera wyczerpujący opis języka programowania shaderów GLSL w wersji 4.50. Stanowi ona niezbędnik dla każdego kto zamierza szybko odnaleźć się w nowoczesnej grafice trójwymiarowej.
Dowiesz się · Czym są shadery · Jak wygląda architektura współczesnego GPU i jakie ma ona znaczenie od strony programistycznej · Jak programować potok renderujący · Na czym polega i jak działa teselacja · Czym jest i jak programuje się shader obliczeniowy (ang. compute shader)
Powinieneś znać · API OpenGL w stopniu przynajmniej podstawowym · Matematyczne podstawy grafiki trójwymiarowej

Spis treści ebooka Shadery. Zaawansowane programowanie w GLSL

Rozdział 1. Wstęp 9

1.1. Do kogo jest skierowana ta książka? 10
1.2. Przydatne narzędzia 11

Rozdział 2. Zrozumieć GPU 13

2.1. Co to jest Shader? 13
2.2. Architektura GPU 14
2.2.1. GPU versus CPU 15
2.2.2. Jednostki wykonawcze GPU 16
2.2.3. Przełączanie kontekstu i unikanie opóźnień 19
2.2.4. Przetwarzanie rozgałęzień 20
2.2.5. Model pamięci 22

Rozdział 3. Potok renderujący OpenGL 29

3.1. Najważniejsze etapy potoku grafi cznego 29
3.1.1. Przetwarzanie geometrii 29
3.1.2. Rasteryzacja 30
3.1.3. Przetwarzanie fragmentów 31
3.1.4. Postprocess fragmentów 32
3.2. Wprowadzenie do programowalnego potoku 32
3.2.1. Shader wierzchołków 33
3.2.2. Teselacja 34
3.2.3. Shader geometrii 37
3.2.4. Shader fragmentów 38
3.3. Kompilacja 39
3.3.1. Proces kompilacji, wiązania i linkowania 39
3.3.2. Wielokrotne wiązanie shaderów tego samego typu 42
3.3.3. Rozłączne programy 43
3.3.4. Status kompilacji 46

Rozdział 4. Podstawy programowania 49

4.1. Język programowania shaderów GLSL 49
4.2. Profile 50
4.3. Interpretacja schematów konstrukcji programistycznych 51
4.4. Nazwy identyfi katorów obiektów 52
4.5. Preprocesor 52
4.5.1. Kontrola wersji shadera (#version) 53
4.5.2. Defi niowanie symboli oraz makrodefi nicji (#defi ne, #undef) 54
4.5.3. Kontrola warunkowej kompilacji (#if, #ifdef, #ifndef, #elif, #else, #endif) 58
4.5.4. Wspomaganie warunkowej kompilacji (#error) 59
4.5.5. Wspomaganie diagnostyki kodu źródłowego (#line) 59
4.5.6. Sterowanie działaniem kompilatora (#pragma) 60
4.5.7. Zarządzanie zestawem rozszerzeń języka GLSL (#extension) 61
4.6. Typy danych 64
4.6.1. Bazowe typy numeryczne – skalary 65
4.6.2. Pochodne typy numeryczne – wektory 70
4.6.3. Pochodne typy numeryczne – macierze 76
4.6.4. Typy uchwytów 83
4.6.5. Typ subroutine 83
4.6.6. Struktury 84
4.6.7. Tablice 86
4.7. Zmienne 92
4.7.1. Zmienne wewnętrzne 93
4.7.2. Zmienne interfejsu 94
4.7.3. Blok interfejsu 96
4.7.4. Deklaracja obiektów użytkownika w modułach shadera 98
4.8. Zakres zmiennych 99
4.9. Operatory 101
4.10. Instrukcje kontroli przepływu 102
4.11. Funkcje 104
4.11.1. Deklaracja funkcji 105
4.11.2. Definicja funkcji 106
4.11.3. Przeładowywanie funkcji 106
4.11.4. Parametry funkcji i wartości zwracane 107

Rozdział 5. Dane 112

5.1. Generyczny magazyn danych (obiekt bufora) 113
5.1.1. Tworzenie buforów 114
5.1.2. Wiązanie buforów 114
5.1.3. Zarządzanie stanem obiektów buforowych 117
5.1.4. Swobodny dostęp do danych bufora 122
5.1.5. Kopiowanie buforów 124
5.1.6. Odczytywanie zawartości buforów 124
5.1.7. Usuwanie buforów 125
5.2. Zmienne oraz bloki uniform 125
5.2.1. Domyślny blok uniform 126
5.2.2. Nazwany blok uniform 133
5.3. Zmienne oraz bloki buffer 147
5.3.1. Blok buforowy 148
5.3.2. Kontrola dostępu do pamięci 151
5.3.3. Operacje atomowe na zmiennych buforowych 155
5.3.4. Organizacja danych w bloku 157
5.3.5. Własności stanu zmiennych oraz bloków buforowych 158
5.3.6. Pozyskiwanie lokacji zmiennych buforowych oraz aktualizacja danych 159
5.3.7. Wiązanie bloku buforowego 159
5.4. Sformatowany magazyn danych (obiekt tekstury) 160
5.4.1. Reprezentacja tekstur w OpenGL 161
5.4.2. Struktura magazynu danych 161
5.4.3. Tworzenie oraz usuwanie tekstur 164
5.4.4. Wiązanie tekstur 165
5.4.5. Alokacja oraz aktualizacja magazynu danych dla tekstur 169
5.4.6. Tekstura buforowa 171
5.5. Tekstury w shaderach 173
5.5.1. Mechanizm teksturowania 174
5.5.2. Zmienne sampler 177
5.5.3. Podstawowa metoda dostępu do złożonych typów tekstur 181
5.5.4. Funkcje wbudowane odpytywania tekstur 189
5.5.5. Zaawansowane funkcje wbudowane dostępu do danych tekstury 190
5.6. Obrazy w shaderach 196
5.6.1. Zmienne image 197
5.6.2. Podstawowe operacje na obrazie 202
5.6.3. Operacje atomowe na obrazie 204
5.7. Liczniki atomowe 207
5.7.1. Tworzenie liczników 207
5.7.2. Własności stanu liczników atomowych 208
5.7.3. Wiązanie buforów z licznikami 208
5.7.4. Operacje atomowe 209
5.8. Dodatkowe metody synchronizacji w dostępie do danych 210
5.8.1. Synchronizacja dostępu w shaderach 210
5.8.2. Synchronizacja dostępu w API 212

Rozdział 6. Programowanie potoku renderującego 213

6.1. Przykładowy program zawierający wszystkie podstawowe shadery 213
6.2. Ogólny obraz komunikacji międzyetapowej 218
6.3. Przekazywanie danych w potoku 220
6.3.1. Atrybuty shadera wierzchołków 221
6.3.2. Interfejsy in/out między etapami 223
6.3.3. Lokacje przy przekazywaniu danych między shaderami 228
6.3.4. Pełne a częściowe dopasowanie 230
6.3.5. Komponenty w lokacjach 231
6.3.6. Sposoby interpolacji przy przekazywaniu danych do shadera fragmentów 232
6.3.7. Wbudowany blok gl_PerVertex 236
6.4. Przebieg i własności teselacji 241
6.4.1. Deklaracja płatu i jego przekształcenie na właściwy prymityw poddawany teselacji 242
6.4.2. Stopnie teselacji 243
6.4.3. Opcje rozstawu 245
6.4.4. Teselacja trójkąta 246
6.4.5. Teselacja czworokąta 250
6.4.6. Teselacja izolinii 252
6.5. Programowanie shadera wierzchołków 253
6.5.1. Optymalizacja liczby wywołań 254
6.5.2. Zmienne wbudowane 255
6.6. Programowanie shadera kontroli teselacji 256
6.6.1. Przepływ danych i deklaracja liczby wywołań 257
6.6.2. Współbieżny dostęp do danych wyjściowych 259
6.6.3. Zmienne wbudowane 261
6.7. Programowanie shadera ewaluacji teselacji 261
6.7.1. Przepływ danych 262
6.7.2. Konfi guracja prymitywów za pomocą wejściowego kwalifi katora layout 263
6.7.3. Zmienne wbudowane 264
6.8. Programowanie shadera geometrii 264
6.8.1. Interfejs wejścia i deklaracja liczby wywołań shadera 265
6.8.2. Interfejs wyjścia – deklaracja prymitywu i emisja wierzchołków 266
6.8.3. Dedykowane prymitywy przylegające 269
6.8.4. Zmienne wbudowane 272
6.9. Programowanie shadera fragmentów 272
6.9.1. Renderowanie do bufora ramki 273
6.9.2. Odrzucanie fragmentów 274
6.9.3. Modyfikacja współrzędnych fragmentów 275
6.9.4. Wczesny test fragmentów i modyfi kacja buforu głębokości 275
6.9.5. Funkcje wbudowane i wywołania wspomagające 278
6.9.6. Zmienne wbudowane 282

Rozdział 7. Mechanizmy uzupełniające 284

7.1. Renderowanie do tekstur 284
7.1.1. Przygotowanie aplikacji 284
7.1.2. Renderowanie do wielu tekstur jako osobnych załączników koloru 286
7.1.3. Renderowanie do tekstur złożonych z wykorzystaniem shadera geometrii 289
7.2. Mechanizm Shader Subroutine 291
7.2.1. Funkcje wywoływane statycznie i dynamicznie 292
7.2.2. Elementy składniowe mechanizmu 294
7.2.3. Przykładowa implementacja 297
7.2.4. Konfigurowanie powiązań zmiennych z funkcjami subroutine 299

Rozdział 8. Shader obliczeniowy 303

8.1. Wprowadzenie 303
8.1.1. Kompilacja i użycie shadera obliczeniowego 304
8.2. Wywołania shadera obliczeniowego i grupy wykonawcze 305
8.2.1. Identyfikacja wywołania 306
8.2.2. Ograniczenia liczby wywołań 307
8.3. Charakterystyka przetwarzania 308
8.3.1. Przetwarzanie lokalnych grup roboczych 308
8.3.2. Pamięć współdzielona – kwalifikator shared 309
8.3.3. Synchronizacja 310

Dodatek 313

Dodatek A 313
Dodatek B 314
Dodatek C 315
Dodatek D 317
Dodatek E 326
Dodatek F 335

Słownik pojęć 341
Bibliografia 343

Szczegóły ebooka Shadery. Zaawansowane programowanie w GLSL

Wydawca:
Wydawnictwo Naukowe PWN
Rok wydania:
2015
Typ publikacji:
Ebook
Język:
polski
Format:
epub,mobi
ISBN:
978-83-01-18397-4
ISBN wersji papierowej:
978-83-01-18199-4
Wydanie:
1
Autorzy:
Karol Sobiesiak,Piotr Sydow
Miejsce wydania:
Warszawa
Liczba Stron:
344
Czas realizacji zamówienia:
Do 10 min

Na jakich urządzeniach mogę czytać ebooki?

Ikona ebooka Na czytnikach Kindle, PocketBook, Kobo i innych
Ikona komutera Na komputerach stacjonarnych i laptopach
Ikona telefonu Na telefonach z systemem ANDROID lub iOS
Ikona urządzenia elektroniczne Na wszystkich urządzeniach obsługujących format plików PDF, Mobi, EPub