1 | /* Variablen und Konstanten fuer Display-Emulation */
|
2 | const char headline[] = "TFT ILI9341 Emulation";
|
3 | SDL_Window * pWindow;
|
4 | SDL_Renderer * pRenderer;
|
5 | SDL_Texture * pTexture;
|
6 |
|
7 |
|
8 | /* Grafik-Teil des Mockups mit SDL initialisieren */
|
9 | exit_t tft_sdl_init(void)
|
10 | {
|
11 | SDL_Init(SDL_INIT_VIDEO);
|
12 |
|
13 | int ret = SDL_InitSubSystem(SDL_INIT_VIDEO);
|
14 | assert( ret == 0 );
|
15 |
|
16 | pWindow = SDL_CreateWindow(headline,
|
17 | SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
18 | LCD_EMULATION_SCALE*TFT_WIDTH_PX,
|
19 | LCD_EMULATION_SCALE*TFT_HEIGHT_PX,
|
20 | 0);
|
21 |
|
22 | pRenderer = SDL_CreateRenderer(pWindow, -1, 0);
|
23 | SDL_RenderSetScale(pRenderer, 1.0 * LCD_EMULATION_SCALE, 1.0 * LCD_EMULATION_SCALE);
|
24 |
|
25 | uint32_t pixelformat = SDL_PIXELFORMAT_RGB565;
|
26 |
|
27 | pTexture = SDL_CreateTexture(pRenderer,
|
28 | pixelformat, SDL_TEXTUREACCESS_STATIC,
|
29 | TFT_WIDTH_PX,
|
30 | TFT_HEIGHT_PX);
|
31 |
|
32 | return EXIT_SUCCESS;
|
33 | }
|
34 |
|
35 |
|
36 |
|
37 | /* Vorschriftsmaessige Beendigung vorbereiten */
|
38 | void tft_sdl_deinit(void)
|
39 | {
|
40 | SDL_DestroyTexture(pTexture);
|
41 | SDL_DestroyRenderer(pRenderer);
|
42 | SDL_DestroyWindow(pWindow);
|
43 | SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
44 | }
|
45 |
|
46 |
|
47 | /* Rechteck-Koordinaten umwandeln */
|
48 | static inline SDL_Rect rect2sdl(Rect_t R)
|
49 | {
|
50 | SDL_Rect S;
|
51 | S.x = R.x;
|
52 | S.y = R.y;
|
53 | S.w = R.w;
|
54 | S.h = R.h;
|
55 | return S;
|
56 | }
|
57 |
|
58 |
|
59 | /* Gefuelltes Rechteck zeichnen
|
60 | * return: Anzahl der gezeichneten Pixel
|
61 | * Die Pruefung, ob das gezeichnete Rechteck noch im erlauben Bereich liegt, erfolgt in der
|
62 | * aufrufenden static_inline Funktion tft_drawRect() */
|
63 | // FIXME: Jeder Aufruf dieser Funktion scheint in ein anderes Halbbild zu zeichnen
|
64 | ufast24_t tft_sdl_drawRectF_noclip(Rect_t R, uint16_t color)
|
65 | {
|
66 | //tft_clipkoord(&Pos, &Size); clipping wird von static-inline-Funktion vorgenommen
|
67 |
|
68 | SDL_Rect Rect = rect2sdl(R);
|
69 |
|
70 | Rgb24_t Rgb = color_rgb16to24_s(color);
|
71 |
|
72 | #if 1
|
73 | // FIXME: REMOVEME abschaltbar, um sicherzustellen, dass wirklich alle Zeichenfunktionen
|
74 | // ueber diese Funktion zeichnen
|
75 | SDL_SetRenderDrawColor(pRenderer, Rgb.r, Rgb.g, Rgb.b, SDL_ALPHA_OPAQUE );
|
76 | SDL_RenderFillRect(pRenderer, &Rect);
|
77 | SDL_RenderPresent(pRenderer);
|
78 | // SDL_Delay(10); // Macht das Ergebnis nicht besser, nur langsamer
|
79 | #endif
|
80 |
|
81 | return (uint_fast24_t) R.w * R.h;
|
82 | }
|