"C++ in game programming" [Polish] Prezentacja do wykadu przygotowanego na Koo Naukowe Tw坦rc坦w Gier "Polygon" przy Politechnice Warszawskiej. Opisuje: dlaczego do programowania gier u甜ywa si wanie jzyka C++, co stosowa, a czego unika, aby pisany kod by dobry i przede wszystkim wydajny w dziaaniu.
Date: 2010-10-30
1 of 18
More Related Content
C++ w programowaniu gier
1. C++ w programowaniu gier
Adam Sawicki - www.asawicki.info - 30 pa添dziernika 2010
2. Dlaczego C++?
W jakim jzyku pisze si gry?
Powa甜ne tytuy na PC i konsole - tylko C++!
Inne platformy r坦甜nie
iPhone, iPad Objective C (oraz C++)
Android Java (oraz C++)
Web ActionScript (Flash), JavaScript,
Amatorskie projekty dowolnie
XNA, Java, Python, cokolwiek
2
3. Dlaczego C++?
C++ to nie najwa甜niejszy jzyk na wiecie.
TIOBE Programming Community Index for October 2010
[TIOBE]
3
4. Dlaczego C++?
C++ nie jest idealny [C++FQA]
Jest trudny i obszerny
Np. wska添niki, szablony, przeci甜enia
Wiele rzeczy nieustandaryzowane
Np. stringi, kontenery, obsuga bd坦w, brak ABI
Uboga biblioteka standardowa
Niski poziom
Potrzeba du甜o kodu, 甜eby cokolwiek napisa
atwo o r坦甜norodne bdy, np. w zarzdzaniu pamici
4
5. Dlaczego C++?
Jednak C++ to najlepszy/jedyny wyb坦r do gier
Dostatecznie wysoki poziom, by pisa zo甜one programy
Np. programowanie obiektowe
Dostatecznie niski poziom, by pisa wydajny kod
Np. wska添niki, brak wirtualnej maszyny, rczne zarzdzanie
pamici
Jest szeroko wspieranym standardem
API, biblioteki i silniki do gier maj zwykle interfejs do C/C++
Istniej kompilatory na interesujce nas platformy
PC/Windows, Xbox 360, PlayStation 3
5
6. Nie kombinuj
W programowaniu gier chodzi o to, 甜eby napisa gr
Warto pisa wszystko jak najprociej
Dlatego nie kombinuj!
Nie musisz by mistrzem in甜ynierii oprogramowania
Nie powiniene przekombinowa z programowaniem
obiektowym i wzorcami projektowymi
Nie musisz zna na pami standardu C++
Nie powiniene przekombinowa z preprocesorem, szablonami
i przeci甜aniem operator坦w
6
7. C++ a programowanie gier
Programowanie gier dopiero zaczyna si tam, gdzie
koczy si nauka C++
Problem z konstruktorem klasy? Zrobi metod Init!
Problem z const correctness? Immutability, koncepcja
deskryptora.
Problem z singletonem? Jawnie inicjalizowa i finalizowa
podsystemy!
Za du甜o getter坦w i setter坦w? Pisa struktury, pola
publiczne!
Wiele zagadnie typowych w programowaniu gier
[GPPATTERNS]
Np. podw坦jne buforowanie, architektura komponentowa, pula
obiek坦w
7
9. Optymalizacja
Optymalizacja co w praktyce oznacza?
Jednym kojarzy si z doborem algorytmu o dobrej
zo甜onoci asymptotycznej
Innym kojarzy si z przepisaniem algorytmu na asembler
Prawda le甜y porodku!
Du甜e obiekty przekazywa i zwraca przez wska添nik lub
referencj, nie przez warto
Upraszcza obliczenia matematyczne, mno甜y zamiast
dzieli
Nie definiowa zo甜onych zmiennych wewntrz ptli
Nie ufa optymalizacji kompilatora
9
10. 安霞糸温逮稼看
Dodawanie,
odejmowanie,
mno甜enie
Dzielenie, funkcje
transcendentalne
Branching, metody
wirtualne, skok pod
wska添nik
Dynamiczna alokacja pamici
Zasoby systemowe tekstury, wtki, gniazda
Wejcie-wyjcie pliki, sie
10
11. Optymalizacja
Nietrafienie w pami podrczn cache miss
1980: Odwoanie do pamici RAM 1 cykl procesora
2009: Odwoanie do pamici RAM 400 cykli procesora
[POOP]
11
12. Optymalizacja
Lokalno odwoa wa甜niejsza, ni甜 ilo oblicze
Programowanie obiektowe
Programowanie zorientowane na dane
Obiekty alokowane osobno, rozrzucone po pamici
Obiekty w tablicy, w cigym obszarze pamici
Pakowanie danych
short, char
Flagi bitowe
Pola bitowe
Nawet zmiana kolejnoci p坦l mo甜e wpyn na wydajno!
12
13. Najlepsza optymalizacja
Najszybszy kod to taki, kt坦ry nigdy si nie wykonuje
Precalc przygotowa dane wczeniej, nie liczy za
ka甜dym razem
Podczas wczytywania gry NIE parsowa plik坦w tekstowych,
XML, modeli OBJ, tekstur PNG, nie kompilowa shader坦w
Edytor lub inne narzdzia powinny przygotowa assety w
docelowym formacie: modele do wczytania prosto do VB/VBO,
tekstury w DDS (ewentualnie JPEG), wasne formaty plik坦w,
VFS
Podczas dziaania gry NIE liczy w ka甜dej klatce tego, co
mo甜na przygotowa raz lub policzy raz na jaki czas (np. w
AI)
Stosowa culling i podzia przestrzeni, aby nie
przetwarza tego, czego nie wida lub co nie jest istotne
LOD Level od Detail kiedy mimo wszystko trzeba
przetwarza du甜o danych, mo甜na mniej szczeg坦owo
13
14. Wyjtki
W kodzie powa甜nej gry wyjtki powinny by
nieu甜ywane, a ich obsuga wyczona
Brak standardowego sposobu obsugi bd坦w w C++
Niedoskonao wyjtk坦w C++ - brak finally, RAII nie jest
powszechne
Pojcie bdu w grze nie ma takiego sensu jak w
programie
Wczone wsparcie dla wyjtk坦w w kompilatorze C++ to
du甜a strata wydajnoci, nawet kiedy wyjtki nie s
faktycznie u甜ywane
Kompilatory C++ na konsolach nie wspieraj wyjtk坦w
[KosztWyjtk坦w]
14
15. STL
STL-a te甜 czsto nie u甜ywa si w programowaniu
gier
Wprawdzie warto mie szablony kontener坦w i mog
dziaa wydajnie,
jednak STL robi zbyt du甜o dynamicznych alokacji
pamici.
String坦w u甜ywa tylko do pokazywania tekstu
u甜ytkownikowi, nie wewntrznie w kodzie gry
Unika std::list, std::set, std::map, najlepszy jest
std::vector
EASTL implementacja STL dostosowana do
programowania gier [EASTL], udostpniona ostatnio za
darmo [EASTL/GIT]
15
16. Programowanie r坦wnolege
To dziedzina obszerna, trudna, wci甜 dojrzewajca,
ale bardzo wa甜na, opacalna i ju甜 obowizkowa!
Wtki i muteksy to dopiero pocztek
16
17. Narzdzia
Jedyna suszna platforma: Windows :)
Jedyne suszne IDE: Visual C++ :)
Narzdzia pomocnicze:
ledzenie wyciek坦w pamici: wasny alokator pamici,
Visual Leak Detector
Profilowanie: wasna instrumentacja, Very Sleepy, AMD
CodeAnalyst, Intel Vtune
Debugowanie bibliotek: Debug version of Direct3D, PIX,
PhysX Visual Debugger
Statyczna analiza kodu: CppCheck
17
18. Bibliografia
[TIOBE] TIOBE Programming Community Index for October 2010
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
[C++FQA] C++ FQA, Yossi Kreinin
http://yosefk.com/c++fqa/
[GPPATTERNS] Game Programming Patterns, Robert Nystrom
http://gameprogrammingpatterns.com/
[POOP] Pitfalls of Object Oriented Programming, Tony Albrecht (Sony
Computer Entertainment Europe)
http://bit.ly/90fCdE
[KosztWyjtk坦w] Koszt wyjtk坦w, forum.gamedev.pl
http://forum.gamedev.pl/index.php/topic,19151.msg229335.html#msg229335
[EASTL] EASTL -- Electronic Arts Standard Template Library
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html
[EASTL/GIT] paulhodge / EASTL
http://github.com/paulhodge/EASTL
18