Mercurial > repos > simple16
comparison src/system_sdl.c @ 15:c8a0dbd7752c
Forgot to commit SDL code
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 27 Mar 2016 21:31:34 -0700 |
parents | |
children | ae58e7c3c328 |
comparison
equal
deleted
inserted
replaced
14:769120da2c1f | 15:c8a0dbd7752c |
---|---|
1 #include <SDL.h> | |
2 #include <stdint.h> | |
3 | |
4 | |
5 SDL_Window *window; | |
6 SDL_Renderer *renderer; | |
7 SDL_Texture *texture; | |
8 | |
9 int system_init(int width, int height) | |
10 { | |
11 if (SDL_Init(SDL_INIT_VIDEO) < 0) { | |
12 fprintf(stderr, "Failed to init SDL: %s\n", SDL_GetError()); | |
13 return 0; | |
14 } | |
15 atexit(SDL_Quit); | |
16 SDL_CreateWindowAndRenderer(width, height, 0, &window, &renderer); | |
17 | |
18 if (!window || !renderer) { | |
19 fprintf(stderr, "Failed to create window or renderer: %s\n", SDL_GetError()); | |
20 return 0; | |
21 } | |
22 texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB444, SDL_TEXTUREACCESS_STREAMING, 320, 240); | |
23 if (!texture) { | |
24 fprintf(stderr, "Failed to create texture: %s\n", SDL_GetError()); | |
25 SDL_DestroyRenderer(renderer); | |
26 SDL_DestroyWindow(window); | |
27 return 0; | |
28 } | |
29 return 1; | |
30 } | |
31 | |
32 //Should be called once per frame to get a pointer to the output buffer at the start of rendering | |
33 uint16_t *system_get_framebuffer(int *pitch) | |
34 { | |
35 void *pixels; | |
36 if (SDL_LockTexture(texture, NULL, &pixels, pitch) < 0) { | |
37 fprintf(stderr, "Failed to lock texture: %s\n", SDL_GetError()); | |
38 return NULL; | |
39 } | |
40 return pixels; | |
41 } | |
42 | |
43 //Should be called once per frame at the competion of rendering | |
44 //The pointer returned by system_get_framebuffer should be discarded after calling this function | |
45 void system_framebuffer_updated() | |
46 { | |
47 SDL_UnlockTexture(texture); | |
48 SDL_RenderCopy(renderer, texture, NULL, NULL); | |
49 SDL_RenderPresent(renderer); | |
50 } | |
51 |