annotate src/system_sdl.c @ 17:41ec033ef8c3

Enable vsync
author Michael Pavone <pavone@retrodev.com>
date Sun, 27 Mar 2016 21:54:13 -0700
parents ae58e7c3c328
children 4c9dbfa30a66
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <SDL.h>
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include <stdint.h>
16
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
3 #include <stdlib.h>
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 SDL_Window *window;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 SDL_Renderer *renderer;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8 SDL_Texture *texture;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 int system_init(int width, int height)
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 if (SDL_Init(SDL_INIT_VIDEO) < 0) {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 fprintf(stderr, "Failed to init SDL: %s\n", SDL_GetError());
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 return 0;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 atexit(SDL_Quit);
17
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
17 window = SDL_CreateWindow("simple16", 0, 0, width, height, 0);
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
18 if (!window) {
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
19 fprintf(stderr, "Failed to create window: %s\n", SDL_GetError());
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 return 0;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 }
17
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
22
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
23 renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
24 if (!renderer) {
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
25 fprintf(stderr, "Failed to create renderer: %s\n", SDL_GetError());
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
26 return 0;
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
27 }
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
28
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB444, SDL_TEXTUREACCESS_STREAMING, 320, 240);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 if (!texture) {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 fprintf(stderr, "Failed to create texture: %s\n", SDL_GetError());
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 SDL_DestroyRenderer(renderer);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 SDL_DestroyWindow(window);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 return 0;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 return 1;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 //Should be called once per frame to get a pointer to the output buffer at the start of rendering
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 uint16_t *system_get_framebuffer(int *pitch)
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 void *pixels;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 if (SDL_LockTexture(texture, NULL, &pixels, pitch) < 0) {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44 fprintf(stderr, "Failed to lock texture: %s\n", SDL_GetError());
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45 return NULL;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47 return pixels;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 //Should be called once per frame at the competion of rendering
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 //The pointer returned by system_get_framebuffer should be discarded after calling this function
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 void system_framebuffer_updated()
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 SDL_UnlockTexture(texture);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 SDL_RenderCopy(renderer, texture, NULL, NULL);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 SDL_RenderPresent(renderer);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58
16
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
59 void system_poll_events()
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
60 {
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
61 SDL_Event event;
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
62 while(SDL_PollEvent(&event))
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
63 {
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
64 switch (event.type)
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
65 {
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
66 case SDL_QUIT:
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
67 exit(0);
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
68 break;
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
69 }
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
70 }
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
71 }
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
72