diff --git a/.gitignore b/.gitignore
index 8b6674b..a3b2dfd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/compile_commands.json
*.c#
/example_data/*.glsl
+/cmake-build-*/
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..ce8fa80
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+skunkworks_c
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..f603881
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..5535e8f
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..c55a13d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..1921875
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/scopes/Unnamed.xml b/.idea/scopes/Unnamed.xml
new file mode 100644
index 0000000..b2efb5e
--- /dev/null
+++ b/.idea/scopes/Unnamed.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/skunkworks-c.iml b/.idea/skunkworks-c.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/.idea/skunkworks-c.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..f98c5f5
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..f6b6147
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,117 @@
+cmake_minimum_required(VERSION 3.25)
+project(skunkworks_c C)
+
+#cmake_policy(SET CMP0074 NEW)
+#set(CMAKE_POLICY_DEFAULT_CMP0074 NEW)
+
+cmake_policy(SET CMP0091 NEW)
+set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>")
+
+set(CMAKE_C_STANDARD 90)
+
+SET_TARGET_PROPERTIES(${skunkworks_c} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:zlib.lib")
+
+add_subdirectory(subprojects/glew-2.1.0/build/cmake)
+include_directories(subprojects/glew-2.1.0/include)
+
+set(GLFW_BUILD_EXAMPLES OFF)
+
+add_subdirectory(subprojects/glfw-3.3.8)
+include_directories(subprojects/glfw-3.3.8/include)
+
+set(PNG_SHARED OFF)
+set(PNG_BUILD_ZLIB ON)
+
+add_subdirectory(subprojects/zlib-1.2.13)
+include_directories(subprojects/zlib-1.2.13 "${CMAKE_BINARY_DIR}/subprojects/zlib-1.2.13")
+
+#set(ZLIB_ROOT subprojects/zlib-1.2.13)
+set(ZLIB_INCLUDE_DIR subprojects/zlib-1.2.13 "${CMAKE_BINARY_DIR}/subprojects/zlib-1.2.13")
+#set(ZLIB_LIBRARY zlib)
+
+add_subdirectory(subprojects/lpng1639)
+include_directories(subprojects/lpng1639 "${CMAKE_BINARY_DIR}/subprojects/lpng1639")
+
+
+include_directories(include)
+include_directories(src)
+
+add_library(skunkworks STATIC
+ include/net/http_client.h
+ include/color32.h
+ include/color8.h
+ include/error.h
+ include/file.h
+ include/framebuffer.h
+ include/gamepad.h
+ include/gsa.h
+ include/gsa_input.h
+ include/gsa_map.h
+ include/gsa_text.h
+ include/image32.h
+ include/image8.h
+ include/msvc.h
+ include/renderer.h
+ include/renderer2d.h
+ include/scaler.h
+ include/shader.h
+ include/shaders.h
+ include/skip.h
+ include/skunkworks.h
+ include/str.h
+ include/types.h
+ include/vec2i.h
+ include/vertex_buffer.h
+ include/window.h
+ src/net/http_client.c
+ src/color32.c
+ src/error.c
+ src/file.c
+ src/framebuffer.c
+ src/gamepad.c
+ src/gl.h
+ src/gsa.c
+ src/gsa_input.c
+ src/gsa_map.c
+ src/gsa_text.c
+ src/image32.c
+ src/image8.c
+ src/renderer.c
+ src/renderer2d.c
+ src/scaler.c
+ src/shader.c
+ src/shaders.c
+ src/skip.c
+ src/skunkworks.c
+ src/str.c
+ src/types.c
+ src/vec2i.c
+ src/vertex_buffer.c
+ src/window.c)
+
+add_executable(skip
+ tools/skip.c)
+
+target_link_libraries(skip skunkworks)
+
+add_executable(simple
+ examples/simple.c)
+
+add_custom_command(TARGET simple POST_BUILD
+ COMMAND "copy" "src\\*.glsl" "example_data"
+ COMMAND skip "ca1" "example_data" $
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMENT "attaching data to simple.exe")
+
+target_link_libraries(simple skunkworks glew_s glfw)
+
+add_executable(gsa_simple
+ examples/gsa_simple.c)
+
+add_custom_command(TARGET gsa_simple POST_BUILD
+ COMMAND "copy" "src\\*.glsl" "example_data"
+ COMMAND skip "ca1" "example_data" $
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMENT "attaching data to gsa_simple.exe")
+
+target_link_libraries(gsa_simple skunkworks glew_s glfw zlibstatic png_static)
diff --git a/build.c b/build.c
deleted file mode 100644
index 09068e1..0000000
--- a/build.c
+++ /dev/null
@@ -1,128 +0,0 @@
-#include "str.h"
-#include "types.h"
-#include
-#include
-#include
-
-void cmake(char *dep, char *libpath, char *lib, char *cmake_dir, char *params);
-bool file_exists(char *dir);
-void sys(char *cmd);
-
-int main(int argc, char *argv[]) {
- printf("SkunkWorks build system v0.0\n");
- fflush(stdout);
- sys("if not exist build md build");
- chdir("build");
- sys("if not exist deps md deps");
- cmake("glfw-3.3.8", "src\\Release\\glfw3.lib", "glfw3.lib", "", "");
- cmake("zlib-1.2.13", "Release\\zlibstatic.lib", "zlib.lib", "", "");
- cmake(
- "lpng1639",
- "Release\\libpng16_static.lib",
- "png.lib",
- "",
- "-D ZLIB_INCLUDE_DIR=../../subprojects/zlib-1.2.13 "
- "-D ZLIB_LIBRARY=.. "
- "-D CMAKE_C_FLAGS=/I\"../zlib-1.2.13\""
- );
- cmake(
- "glew-2.1.0",
- "lib\\Release\\libglew32.lib",
- "glew.lib",
- "build/cmake",
- ""
- );
-
- sys("cl /c /MD /O2 "
- "../src/*.c "
- "../src/net/*.c "
- "/I../include "
- "/I../subprojects/glew-2.1.0/include "
- "/I../subprojects/glfw-3.3.8/include "
- "/I../subprojects/lpng1639 "
- "/I../subprojects/zlib-1.2.13 "
- "/Ilpng1639 ");
- sys("del skunkworks.lib ");
- sys("lib "
- "*.obj "
- "deps/*.lib "
- "/OUT:skunkworks.lib");
-
- sys("cl /MD /O2 "
- "../tools/skip.c "
- "skunkworks.lib "
- "/I../include ");
-
- /* example */
- sys("cl /MD /O2 "
- "../examples/simple.c "
- "skunkworks.lib "
- "/I../include "
- "/I. ");
-
- /* gsa example */
- /*
- sys("c:\\dev\\_tools\\dxc\\bin\\x64\\dxc.exe "
- "-fvk-use-gl-layout "
- "-T vs_6_0 -spirv ..\\src\\gsa_vert.hlsl -Fo gsa_vert.spv");
- sys("c:\\dev\\_tools\\dxc\\bin\\x64\\dxc.exe "
- "-fvk-use-gl-layout "
- "-T ps_6_0 -spirv ..\\src\\gsa_frag.hlsl -Fo gsa_frag.spv");
- */
- /*
- sys("C:\\dev\\_tools\\gslang\\bin\\glslangValidator.exe "
- "-G -S vert -o gsa_vert.spv ..\\src\\gsa_vert.glsl");
- sys("C:\\dev\\_tools\\gslang\\bin\\glslangValidator.exe "
- "-G -S frag -o gsa_frag.spv ..\\src\\gsa_frag.glsl");
- */
- /* sys("copy *.spv ..\\example_data"); */
- sys("copy ..\\src\\*.glsl ..\\example_data");
- sys("cl /MD /O2 "
- "../examples/gsa_simple.c "
- "skunkworks.lib "
- "/I../include "
- "/I. ");
- sys("copy gsa_simple.exe test.exe");
- sys("skip ca1 ../example_data gsa_simple.exe");
- sys("skip ca1 ../example_data simple.exe");
-
- sys("del *.obj");
-
- return 0;
-}
-
-void cmake(char *dep, char *libpath, char *lib, char *cmake_dir, char *params) {
- if(file_exists(sw_str_concat("deps\\", lib))) {
- printf("%s already exists, not compiling dependency\n", lib);
- return;
- }
-
- printf("compiling %s", lib);
-
- sys(sw_str_concat("md ", dep));
- chdir(dep);
- sys(sw_str_concat4(
- "cmake ",
- params,
- " ../../subprojects/",
- sw_str_concat3(dep, "/", cmake_dir)
- ));
- sys("cmake --build . --config Release");
- chdir("..");
- sys(sw_str_concat4(
- sw_str_concat3("copy ", dep, "\\"), libpath, " deps\\", lib
- ));
-}
-
-bool file_exists(char *dir) {
- DWORD attrib = GetFileAttributes(dir);
-
- return attrib != INVALID_FILE_ATTRIBUTES;
-}
-
-void sys(char *cmd) {
- if(system(cmd) != 0) {
- fflush(stdout);
- exit(-1);
- }
-}
diff --git a/examples/gsa_simple.c b/examples/gsa_simple.c
index d62f2ff..012ce74 100644
--- a/examples/gsa_simple.c
+++ b/examples/gsa_simple.c
@@ -54,9 +54,9 @@ void tick() {
}
bool tick_fade_in() {
- static i32 t = 0;
+ static f32 t = 0;
fade_palette(t / 60.f);
++t;
- return t <= 60;
+ return 60.f >= t;
}
diff --git a/include/gsa.h b/include/gsa.h
index e56833d..2eeee4a 100644
--- a/include/gsa.h
+++ b/include/gsa.h
@@ -34,7 +34,6 @@ struct gsa_sprite {
};
extern struct gsa_sprite sprites[MAX_SPRITES];
-extern struct sw_image8 *_gfx;
extern sw_color32 palette[GSA_PALETTE_SIZE];
int gsa_main(int argc, char *argv[]);
@@ -55,6 +54,4 @@ int main(int argc, char *argv[]) {
}
#endif
-void _gsa_tick();
-
#endif /* GUARD_73FF49EF137A66E6AAD3A8A1BCF2F2DE */
diff --git a/include/gsa_input.h b/include/gsa_input.h
index ff1f5c3..367d5f9 100644
--- a/include/gsa_input.h
+++ b/include/gsa_input.h
@@ -3,19 +3,18 @@
#include "types.h"
-struct _gsa_input_set {
- bool dpad_up, dpad_down, dpad_left, dpad_right, face_up, face_down,
- face_left, face_right, l, r, start, select;
-};
-
struct gsa_input {
- struct _gsa_input_set down, pressed;
+ struct {
+ bool dpad_up, dpad_down, dpad_left, dpad_right, face_up, face_down,
+ face_left, face_right, l, r, start, select;
+ } down, pressed;
i32 x_dir;
i32 y_dir;
};
extern struct gsa_input input;
-void _gsa_input_tick();
+/* todo: should be private? */
+void gsa_input_tick();
#endif /* GUARD_E847906A380863BFA9BE2CD8BC8943DA */
diff --git a/include/types.h b/include/types.h
index cde1912..3bbb167 100644
--- a/include/types.h
+++ b/include/types.h
@@ -11,7 +11,12 @@ typedef signed long long i64;
typedef unsigned long long u64;
typedef float f32;
typedef double f64;
+
+#if __STDC_VERSION__ >= 199901L
+typedef _Bool bool;
+#else
typedef i8 bool;
+#endif
#define true 1
#define false 0
diff --git a/src/color32.c b/src/color32.c
index 4de9ca9..f978675 100644
--- a/src/color32.c
+++ b/src/color32.c
@@ -45,9 +45,9 @@ sw_color32 sw_color32_mix(sw_color32 a, sw_color32 b, f32 mix) {
imix = 1.f - mix;
return sw_color32_from_rgba(
- sw_color32_get_r(a) * imix + sw_color32_get_r(b) * mix,
- sw_color32_get_g(a) * imix + sw_color32_get_g(b) * mix,
- sw_color32_get_b(a) * imix + sw_color32_get_b(b) * mix,
- sw_color32_get_a(a) * imix + sw_color32_get_a(b) * mix
+ (u8)((f32)sw_color32_get_r(a) * imix + (f32)sw_color32_get_r(b) * mix),
+ (u8)((f32)sw_color32_get_g(a) * imix + (f32)sw_color32_get_g(b) * mix),
+ (u8)((f32)sw_color32_get_b(a) * imix + (f32)sw_color32_get_b(b) * mix),
+ (u8)((f32)sw_color32_get_a(a) * imix + (f32)sw_color32_get_a(b) * mix)
);
}
diff --git a/src/error.c b/src/error.c
index 9acd01a..89e91c2 100644
--- a/src/error.c
+++ b/src/error.c
@@ -8,6 +8,12 @@
#include "types.h"
+#if __STDC_VERSION__ >= 201112L
+#define noreturn _Noreturn
+#else
+#define noreturn
+#endif
+
void sw_debug(char *fmt, ...) {
va_list argp;
@@ -19,7 +25,7 @@ void sw_debug(char *fmt, ...) {
fflush(stdout);
}
-void sw_error(char *fmt, ...) {
+noreturn void sw_error(char *fmt, ...) {
va_list argp;
fprintf(stderr, "[ERROR] ");
diff --git a/src/gsa.c b/src/gsa.c
index 8d5645e..844d948 100644
--- a/src/gsa.c
+++ b/src/gsa.c
@@ -16,8 +16,8 @@
struct gsa_sprite sprites[256];
-struct sw_image8 *_gfx;
-struct sw_window *_win;
+static struct sw_image8 *gfx;
+static struct sw_window *win;
static struct sw_shaderprogram program;
@@ -38,26 +38,29 @@ static i8 loop_stack_i;
static struct sw_vertex_buffer *vertex_buffer;
+static void gsa_tick();
+
int gsa_main(int argc, char *argv[]) {
(void)argc;
(void)argv;
i32 max_components;
u32 size;
- u8 *data, *frag_data, *vert_data;
+ u8 *data;
+ char *frag_data, *vert_data;
sw_log("Initialising GameSkunkAdvance v0.0");
sw_init(argc, argv);
sw_log("Grab data");
data = sw_skip_get(sw_skip_self, "gfx.png", &size);
- _gfx = sw_image8_load_png_data(data, size);
+ gfx = sw_image8_load_png_data(data, size);
vertex_buffer = sw_vertex_buffer_create(sizeof(struct render_vert));
memset(loop_stack, 0, sizeof(loop_stack));
loop_stack_i = -1;
- _win = sw_window_create(sw_vec2i(304, 176), "Game Skunk Advance v0.0", 0);
+ win = sw_window_create(sw_vec2i(304, 176), "Game Skunk Advance v0.0", 0);
glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, &max_components);
sw_log("GL_MAX_VERTEX_UNIFORM_COMPONENTS: %i", max_components);
@@ -66,9 +69,10 @@ int gsa_main(int argc, char *argv[]) {
frag_data = sw_skip_get_string(sw_skip_self, "gsa_frag.glsl");
vert_data = sw_skip_get_string(sw_skip_self, "gsa_vert.glsl");
- program = sw_shaderprogram_create(vert_data, 0, frag_data, 0, false);
+ program =
+ sw_shaderprogram_create((u8 *)vert_data, 0, (u8 *)frag_data, 0, false);
- memcpy(palette, _gfx->palette, sizeof(_gfx->palette));
+ memcpy(palette, gfx->palette, sizeof(gfx->palette));
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
@@ -82,7 +86,7 @@ int gsa_main(int argc, char *argv[]) {
0,
GL_RED,
GL_UNSIGNED_BYTE,
- _gfx->_data
+ gfx->_data
);
sw_log("setup gsa vao");
@@ -115,8 +119,8 @@ int gsa_main(int argc, char *argv[]) {
sw_log("gsa setup done");
init();
- sw_window_add_renderer(_win, sw_renderer_create(0, 0, 0), _gsa_tick);
- sw_window_run(_win);
+ sw_window_add_renderer(win, sw_renderer_create(0, 0, 0), gsa_tick);
+ sw_window_run(win);
return 0;
}
@@ -146,12 +150,12 @@ static void add_render_vert(f32 x, f32 y, f32 tx, f32 ty) {
sw_vertex_buffer_add(vertex_buffer, &v);
}
-static void rect(f32 x, f32 y, f32 w, f32 h, i16 tile, bool half) {
+static void rect(f32 x, f32 y, f32 w, f32 h, u16 tile, bool half) {
f32 tx, ty, ts;
f32 tilesize = half ? 8.f : 16.f;
- tx = ((tile % 256) * tilesize) / 4096.f;
- ty = ((tile / 256) * tilesize) / 4096.f;
+ tx = ((f32)(tile % 256) * tilesize) / 4096.f;
+ ty = ((f32)(u16)(tile / 256) * tilesize) / 4096.f;
ts = 1.f / (4096.f / tilesize);
add_render_vert(x, y, tx, ty);
@@ -172,10 +176,10 @@ static void update_palette_gl() {
}
}
-void _gsa_tick() {
+static void gsa_tick() {
i32 i, x, y, startx, starty, endx, endy, tcmult, tilesize;
- _gsa_input_tick();
+ gsa_input_tick();
if(loop_stack_i == -1) {
tick();
@@ -202,10 +206,10 @@ void _gsa_tick() {
u16 tile = maps[i].tiles[x][y];
if(tile) {
rect(
- x * tilesize - maps[i].scrollx,
- y * tilesize - maps[i].scrolly,
- tilesize,
- tilesize,
+ (f32)(x * tilesize - maps[i].scrollx),
+ (f32)(y * tilesize - maps[i].scrolly),
+ (f32)tilesize,
+ (f32)tilesize,
tile,
maps[i].half_tile
);
@@ -216,7 +220,14 @@ void _gsa_tick() {
for(i = 0; i < MAX_SPRITES; ++i) {
if(sprites[i].tile > 0) {
- rect(sprites[i].x, sprites[i].y, 16, 16, sprites[i].tile, false);
+ rect(
+ (f32)sprites[i].x,
+ (f32)sprites[i].y,
+ 16,
+ 16,
+ sprites[i].tile,
+ false
+ );
}
}
glClearColor(
@@ -237,11 +248,11 @@ void _gsa_tick() {
);
glBufferData(
GL_ARRAY_BUFFER,
- sizeof(struct render_vert) * vertex_buffer->elem_count,
+ (i64)(sizeof(struct render_vert) * vertex_buffer->elem_count),
vertex_buffer->data,
GL_DYNAMIC_DRAW
);
- glDrawArrays(GL_TRIANGLES, 0, vertex_buffer->elem_count);
+ glDrawArrays(GL_TRIANGLES, 0, (i32)vertex_buffer->elem_count);
glBindVertexArray(0);
/* glEnd(); */
}
diff --git a/src/gsa_input.c b/src/gsa_input.c
index d803645..e60f715 100644
--- a/src/gsa_input.c
+++ b/src/gsa_input.c
@@ -3,7 +3,7 @@
struct gsa_input input;
-void _gsa_input_tick() {
+void gsa_input_tick() {
u8 gamepad = 0;
input.pressed.dpad_down =
diff --git a/src/gsa_text.c b/src/gsa_text.c
index 07adca1..d56db81 100644
--- a/src/gsa_text.c
+++ b/src/gsa_text.c
@@ -5,7 +5,7 @@
i16 font;
i16 gsa_get_char_tile(u8 ch) {
- return font + (ch % 0x10) + (ch / 0x10) * 0x100;
+ return (i16)(font + (ch % 0x10) + (ch / 0x10) * 0x100);
}
void gsa_write_text(u8 map, u16 x, u16 y, char *str) {
diff --git a/src/image32.c b/src/image32.c
index 64a803d..19e4fdb 100644
--- a/src/image32.c
+++ b/src/image32.c
@@ -81,7 +81,7 @@ struct sw_image32 *sw_image32_load_png_data(u8 *data, u32 data_len) {
sw_error("image32 can currently only load 32 bit files");
}
- img = sw_image32_create(sw_vec2i(width, height));
+ img = sw_image32_create(sw_vec2i((i32)width, (i32)height));
row_pointers = malloc(sizeof(u8 *) * height);
for(i = 0; i < height; ++i) {
diff --git a/src/image8.c b/src/image8.c
index 696dd79..2dfb5a1 100644
--- a/src/image8.c
+++ b/src/image8.c
@@ -84,7 +84,7 @@ struct sw_image8 *sw_image8_load_png_data(u8 *data, u32 data_len) {
sw_error("image32 can currently only load 8 bit files");
}
- img = sw_image8_create(sw_vec2i(width, height));
+ img = sw_image8_create(sw_vec2i((i32)width, (i32)height));
row_pointers = malloc(sizeof(u8 *) * height);
for(i = 0; i < height; ++i) {
diff --git a/src/net/http_client.c b/src/net/http_client.c
index 3a3a91a..67413e2 100644
--- a/src/net/http_client.c
+++ b/src/net/http_client.c
@@ -27,7 +27,8 @@ static u32 next_free_request();
struct sw_http_request_handle sw_http_request_async(char *url) {
HINTERNET session, http;
- u16 port;
+ u16 port = 0;
+ ;
char *proto, *rest;
char *server, *rest2;
u32 req;
diff --git a/src/renderer2d.c b/src/renderer2d.c
index 57a49b1..4ce6137 100644
--- a/src/renderer2d.c
+++ b/src/renderer2d.c
@@ -16,7 +16,7 @@ static void r_exit(struct sw_window *win, void *data);
struct sw_renderer2d *sw_renderer2d_create() {
struct sw_renderer2d *ren;
- u8 *frag, *vert;
+ char *frag, *vert;
ren = malloc(sizeof(struct sw_renderer2d));
ren->renderer = sw_renderer_create(ren, r_enter, r_exit);
@@ -24,14 +24,16 @@ struct sw_renderer2d *sw_renderer2d_create() {
frag = sw_skip_get_string(sw_skip_self, "renderer2d_frag.glsl");
vert = sw_skip_get_string(sw_skip_self, "renderer2d_vert.glsl");
- ren->shader = sw_shaderprogram_create(vert, 0, frag, 0, 0);
+ ren->shader = sw_shaderprogram_create((u8 *)vert, 0, (u8 *)frag, 0, 0);
return ren;
-};
+}
static void r_enter(struct sw_window *win, void *data) {
struct sw_renderer2d *ren;
+ (void)win;
+
ren = data;
sw_shaderprogram_use(ren->shader);
@@ -45,4 +47,6 @@ static void r_enter(struct sw_window *win, void *data) {
}
static void r_exit(struct sw_window *win, void *data) {
+ (void)win;
+ (void)data;
}
diff --git a/src/scaler.c b/src/scaler.c
index d50ddb5..724a818 100644
--- a/src/scaler.c
+++ b/src/scaler.c
@@ -22,8 +22,8 @@ void sw_scaler_apply(
scaley = (f32)out_size.y / (f32)in_size.y;
scale = f32_min(scalex, scaley);
- xoff = (out_size.x - in_size.x * scale) / 2 / out_size.x;
- yoff = (out_size.y - in_size.y * scale) / 2 / out_size.y;
+ xoff = ((f32)out_size.x - (f32)in_size.x * scale) / 2 / (f32)out_size.x;
+ yoff = ((f32)out_size.y - (f32)in_size.y * scale) / 2 / (f32)out_size.y;
glUniform2f(
glGetUniformLocation(sw_shaders_scale._program, "offset"),
xoff,
@@ -40,10 +40,10 @@ void sw_scaler_apply(
scalex = (f32)out_size.x / (f32)in_size.x;
scaley = (f32)out_size.y / (f32)in_size.y;
scale = f32_min(scalex, scaley);
- scale = i32_max(1, (i32)scale);
+ scale = (f32)i32_max(1, (i32)scale);
- xoff = (out_size.x - in_size.x * scale) / 2 / out_size.x;
- yoff = (out_size.y - in_size.y * scale) / 2 / out_size.y;
+ xoff = ((f32)out_size.x - (f32)in_size.x * scale) / 2 / (f32)out_size.x;
+ yoff = ((f32)out_size.y - (f32)in_size.y * scale) / 2 / (f32)out_size.y;
glUniform2f(
glGetUniformLocation(sw_shaders_scale._program, "offset"),
xoff,
diff --git a/src/shader.c b/src/shader.c
index 3c1e450..416f827 100644
--- a/src/shader.c
+++ b/src/shader.c
@@ -75,7 +75,7 @@ struct sw_shader sw_shader_create(u8 *data, u32 len, i32 type, bool compiled) {
struct sw_shader shader;
i32 gltype;
i32 ret;
- u32 length;
+ i32 length;
sw_log("create shader");
@@ -96,7 +96,11 @@ struct sw_shader sw_shader_create(u8 *data, u32 len, i32 type, bool compiled) {
if(compiled) {
sw_log("loading shader binary of size %i", len);
glShaderBinary(
- 1, &shader._shader, GL_SHADER_BINARY_FORMAT_SPIR_V_ARB, data, len
+ 1,
+ &shader._shader,
+ GL_SHADER_BINARY_FORMAT_SPIR_V_ARB,
+ data,
+ (i32)len
);
glGetShaderiv(shader._shader, GL_SPIR_V_BINARY, &ret);
@@ -108,17 +112,19 @@ struct sw_shader sw_shader_create(u8 *data, u32 len, i32 type, bool compiled) {
glSpecializeShader(shader._shader, "main", 0, 0, 0);
} else {
- length = strlen(data);
- glShaderSource(shader._shader, 1, &data, &length);
+ length = (i32)strlen((char *)data);
+ glShaderSource(
+ shader._shader, 1, (const GLchar *const *)&data, &length
+ );
glCompileShader(shader._shader);
}
sw_log("source: %s", data);
glGetShaderiv(shader._shader, GL_COMPILE_STATUS, &ret);
if(!ret) {
char str[256];
- i32 len;
+ i32 llen;
- glGetShaderInfoLog(shader._shader, 256, &len, str);
+ glGetShaderInfoLog(shader._shader, 256, &llen, str);
sw_error("Shader Compile Error: %s", str);
}
return shader;
diff --git a/src/shaders.c b/src/shaders.c
index 2132d1f..8142913 100644
--- a/src/shaders.c
+++ b/src/shaders.c
@@ -6,7 +6,7 @@ struct sw_shaderprogram sw_shaders_copy;
struct sw_shaderprogram sw_shaders_scale;
void sw_shaders_static_init() {
- u8 *vert_copy, *frag_copy, *frag_scale;
+ char *vert_copy, *frag_copy, *frag_scale;
sw_log("initialising shaders");
vert_copy = sw_skip_get_string(sw_skip_self, "shader_copy_vert.glsl");
@@ -14,7 +14,7 @@ void sw_shaders_static_init() {
frag_scale = sw_skip_get_string(sw_skip_self, "shader_scale_frag.glsl");
sw_shaders_copy =
- sw_shaderprogram_create(vert_copy, 0, frag_copy, 0, false);
+ sw_shaderprogram_create((u8 *)vert_copy, 0, (u8 *)frag_copy, 0, false);
sw_shaders_scale =
- sw_shaderprogram_create(vert_copy, 0, frag_scale, 0, false);
+ sw_shaderprogram_create((u8 *)vert_copy, 0, (u8 *)frag_scale, 0, false);
}
diff --git a/src/skip.c b/src/skip.c
index 37d972e..e1bbace 100644
--- a/src/skip.c
+++ b/src/skip.c
@@ -31,7 +31,7 @@ struct sw_skip *sw_skip_load(char *filename) {
fil = fopen(filename, "rb");
fseek(fil, -4, SEEK_END);
fread(&off, 4, 1, fil);
- fseek(fil, -off, SEEK_END);
+ fseek(fil, -(i32)off, SEEK_END);
fread(magic, 1, 4, fil);
if(strcmp("SWZP", magic) != 0) {
@@ -141,7 +141,7 @@ void sw_skip_dettach(char *filename) {
fil = fopen(filename, "rb");
fseek(fil, -4, SEEK_END);
fread(&off, 4, 1, fil);
- fseek(fil, -off, SEEK_END);
+ fseek(fil, -(i32)off, SEEK_END);
fread(magic, 1, 4, fil);
sw_log("magic: [%s]", magic);
diff --git a/src/skunkworks.c b/src/skunkworks.c
index 1037145..710ef16 100644
--- a/src/skunkworks.c
+++ b/src/skunkworks.c
@@ -10,6 +10,7 @@ void assert_types();
static bool init = false;
void sw_init(int argc, char *argv[]) {
+ (void)argc;
if(!init) {
assert_types();
sw_skip_self = sw_skip_load(argv[0]);
diff --git a/src/str.c b/src/str.c
index 10a2b17..3193b69 100644
--- a/src/str.c
+++ b/src/str.c
@@ -89,7 +89,7 @@ void sw_str_split2(char *str, char *split, char **out1, char **out2) {
return;
}
- idx2 = idx + strlen(split);
+ idx2 = idx + (i32)strlen(split);
*out1 = sw_str_sub(str, 0, idx);
*out2 = sw_str_sub(str, idx2, strlen(str) - idx2);
diff --git a/src/types.c b/src/types.c
index 731bd69..558e195 100644
--- a/src/types.c
+++ b/src/types.c
@@ -33,11 +33,11 @@ u32 u32_min(u32 v1, u32 v2) {
}
i16 i16_max(i16 v1, i16 v2) {
- return v1 > v2 ? v1 : v2;
+ return (i16)(v1 > v2 ? v1 : v2);
}
i16 i16_min(i16 v1, i16 v2) {
- return v1 < v2 ? v1 : v2;
+ return (i16)(v1 < v2 ? v1 : v2);
}
u16 u16_max(u16 v1, u16 v2) {
@@ -49,11 +49,11 @@ u16 u16_min(u16 v1, u16 v2) {
}
i8 i8_max(i8 v1, i8 v2) {
- return v1 > v2 ? v1 : v2;
+ return (i8)(v1 > v2 ? v1 : v2);
}
i8 i8_min(i8 v1, i8 v2) {
- return v1 < v2 ? v1 : v2;
+ return (i8)(v1 < v2 ? v1 : v2);
}
u8 u8_max(u8 v1, u8 v2) {
diff --git a/src/window.c b/src/window.c
index 8aa78e2..e8b5e99 100644
--- a/src/window.c
+++ b/src/window.c
@@ -12,7 +12,7 @@
#include "shaders.h"
#include "vec2i.h"
-static void _tick();
+static void tick();
static struct sw_window *_tick_window;
static void win_callback(GLFWwindow *glfw_win, i32 width, i32 height);
@@ -32,6 +32,8 @@ struct sw_window *
sw_window_create(struct sw_vec2i size, char *title, u32 flags) {
struct sw_window *win;
+ (void)flags;
+
win = malloc(sizeof(struct sw_window));
win->window_size = size;
win->game_size = size;
@@ -75,10 +77,10 @@ void sw_window_run(struct sw_window *window) {
sw_log("run window");
_tick_window = window;
#ifdef __EMSCRIPTEN__
- emscripten_set_main_loop(_tick, 60, 1);
+ emscripten_set_main_loop(tick, 60, 1);
#else
while(!glfwWindowShouldClose(window->_window)) {
- _tick();
+ tick();
}
#endif
}
@@ -97,7 +99,7 @@ void sw_window_add_renderer(
/* private functions */
-void _tick() {
+void tick() {
u32 i;
sw_gamepad_tick();