Rafael Toledo
Sr Sofware Engineer @ Uber
Mega Drive (94-01)
Dreamcast (01-08)
Faculdade (08-11)
XBox 360 (12-14)
Playstation 4 (14-..)
Switch (18-..)
Slide 3
Slide 3 text
Kotlin Native
Slide 4
Slide 4 text
Kotlin Native
Kotlin sem VM
Mas com a StdLib
Sem VM – sem Garbage Collector
Comunica com linguagens nativas
C C++ ObjectiveC Switf
Slide 5
Slide 5 text
Kotlin Native
Kotlin sem VM
Mas com a StdLib
Sem VM – sem Garbage Collector
Comunica com linguagens nativas
C C++ ObjectiveC Switf
Slide 6
Slide 6 text
Linguagem C
Slide 7
Slide 7 text
Sobre a Linguagem C
Já tem quase 50 anos (1972)
Influenciou várias outras
linguagens como:
C++ C# ObjC Go Java Python
JavaScript Perl PHP Rust
Slide 8
Slide 8 text
TODAS as keywords
auto break case char
const continue default do
int long register return
short signed sizeof static
struct switch typedef union
unsigned void volatile while
double else enum extern
float for goto if
Slide 9
Slide 9 text
TODAS as keywords
auto break case char
const continue default do
int long register return
short signed sizeof static
struct switch typedef union
unsigned void volatile while
double else enum extern
float for goto if
Slide 10
Slide 10 text
Tá, mas a
gente não ia
falar de
Gamedev?
Slide 11
Slide 11 text
Game Engines (C/C++)
CryEngine Lumberyard
Unreal Engine Godot
e outras
Slide 12
Slide 12 text
Bibliotecas low-level
SDL Allegro
Qt WxWidgets
e outras
Header file
SDL_Surface *SDL_GetWindowSurface(
SDL_Window *window);
função SDL_GetWindowSurface()
fun SDL_GetWindowSurface()
Slide 45
Slide 45 text
Header file
SDL_Surface *SDL_GetWindowSurface(
SDL_Window *window);
recebe um ponteiro pra SDL_Window
Slide 46
Slide 46 text
Header file
Em C:
typedef struct SDL_Window { ... }
Em Kotlin:
class SDL_Window : CStructVar { ... }
Slide 47
Slide 47 text
Header file
SDL_Surface *SDL_GetWindowSurface(
SDL_Window *window);
recebe uma referência de SDL_Window
fun SDL_GetWindowSurface(
CValuesRef? window)
Slide 48
Slide 48 text
Header file
SDL_Surface *SDL_GetWindowSurface(
SDL_Window *window);
retorna um ponteiro de SDL_Surface
Slide 49
Slide 49 text
Header file
SDL_Surface *SDL_GetWindowSurface(
SDL_Window *window);
retorna um ponteiro de SDL_Surface
fun SDL_GetWindowSurface(
CValuesRef? window):
CPointer
Slide 50
Slide 50 text
eita!
Slide 51
Slide 51 text
SDL em C
SDL_Event e;
while (!SDL_PollEvent(&e)) {
...
}
Slide 52
Slide 52 text
SDL em Kotlin
SDL_Event e;
while (!SDL_PollEvent(&e)) {
...
}
Slide 53
Slide 53 text
SDL em Kotlin
memScoped {
val e = alloc()
while (!SDL_PollEvent(&e)) {
...
}
}
Slide 54
Slide 54 text
SDL em Kotlin
memScoped {
val e = alloc()
while (!SDL_PollEvent(&e)) {
...
}
} // aqui a memória é liberada
Slide 55
Slide 55 text
SDL em Kotlin
while (!SDL_PollEvent(&e)) {
...
}
Slide 56
Slide 56 text
1. C não tem boolean
SDL_PollEvent() retorna 0 ou
não-0
em C, 0 é false, não-0 é true
Slide 57
Slide 57 text
SDL em Kotlin
while (SDL_PollEvent(&e) != 0) {
...
}
Slide 58
Slide 58 text
SDL em Kotlin
SDL_PollEvent(&e)
chamada de função, tudo tranquilo
Slide 59
Slide 59 text
SDL em Kotlin
parâmetro: &e
endereço de memória de uma struct
SDL_Event
Slide 60
Slide 60 text
SDL em Kotlin
parâmetro: &e
endereço de memória de uma struct
SDL_Event
vira
e.ptr.reinterpret()
Slide 61
Slide 61 text
eita!
Slide 62
Slide 62 text
SDL em Kotlin
parâmetro: &e
endereço de memória de uma struct
SDL_Event
vira
e.ptr.reinterpret()
Slide 63
Slide 63 text
outro exemplo
Slide 64
Slide 64 text
SDL em C
SDL_Window *window;
// Acessando os dados de um
// ponteiro pra struct
window->w // retorna a
// largura da tela
Slide 65
Slide 65 text
SDL em Kotlin
var window: CPointer?
// Acessando os dados de um
// ponteiro pra struct
window?.get(0)?.w // retorna a
// largura da tela
Slide 66
Slide 66 text
eita!
Slide 67
Slide 67 text
outro exemplo
Slide 68
Slide 68 text
SDL em C
// Acessando último erro
// retornado pela SDL
printf("Erro: %s\n",
SDL_GetError());
Slide 69
Slide 69 text
SDL em Kotlin
// Acessando último erro
// retornado pela SDL
println("Erro: ${SDL_GetError()?.toKString()}");
Slide 70
Slide 70 text
eita!
Slide 71
Slide 71 text
mas Toledo,
isso funciona
mesmo?
Slide 72
Slide 72 text
easy
normal
hard
Slide 73
Slide 73 text
easy
normal
hard
Slide 74
Slide 74 text
easy
normal
hard
Slide 75
Slide 75 text
easy
normal
hard
Slide 76
Slide 76 text
demo time
Flappy Ball
Slide 77
Slide 77 text
demo time
Flappy Ball
Slide 78
Slide 78 text
o que tudo
isso pode me
ensinar?
Slide 79
Slide 79 text
O que posso aprender?
Exercitar lógica de programação
Slide 80
Slide 80 text
O que posso aprender?
Exercitar lógica de programação
Como isolar uma biblioteca do
código e criar abstrações
Slide 81
Slide 81 text
O que posso aprender?
Exercitar lógica de programação
Como isolar uma biblioteca do
código e criar abstrações
while (SDL_PollEvent(e.ptr.reinterpret()) != 0) {
...
}
Slide 82
Slide 82 text
O que posso aprender?
Exercitar lógica de programação
Como isolar uma biblioteca do
código e criar abstrações
while (eventPool.hasMoreEvents())) {
// eventual abstração
}
Slide 83
Slide 83 text
O que posso aprender?
Exercitar lógica de programação
Como isolar uma biblioteca do
código e criar abstrações
Debugar problemas de lógica – em
uma plataforma "diferente"
Slide 84
Slide 84 text
O que posso aprender?
Exercitar lógica de programação
Como isolar uma biblioteca do
código e criar abstrações
Debugar problemas de lógica – em
uma plataforma "diferente"
Lidar com memória