Shadery. Zaawansowane programowanie w GLSL

3 oceny

Format:

epub, mobi, ibuk

DODAJ DO ABONAMENTU

WYBIERZ RODZAJ DOSTĘPU

48,30  69,00

Format: epub, mobi

 

Dostęp online przez myIBUK

WYBIERZ DŁUGOŚĆ DOSTĘPU

Cena początkowa: 69,00 zł (-30%)

Najniższa cena z 30 dni: 48,30 zł  


48,30

w tym VAT

TA KSIĄŻKA JEST W ABONAMENCIE

Już od 24,90 zł miesięcznie za 5 ebooków!

WYBIERZ SWÓJ ABONAMENT

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


Rok wydania2015
Liczba stron344
KategoriaProgramowanie
WydawcaWydawnictwo Naukowe PWN
ISBN-13978-83-01-18397-4
Numer wydania1
Język publikacjipolski
Informacja o sprzedawcyePWN sp. z o.o.

INNE EBOOKI AUTORA

Ciekawe propozycje

Spis treści

  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
RozwińZwiń