Browse Source

Merge pull request #23 from tsoding/remove-sdl

Remove SDL renderer
Alexey Kutepov 4 years ago
parent
commit
aec872ab68
7 changed files with 10 additions and 317 deletions
  1. 1 1
      build.sh
  2. 1 1
      build_msvc.bat
  3. 0 54
      src/font.c
  4. 0 28
      src/font.h
  5. 8 190
      src/main.c
  6. 0 41
      src/sdl_extra.c
  7. 0 2
      src/sdl_extra.h

+ 1 - 1
build.sh

@@ -6,7 +6,7 @@ CC="${CXX:-cc}"
 PKGS="sdl2 glew"
 PKGS="sdl2 glew"
 CFLAGS="-Wall -Wextra -std=c11 -pedantic -ggdb"
 CFLAGS="-Wall -Wextra -std=c11 -pedantic -ggdb"
 LIBS=-lm
 LIBS=-lm
-SRC="src/main.c src/la.c src/editor.c src/font.c src/sdl_extra.c src/file.c src/gl_extra.c"
+SRC="src/main.c src/la.c src/editor.c src/sdl_extra.c src/file.c src/gl_extra.c"
 
 
 if [ `uname` = "Darwin" ]; then
 if [ `uname` = "Darwin" ]; then
     CFLAGS+=" -framework OpenGL"
     CFLAGS+=" -framework OpenGL"

+ 1 - 1
build_msvc.bat

@@ -9,4 +9,4 @@ set LIBS=dependencies\SDL2\lib\x64\SDL2.lib ^
          dependencies\GLEW\lib\glew32s.lib ^
          dependencies\GLEW\lib\glew32s.lib ^
          opengl32.lib User32.lib Gdi32.lib Shell32.lib
          opengl32.lib User32.lib Gdi32.lib Shell32.lib
 
 
-cl.exe %CFLAGS% %INCLUDES% /Feded src\main.c src\la.c src\editor.c src\font.c src\sdl_extra.c src\file.c src\gl_extra.c /link %LIBS% -SUBSYSTEM:windows
+cl.exe %CFLAGS% %INCLUDES% /Feded src\main.c src\la.c src\editor.c src\sdl_extra.c src\file.c src\gl_extra.c /link %LIBS% -SUBSYSTEM:windows

+ 0 - 54
src/font.c

@@ -1,54 +0,0 @@
-#include "./font.h" 
-#include "./sdl_extra.h"
-
-Font font_load_from_file(SDL_Renderer *renderer, const char *file_path)
-{
-    Font font = {0};
-
-    SDL_Surface *font_surface = surface_from_file(file_path);
-    scc(SDL_SetColorKey(font_surface, SDL_TRUE, 0xFF000000));
-    font.spritesheet = scp(SDL_CreateTextureFromSurface(renderer, font_surface));
-    SDL_FreeSurface(font_surface);
-
-    for (size_t ascii = ASCII_DISPLAY_LOW; ascii <= ASCII_DISPLAY_HIGH; ++ascii) {
-        const size_t index = ascii - ASCII_DISPLAY_LOW;
-        const size_t col = index % FONT_COLS;
-        const size_t row = index / FONT_COLS;
-        font.glyph_table[index] = (SDL_Rect) {
-            .x = (int) col * FONT_CHAR_WIDTH,
-            .y = (int) row * FONT_CHAR_HEIGHT,
-            .w = FONT_CHAR_WIDTH,
-            .h = FONT_CHAR_HEIGHT,
-        };
-    }
-
-    return font;
-}
-
-void render_char(SDL_Renderer *renderer, const Font *font, char c, Vec2f pos, float scale)
-{
-    const SDL_Rect dst = {
-        .x = (int) floorf(pos.x),
-        .y = (int) floorf(pos.y),
-        .w = (int) floorf(FONT_CHAR_WIDTH * scale),
-        .h = (int) floorf(FONT_CHAR_HEIGHT * scale),
-    };
-
-    size_t index = '?' - ASCII_DISPLAY_LOW;
-    if (ASCII_DISPLAY_LOW <= c && c <= ASCII_DISPLAY_HIGH) {
-        index = c - ASCII_DISPLAY_LOW;
-    }
-
-    scc(SDL_RenderCopy(renderer, font->spritesheet, &font->glyph_table[index], &dst));
-}
-
-void render_text_sized(SDL_Renderer *renderer, Font *font, const char *text, size_t text_size, Vec2f pos, Uint32 color, float scale)
-{
-    set_texture_color(font->spritesheet, color);
-
-    Vec2f pen = pos;
-    for (size_t i = 0; i < text_size; ++i) {
-        render_char(renderer, font, text[i], pen, scale);
-        pen.x += FONT_CHAR_WIDTH * scale;
-    }
-}

+ 0 - 28
src/font.h

@@ -1,28 +0,0 @@
-#ifndef FONT_H_
-#define FONT_H_
-
-#include <SDL2/SDL.h>
-
-#include "./la.h"
-
-#define FONT_WIDTH 128
-#define FONT_HEIGHT 64
-#define FONT_COLS 18
-#define FONT_ROWS 7
-#define FONT_CHAR_WIDTH  (FONT_WIDTH  / FONT_COLS)
-#define FONT_CHAR_HEIGHT (FONT_HEIGHT / FONT_ROWS)
-#define FONT_SCALE 5
-
-#define ASCII_DISPLAY_LOW 32
-#define ASCII_DISPLAY_HIGH 126
-
-typedef struct {
-    SDL_Texture *spritesheet;
-    SDL_Rect glyph_table[ASCII_DISPLAY_HIGH - ASCII_DISPLAY_LOW + 1];
-} Font;
-
-Font font_load_from_file(SDL_Renderer *renderer, const char *file_path);
-void render_char(SDL_Renderer *renderer, const Font *font, char c, Vec2f pos, float scale);
-void render_text_sized(SDL_Renderer *renderer, Font *font, const char *text, size_t text_size, Vec2f pos, Uint32 color, float scale);
-
-#endif // FONT_H_

+ 8 - 190
src/main.c

@@ -18,50 +18,24 @@
 #include "./la.h"
 #include "./la.h"
 #include "./sdl_extra.h"
 #include "./sdl_extra.h"
 #include "./gl_extra.h"
 #include "./gl_extra.h"
-#include "./font.h"
 
 
 #define SCREEN_WIDTH 800
 #define SCREEN_WIDTH 800
 #define SCREEN_HEIGHT 600
 #define SCREEN_HEIGHT 600
 #define FPS 60
 #define FPS 60
 #define DELTA_TIME (1.0f / FPS)
 #define DELTA_TIME (1.0f / FPS)
 
 
+#define FONT_SCALE 5
+#define FONT_WIDTH 128
+#define FONT_HEIGHT 64
+#define FONT_COLS 18
+#define FONT_ROWS 7
+#define FONT_CHAR_WIDTH  (FONT_WIDTH  / FONT_COLS)
+#define FONT_CHAR_HEIGHT (FONT_HEIGHT / FONT_ROWS)
+
 Editor editor = {0};
 Editor editor = {0};
 Vec2f camera_pos = {0};
 Vec2f camera_pos = {0};
 Vec2f camera_vel = {0};
 Vec2f camera_vel = {0};
 
 
-Vec2f camera_project_point(SDL_Window *window, Vec2f point)
-{
-    return vec2f_add(
-               vec2f_sub(point, camera_pos),
-               vec2f_mul(window_size(window), vec2fs(0.5f)));
-}
-
-
-void render_cursor(SDL_Renderer *renderer, SDL_Window *window, const Font *font)
-{
-    const Vec2f pos =
-        camera_project_point(
-            window,
-            vec2f((float) editor.cursor_col * FONT_CHAR_WIDTH * FONT_SCALE,
-                  (float) editor.cursor_row * FONT_CHAR_HEIGHT * FONT_SCALE));
-
-    const SDL_Rect rect = {
-        .x = (int) floorf(pos.x),
-        .y = (int) floorf(pos.y),
-        .w = FONT_CHAR_WIDTH * FONT_SCALE,
-        .h = FONT_CHAR_HEIGHT * FONT_SCALE,
-    };
-
-    scc(SDL_SetRenderDrawColor(renderer, UNHEX(0xFFFFFFFF)));
-    scc(SDL_RenderFillRect(renderer, &rect));
-
-    const char *c = editor_char_under_cursor(&editor);
-    if (c) {
-        set_texture_color(font->spritesheet, 0xFF000000);
-        render_char(renderer, font, *c, pos, FONT_SCALE);
-    }
-}
-
 void usage(FILE *stream)
 void usage(FILE *stream)
 {
 {
     fprintf(stream, "Usage: te [FILE-PATH]\n");
     fprintf(stream, "Usage: te [FILE-PATH]\n");
@@ -75,9 +49,6 @@ void usage(FILE *stream)
 // TODO: Delete line
 // TODO: Delete line
 // TODO: Split the line on Enter
 // TODO: Split the line on Enter
 
 
-#define OPENGL_RENDERER
-
-#ifdef OPENGL_RENDERER
 void MessageCallback(GLenum source,
 void MessageCallback(GLenum source,
                      GLenum type,
                      GLenum type,
                      GLuint id,
                      GLuint id,
@@ -503,156 +474,3 @@ int main(int argc, char **argv)
 
 
     return 0;
     return 0;
 }
 }
-#else
-// SDL
-int main(int argc, char **argv)
-{
-    const char *file_path = NULL;
-
-    if (argc > 1) {
-        file_path = argv[1];
-    }
-
-    if (file_path) {
-        FILE *file = fopen(file_path, "r");
-        if (file != NULL) {
-            editor_load_from_file(&editor, file);
-            fclose(file);
-        }
-    }
-
-    scc(SDL_Init(SDL_INIT_VIDEO));
-
-    SDL_Window *window =
-        scp(SDL_CreateWindow("Text Editor",
-                             0, 0,
-                             SCREEN_WIDTH, SCREEN_HEIGHT,
-                             SDL_WINDOW_RESIZABLE));
-
-    SDL_Renderer *renderer =
-        scp(SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED));
-
-
-    Font font = font_load_from_file(renderer, "./charmap-oldschool_white.png");
-
-    bool quit = false;
-    while (!quit) {
-        const Uint32 start = SDL_GetTicks();
-        SDL_Event event = {0};
-        while (SDL_PollEvent(&event)) {
-            switch (event.type) {
-            case SDL_QUIT: {
-                quit = true;
-            }
-            break;
-
-            case SDL_KEYDOWN: {
-                switch (event.key.keysym.sym) {
-                case SDLK_BACKSPACE: {
-                    editor_backspace(&editor);
-                }
-                break;
-
-                case SDLK_F2: {
-                    if (file_path) {
-                        editor_save_to_file(&editor, file_path);
-                    }
-                }
-                break;
-
-                case SDLK_RETURN: {
-                    editor_insert_new_line(&editor);
-                }
-                break;
-
-                case SDLK_DELETE: {
-                    editor_delete(&editor);
-                }
-                break;
-
-                case SDLK_UP: {
-                    if (editor.cursor_row > 0) {
-                        editor.cursor_row -= 1;
-                    }
-                }
-                break;
-
-                case SDLK_DOWN: {
-                    editor.cursor_row += 1;
-                }
-                break;
-
-                case SDLK_LEFT: {
-                    if (editor.cursor_col > 0) {
-                        editor.cursor_col -= 1;
-                    }
-                }
-                break;
-
-                case SDLK_RIGHT: {
-                    editor.cursor_col += 1;
-                }
-                break;
-                }
-            }
-            break;
-
-            case SDL_TEXTINPUT: {
-                editor_insert_text_before_cursor(&editor, event.text.text);
-            }
-            break;
-
-            case SDL_MOUSEBUTTONDOWN: {
-                Vec2f mouse_click = vec2f((float) event.button.x, (float) event.button.y);
-                switch(event.button.button) {
-                case SDL_BUTTON_LEFT: {
-                    Vec2f cursor_click = vec2f_add(mouse_click, vec2f_sub(camera_pos, vec2f_div(window_size(window), vec2fs(2.0f))));
-                    if(cursor_click.x > 0.0f && cursor_click.y > 0.0f) {
-                        editor.cursor_col = (size_t) floorf(cursor_click.x / ((float) FONT_CHAR_WIDTH * FONT_SCALE));
-                        editor.cursor_row = (size_t) floorf(cursor_click.y / ((float) FONT_CHAR_HEIGHT * FONT_SCALE));
-                    }
-                }
-                break;
-                }
-            }
-            break;
-            }
-        }
-
-        {
-            const Vec2f cursor_pos =
-                vec2f((float) editor.cursor_col * FONT_CHAR_WIDTH * FONT_SCALE,
-                      (float) editor.cursor_row * FONT_CHAR_HEIGHT * FONT_SCALE);
-
-            camera_vel = vec2f_mul(
-                             vec2f_sub(cursor_pos, camera_pos),
-                             vec2fs(2.0f));
-
-            camera_pos = vec2f_add(camera_pos, vec2f_mul(camera_vel, vec2fs(DELTA_TIME)));
-        }
-
-
-        scc(SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0));
-        scc(SDL_RenderClear(renderer));
-
-        for (size_t row = 0; row < editor.size; ++row) {
-            const Line *line = editor.lines + row;
-            const Vec2f line_pos = camera_project_point(window, vec2f(0.0f, (float) row * FONT_CHAR_HEIGHT * FONT_SCALE));
-            render_text_sized(renderer, &font, line->chars, line->size, line_pos, 0xFFFFFFFF, FONT_SCALE);
-        }
-        render_cursor(renderer, window, &font);
-
-        SDL_RenderPresent(renderer);
-
-        const Uint32 duration = SDL_GetTicks() - start;
-        const Uint32 delta_time_ms = 1000 / FPS;
-        if (duration < delta_time_ms) {
-            SDL_Delay(delta_time_ms - duration);
-        }
-    }
-
-    SDL_Quit();
-
-    return 0;
-}
-#endif // OPENGL_RENDERER

+ 0 - 41
src/sdl_extra.c

@@ -19,47 +19,6 @@ void *scp(void *ptr)
     return ptr;
     return ptr;
 }
 }
 
 
-SDL_Surface *surface_from_file(const char *file_path)
-{
-    int width, height, n;
-    unsigned char *pixels = stbi_load(file_path, &width, &height, &n, STBI_rgb_alpha);
-    if (pixels == NULL) {
-        fprintf(stderr, "ERROR: could not load file %s: %s\n",
-                file_path, stbi_failure_reason());
-        exit(1);
-    }
-
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
-    const Uint32 rmask = 0xff000000;
-    const Uint32 gmask = 0x00ff0000;
-    const Uint32 bmask = 0x0000ff00;
-    const Uint32 amask = 0x000000ff;
-#else // little endian, like x86
-    const Uint32 rmask = 0x000000ff;
-    const Uint32 gmask = 0x0000ff00;
-    const Uint32 bmask = 0x00ff0000;
-    const Uint32 amask = 0xff000000;
-#endif
-
-    const int depth = 32;
-    const int pitch = 4*width;
-
-    return scp(SDL_CreateRGBSurfaceFrom(
-                   (void*)pixels, width, height, depth, pitch,
-                   rmask, gmask, bmask, amask));
-}
-
-void set_texture_color(SDL_Texture *texture, Uint32 color)
-{
-    scc(SDL_SetTextureColorMod(
-            texture,
-            (color >> (8 * 0)) & 0xff,
-            (color >> (8 * 1)) & 0xff,
-            (color >> (8 * 2)) & 0xff));
-
-    scc(SDL_SetTextureAlphaMod(texture, (color >> (8 * 3)) & 0xff));
-}
-
 Vec2f window_size(SDL_Window *window)
 Vec2f window_size(SDL_Window *window)
 {
 {
     int w, h;
     int w, h;

+ 0 - 2
src/sdl_extra.h

@@ -17,8 +17,6 @@ void scc(int code);
 // SDL Check Pointer
 // SDL Check Pointer
 void *scp(void *ptr);
 void *scp(void *ptr);
 
 
-SDL_Surface *surface_from_file(const char *file_path);
-void set_texture_color(SDL_Texture *texture, Uint32 color);
 Vec2f window_size(SDL_Window *window);
 Vec2f window_size(SDL_Window *window);
 
 
 #endif // SDL_EXTRA_H_
 #endif // SDL_EXTRA_H_