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();