big cleanup
This commit is contained in:
parent
1066bb5af3
commit
0df808899b
|
@ -4,3 +4,4 @@
|
|||
/compile_commands.json
|
||||
*.c#
|
||||
/example_data/*.glsl
|
||||
/cmake-build-*/
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
skunkworks_c
|
|
@ -0,0 +1,7 @@
|
|||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<clangFormatSettings>
|
||||
<option name="ENABLED" value="true" />
|
||||
</clangFormatSettings>
|
||||
</code_scheme>
|
||||
</component>
|
|
@ -0,0 +1,5 @@
|
|||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
|
@ -0,0 +1,12 @@
|
|||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="GrazieInspection" enabled="false" level="GRAMMAR_ERROR" enabled_by_default="false" />
|
||||
<inspection_tool class="LanguageDetectionInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
||||
<option name="processCode" value="true" />
|
||||
<option name="processLiterals" value="true" />
|
||||
<option name="processComments" value="true" />
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||
<component name="CidrRootsConfiguration">
|
||||
<excludeRoots>
|
||||
<file path="$PROJECT_DIR$/cmake-build-debug" />
|
||||
<file path="$PROJECT_DIR$/subprojects" />
|
||||
</excludeRoots>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/skunkworks-c.iml" filepath="$PROJECT_DIR$/.idea/skunkworks-c.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,3 @@
|
|||
<component name="DependencyValidationManager">
|
||||
<scope name="Unnamed" pattern="file[skunkworks-c]:src/*||file[skunkworks-c]:include/*||file[skunkworks-c]:examples/*||file[skunkworks-c]:tools/*" />
|
||||
</component>
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GitSharedSettings">
|
||||
<option name="synchronizeBranchProtectionRules" value="false" />
|
||||
</component>
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
|
@ -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$<$<CONFIG:Debug>: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" $<TARGET_FILE:simple>
|
||||
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" $<TARGET_FILE:gsa_simple>
|
||||
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)
|
128
build.c
128
build.c
|
@ -1,128 +0,0 @@
|
|||
#include "str.h"
|
||||
#include "types.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <windows.h>
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -3,19 +3,18 @@
|
|||
|
||||
#include "types.h"
|
||||
|
||||
struct _gsa_input_set {
|
||||
struct gsa_input {
|
||||
struct {
|
||||
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;
|
||||
} 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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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] ");
|
||||
|
|
55
src/gsa.c
55
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(); */
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
struct gsa_input input;
|
||||
|
||||
void _gsa_input_tick() {
|
||||
void gsa_input_tick() {
|
||||
u8 gamepad = 0;
|
||||
|
||||
input.pressed.dpad_down =
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
10
src/scaler.c
10
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,
|
||||
|
|
18
src/shader.c
18
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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
10
src/window.c
10
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();
|
||||
|
|
Loading…
Reference in New Issue