Переглянути джерело

Merge pull request #9 from tsoding/reorganize

Reorganize
Alexey Kutepov 4 роки тому
батько
коміт
a6a3942d70
13 змінених файлів з 184 додано та 149 видалено
  1. 3 2
      Makefile
  2. 1 1
      build_msvc.bat
  3. 0 0
      src/editor.c
  4. 0 0
      src/editor.h
  5. 54 0
      src/font.c
  6. 28 0
      src/font.h
  7. 0 0
      src/la.c
  8. 0 0
      src/la.h
  9. 6 146
      src/main.c
  10. 68 0
      src/sdl_extra.c
  11. 24 0
      src/sdl_extra.h
  12. 0 0
      src/stb_image.h
  13. 0 0
      src/sv.h

+ 3 - 2
Makefile

@@ -1,5 +1,6 @@
 CFLAGS=-Wall -Wextra -std=c11 -pedantic -ggdb `pkg-config --cflags sdl2`
 LIBS=`pkg-config --libs sdl2` -lm
+SRCS=src/main.c src/la.c src/editor.c src/font.c src/sdl_extra.c
 
-te: main.c
-	$(CC) $(CFLAGS) -o te main.c la.c editor.c $(LIBS)
+te: $(SRCS)
+	$(CC) $(CFLAGS) -o te $(SRCS) $(LIBS)

+ 1 - 1
build_msvc.bat

@@ -5,4 +5,4 @@ set CFLAGS=/W4 /WX /std:c11 /wd4996 /FC /TC /Zi /nologo
 set INCLUDES=/I SDL2\include
 set LIBS=SDL2\lib\x64\SDL2.lib SDL2\lib\x64\SDL2main.lib Shell32.lib
 
-cl.exe %CFLAGS% %INCLUDES% /Fete main.c la.c editor.c /link %LIBS% -SUBSYSTEM:windows
+cl.exe %CFLAGS% %INCLUDES% /Fete src\main.c src\la.c src\editor.c src\font.c src\sdl_extra.c /link %LIBS% -SUBSYSTEM:windows

+ 0 - 0
editor.c → src/editor.c


+ 0 - 0
editor.h → src/editor.h


+ 54 - 0
src/font.c

@@ -0,0 +1,54 @@
+#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;
+    }
+}

+ 28 - 0
src/font.h

@@ -0,0 +1,28 @@
+#ifndef FONT_H_
+#define FONT_H_
+
+#include <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_

+ 0 - 0
la.c → src/la.c


+ 0 - 0
la.h → src/la.h


+ 6 - 146
main.c → src/main.c

@@ -4,162 +4,26 @@
 
 #include <SDL.h>
 
-#include "./la.h"
-
 #define STB_IMAGE_IMPLEMENTATION
 #include "./stb_image.h"
 
+#define SV_IMPLEMENTATION
+#include "./sv.h"
+
 #include "./editor.h"
+#include "./la.h"
+#include "./sdl_extra.h"
+#include "./font.h"
 
 #define SCREEN_WIDTH 800
 #define SCREEN_HEIGHT 600
 #define FPS 60
 #define DELTA_TIME (1.0f / FPS)
 
-#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
-
-void scc(int code)
-{
-    if (code < 0) {
-        fprintf(stderr, "SDL ERROR: %s\n", SDL_GetError());
-        exit(1);
-    }
-}
-
-void *scp(void *ptr)
-{
-    if (ptr == NULL) {
-        fprintf(stderr, "SDL ERROR: %s\n", SDL_GetError());
-        exit(1);
-    }
-
-    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));
-}
-
-#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)
-{
-    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 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));
-}
-
-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;
-    }
-}
-
 Editor editor = {0};
 Vec2f camera_pos = {0};
 Vec2f camera_vel = {0};
 
-#define UNHEX(color) \
-    ((color) >> (8 * 0)) & 0xFF, \
-    ((color) >> (8 * 1)) & 0xFF, \
-    ((color) >> (8 * 2)) & 0xFF, \
-    ((color) >> (8 * 3)) & 0xFF
-
-Vec2f window_size(SDL_Window *window)
-{
-    int w, h;
-    SDL_GetWindowSize(window, &w, &h);
-    return vec2f((float) w, (float) h);
-}
-
 Vec2f camera_project_point(SDL_Window *window, Vec2f point)
 {
     return vec2f_add(
@@ -341,7 +205,3 @@ int main(int argc, char **argv)
 
     return 0;
 }
-
-#define SV_IMPLEMENTATION
-#include "./sv.h"
-

+ 68 - 0
src/sdl_extra.c

@@ -0,0 +1,68 @@
+#include "./sdl_extra.h"
+#include "./stb_image.h"
+
+void scc(int code)
+{
+    if (code < 0) {
+        fprintf(stderr, "SDL ERROR: %s\n", SDL_GetError());
+        exit(1);
+    }
+}
+
+void *scp(void *ptr)
+{
+    if (ptr == NULL) {
+        fprintf(stderr, "SDL ERROR: %s\n", SDL_GetError());
+        exit(1);
+    }
+
+    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)
+{
+    int w, h;
+    SDL_GetWindowSize(window, &w, &h);
+    return vec2f((float) w, (float) h);
+}

+ 24 - 0
src/sdl_extra.h

@@ -0,0 +1,24 @@
+#ifndef SDL_EXTRA_H_
+#define SDL_EXTRA_H_
+
+#include <SDL.h>
+
+#include "./la.h"
+
+#define UNHEX(color) \
+    ((color) >> (8 * 0)) & 0xFF, \
+    ((color) >> (8 * 1)) & 0xFF, \
+    ((color) >> (8 * 2)) & 0xFF, \
+    ((color) >> (8 * 3)) & 0xFF
+
+// SDL Check Code
+void scc(int code);
+
+// SDL Check Pointer
+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);
+
+#endif // SDL_EXTRA_H_

+ 0 - 0
stb_image.h → src/stb_image.h


+ 0 - 0
sv.h → src/sv.h