diff options
Diffstat (limited to 'main.cpp')
-rw-r--r-- | main.cpp | 60 |
1 files changed, 59 insertions, 1 deletions
@@ -1,6 +1,9 @@ #include <iostream> #include <ncurses.h> #include <cmath> +#include <cstdint> +#include <vector> +#include <SDL2/SDL.h> #include "chfb.h" #include "obj3d.h" #include "math_vector.h" @@ -19,7 +22,7 @@ #define PI 3.1415926535f -int main() { +void main_term() { // init setlocale(LC_ALL, ""); initscr(); @@ -253,5 +256,60 @@ int main() { // terminate endwin(); +} + +#define SCREEN_WIDTH 640 +#define SCREEN_HEIGHT 480 + +void main_SDL() { + SDL_Window* window = NULL; + SDL_Renderer* renderer = NULL; + SDL_Texture* texture = NULL; + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + fprintf(stderr, "Error: SDL_Init error: %s\n", SDL_GetError()); + return; + } + window = SDL_CreateWindow("Engine", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); + if (window == NULL) { + fprintf(stderr, "Error: SDL_CreateWindow error: %s\n", SDL_GetError()); + return; + } + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, SCREEN_WIDTH, SCREEN_HEIGHT); + std::vector<uint32_t> pixels(SCREEN_WIDTH * SCREEN_HEIGHT); + for (int y = 0; y < SCREEN_HEIGHT; y++) { + for (int x = 0; x < SCREEN_WIDTH; x++) { + pixels[x + y * SCREEN_WIDTH] = ((uint32_t) (x + y * SCREEN_WIDTH) << 8) | 0xFF; + } + } + SDL_UpdateTexture(texture, NULL, pixels.data(), SCREEN_WIDTH * 4); + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, NULL, NULL); + SDL_RenderPresent(renderer); + SDL_UpdateWindowSurface(window); + SDL_Event e; + bool quit = false; + while (!quit) { + while (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT) { + quit = true; + } + } + } + SDL_DestroyTexture(texture); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); +} + +int main(int argc, char *argv[]) { + (void) argc; + (void) argv; +#if 0 + main_term(); +#else + main_SDL(); +#endif return EXIT_SUCCESS; } |