2. TRE
1. co to jest shadery
2. co mo甜na zrobi przy u甜yciu shader坦w
3. jak dziaa stos renderingu
4. u甜ycie shader坦w w Android
5. sterowanie wywietlieniem
3. DLACZEGO U纏Y OPENGL?
tworzenie gier
animacja
systemy CAD
graficzne przedstawienie informacji
(dla fanatyk坦w) zwikszenie prdkoci zwykej aplikacji
7. FIXED PIPELINE
g l B e g i n ( G L _ P O L Y G O N ) ;
g l C o l o r 3 f ( 0 , 1 , 0 ) ;
g l V e r t e x 3 f ( - 1 , - 1 , 0 ) ;
g l V e r t e x 3 f ( - 1 , 1 , 0 ) ;
g l V e r t e x 3 f ( 1 , 1 , 0 ) ;
g l V e r t e x 3 f ( 1 , - 1 , 0 ) ;
g l E n d ( ) ;
8. DISPLAY LISTS
G L u i n t i n d e x = g l G e n L i s t s ( 1 ) ;
g l N e w L i s t ( i n d e x , G L _ C O M P I L E ) ;
g l B e g i n ( G L _ P O L Y G O N ) ;
g l C o l o r 3 f ( 0 , 1 , 0 ) ;
g l V e r t e x 3 f ( - 1 , - 1 , 0 ) ;
g l V e r t e x 3 f ( - 1 , 1 , 0 ) ;
g l V e r t e x 3 f ( 1 , 1 , 0 ) ;
g l V e r t e x 3 f ( 1 , - 1 , 0 ) ;
g l E n d ( ) ;
g l E n d L i s t ( ) ;
/ / . . .
g l C a l l L i s t ( i n d e x ) ;
9. DRAWABLE ARRAYS
G L f l o a t v e r t i c e s [ ] = { - 1 , - 1 , 0 , - 1 , 1 , 0 , 1 , 1 , 0 , 1 , - 1 , 0 } ;
g l E n a b l e C l i e n t S t a t e ( G L _ V E R T E X _ A R R A Y ) ;
g l V e r t e x P o i n t e r ( 3 , G L _ F L O A T , 0 , v e r t i c e s ) ;
g l D r a w A r r a y s ( G L _ P O L Y G O N S , 0 , 4 ) ;
g l D i s a b l e C l i e n t S t a t e ( G L _ V E R T E X _ A R R A Y ) ;
10. VERTEX BUFFER OBJECTS
G L f l o a t v e r t i c e s [ ] = { - 1 , - 1 , 0 , - 1 , 1 , 0 , 1 , 1 , 0 , 1 , - 1 , 0 } ;
G L u i n t v b o I d ;
g l G e n B u f f e r s A R B ( 1 , & v b o I d ) ;
g l B i n d B u f f e r A R B ( G L _ A R R A Y _ B U F F E R _ A R B , v b o I d ) ;
g l B u f f e r D a t a A R B ( G L _ A R R A Y _ B U F F E R _ A R B , s i z e o f ( v e r t i c e s ) ,
v e r t i c e s , G L _ S T A T I C _ D R A W _ A R B ) ;
/ / . . .
g l B i n d B u f f e r A R B ( G L _ A R R A Y _ B U F F E R _ A R B , v b o I d ) ;
g l E n a b l e C l i e n t S t a t e ( G L _ V E R T E X _ A R R A Y ) ;
g l V e r t e x P o i n t e r ( 3 , G L _ F L O A T , 0 , 0 ) ;
g l D r a w A r r a y s ( G L _ P O L Y G O N S , 0 , 1 2 ) ;
g l D i s a b l e C l i e n t S t a t e ( G L _ V E R T E X _ A R R A Y ) ;
g l B i n d B u f f e r A R B ( G L _ A R R A Y _ B U F F E R _ A R B , 0 ) ;
11. SHADER - CO TO JEST?
kr坦tki program komputerowy, (...), kt坦ry w
grafice tr坦jwymiarowej opisuje waciwoci
pikseli oraz wierzchok坦w.
13. U纏YCIE SHADERW
WOPENGL
1. kompilacja wierzchokowego shaderu
2. kompilacja fragment'owego shaderu
3. linkowanie programu
4. przekazywanie wskaz坦wnik坦w
o dane do programu
5. przekazywanie danych do programu
14. KOMPILACJA SHADERW
WIERZCHOKOWY SHADER
/ / k o m p i l u j e m y w i e r z c h o k o w y s h a d e r
G L i n t c o m p i l e _ o k = G L _ F A L S E , l i n k _ o k = G L _ F A L S E , p r o g r a m ;
G L u i n t v s = g l C r e a t e S h a d e r ( G L _ V E R T E X _ S H A D E R ) ;
c o n s t c h a r * v s _ s o u r c e = " . . . " ;
g l S h a d e r S o u r c e ( v s , 1 , & v s _ s o u r c e , N U L L ) ;
g l C o m p i l e S h a d e r ( v s ) ;
g l G e t S h a d e r i v ( v s , G L _ C O M P I L E _ S T A T U S , & c o m p i l e _ o k ) ;
15. KOMPILACJA SHADERW
FRAGMENTOWY SHADER
/ / k o m p i l u j e m y f r a g m e n t o w y s h a d e r
G L u i n t f s = g l C r e a t e S h a d e r ( G L _ F R A G M E N T _ S H A D E R ) ;
c o n s t c h a r * f s _ s o u r c e = " . . . " ;
g l S h a d e r S o u r c e ( f s , 1 , & f s _ s o u r c e , N U L L ) ;
g l C o m p i l e S h a d e r ( f s ) ;
g l G e t S h a d e r i v ( f s , G L _ C O M P I L E _ S T A T U S , & c o m p i l e _ o k ) ;
16. LINKING PROGRAMU
/ / l i n k u j e m y p r o g r a m
p r o g r a m = g l C r e a t e P r o g r a m ( ) ;
g l A t t a c h S h a d e r ( p r o g r a m , v s ) ;
g l A t t a c h S h a d e r ( p r o g r a m , f s ) ;
g l L i n k P r o g r a m ( p r o g r a m ) ;
g l G e t P r o g r a m i v ( p r o g r a m , G L _ L I N K _ S T A T U S , & l i n k _ o k ) ;
17. PRZEKAZYWANIE DANYCH DO PROGRAMU
/ / z a c h o w u j e m y w s k a z 坦 w n i k o z m i e n n e j s h a d e r u w k l i e n t s k i m p r o g r a m u
G L i n t a t t r i b u t e _ c o o r d 2 d ;
c o n s t c h a r * a t t r i b u t e _ n a m e = " c o o r d 2 d " ;
a t t r i b u t e _ c o o r d 2 d = g l G e t A t t r i b L o c a t i o n ( p r o g r a m , a t t r i b u t e _ n a m e ) ;
18. RENDERING Z U纏YCIEM SHADERU
/ / p r e k a z u j e m y d a n e p r z e z w s k a z 坦 w n i k d o p r o g r a m u
/ / j u 甜 n a e t a p u r e n d e r i n g u
g l U s e P r o g r a m ( p r o g r a m ) ;
g l E n a b l e V e r t e x A t t r i b A r r a y ( a t t r i b u t e _ c o o r d 2 d ) ;
g l V e r t e x A t t r i b P o i n t e r (
a t t r i b u t e _ c o o r d 2 d , / / c o p r z e k a z u j e m y d o p r o g r a m u
2 , / / i l e e l e m e n t 坦 w d l a k a 甜 d e j w i e r z c h 坦 w k i
G L _ F L O A T , / / t y p k a 甜 d e g o e l e m e n t u
G L _ F A L S E , / / u 甜 y c i e o f f s e t 坦 w
0 , / / o f f s e t
v e r t i c e s / / w s k a z 坦 w n i k d o d a n y c h
) ;
g l D r a w A r r a y s ( G L _ P O L Y G O N S , 0 , 4 ) ;
g l D i s a b l e V e r t e x A t t r i b A r r a y ( a t t r i b u t e _ c o o r d 2 d ) ;
19. PRZEKAZYWANIE DANYCH DO SHADERU
1. zachowywanie wskaz坦wnika do
atrybutu shaderu
2. wczenie odpowiednego atrybutu
3. wskazywanie adresu danych
4. wyczenie atrybutu
24. IDENTITY SHADERS
VERTEX SHADER
u n i f o r m m a t 4 u _ M V P M a t r i x ;
a t t r i b u t e v e c 4 a _ P o s i t i o n ;
v o i d m a i n ( )
{
g l _ P o s i t i o n = u _ M V P M a t r i x * a _ P o s i t i o n ;
}
FRAGMENT SHADER
v a r y i n g v e c 4 v _ C o l o r ;
v o i d m a i n ( )
{
g l _ F r a g C o l o r [ 0 ] = 0 . 0 ;
g l _ F r a g C o l o r [ 1 ] = 0 . 0 ;
g l _ F r a g C o l o r [ 2 ] = 1 . 0 ;
}
29. OPENGL
obsuguje wiele
podej renderingu
(fixed pipeline, display
lists, VBO, drawable
arrays...)
dowolne type danych
OPENGL ES
tylko VBO
wycznie dane typ坦w
fixed-point
usunity prymitywy
renderingowe
30. OPTYMIZACJI GIER W ANDROID
efekty nieba, wody, pogody,
ognia, mgy, dymu...
rze添ba terenu
modele high poly
41. PRZESUWANIE KAMERY
mViewMatrix Matrix.setLookAtM(...)
MVPMatrix mProjectionMatrix mViewMatrix
gl_Position = u_MVPMatrix * a_Position
u n i f o r m m a t 4 u _ M V P M a t r i x ;
a t t r i b u t e v e c 4 a _ P o s i t i o n ;
v o i d m a i n ( )
{
g l _ P o s i t i o n = u _ M V P M a t r i x * a _ P o s i t i o n ;
}