From f002911f225ed1934bd62f81ecbbbc81e6794855 Mon Sep 17 00:00:00 2001 From: Vadim Grigoruk Date: Thu, 27 Sep 2018 18:25:14 +0300 Subject: [PATCH] sokol: studio impl wip --- CMakeLists.txt | 120 ++++++++++++------ src/ext/file_dialog.c | 16 +-- .../sokol/sokol.c => src/ext/sokol_impl.c | 0 .../sokol/sokol.m => src/ext/sokol_impl.m | 0 src/system/sokol.c | 25 ++++ 5 files changed, 116 insertions(+), 45 deletions(-) rename examples/sokol/sokol.c => src/ext/sokol_impl.c (100%) rename examples/sokol/sokol.m => src/ext/sokol_impl.m (100%) create mode 100644 src/system/sokol.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 3110967..1975511 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -229,38 +229,32 @@ if(NOT EMSCRIPTEN) endif() ################################ -# Sokol renderer example +# Sokol ################################ -set(SOKOL_SRC - ${EXAMPLE_DIR}/sokol/main.c -) - if(APPLE) - set(SOKOL_SRC ${SOKOL_SRC} ${EXAMPLE_DIR}/sokol/sokol.m) + add_library(sokol src/ext/sokol_impl.m) else() - set(SOKOL_SRC ${SOKOL_SRC} ${EXAMPLE_DIR}/sokol/sokol.c) + add_library(sokol src/ext/sokol_impl.c) endif() if(APPLE) - set_source_files_properties(${SOKOL_SRC} PROPERTIES COMPILE_FLAGS -DSOKOL_METAL) + target_compile_definitions(sokol PRIVATE SOKOL_METAL) elseif(WIN32) - set_source_files_properties(${SOKOL_SRC} PROPERTIES COMPILE_FLAGS "-DSOKOL_D3D11 -DSOKOL_D3D11_SHADER_COMPILER") + target_compile_definitions(sokol PRIVATE SOKOL_D3D11 SOKOL_D3D11_SHADER_COMPILER) elseif(LINUX) - set_source_files_properties(${SOKOL_SRC} PROPERTIES COMPILE_FLAGS -DSOKOL_GLCORE33) + target_compile_definitions(sokol PRIVATE SOKOL_GLCORE33) endif() -if(WIN32) - add_executable(sokol-renderer WIN32 ${SOKOL_SRC}) -else() - add_executable(sokol-renderer ${SOKOL_SRC}) -endif() + #set_source_files_properties(${SOKOL_SRC} PROPERTIES COMPILE_FLAGS -DSOKOL_METAL) + # set_source_files_properties(${SOKOL_SRC} PROPERTIES COMPILE_FLAGS "-DSOKOL_D3D11 -DSOKOL_D3D11_SHADER_COMPILER") + #set_source_files_properties(${SOKOL_SRC} PROPERTIES COMPILE_FLAGS -DSOKOL_GLCORE33) if(APPLE) - set_property (TARGET sokol-renderer APPEND_STRING PROPERTY + set_property (TARGET sokol APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc") - target_link_libraries(sokol-renderer + target_link_libraries(sokol "-framework Cocoa" "-framework QuartzCore" "-framework Metal" @@ -268,22 +262,51 @@ if(APPLE) "-framework AudioToolbox" ) elseif(WIN32) - target_link_libraries(sokol-renderer D3D11) + target_link_libraries(sokol D3D11) if(MINGW) - target_link_libraries(sokol-renderer D3dcompiler_47 mingw32) + target_link_libraries(sokol D3dcompiler_47) endif() elseif(LINUX) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") - target_link_libraries(sokol-renderer X11 GL m dl asound) + target_link_libraries(sokol X11 GL m dl asound) +endif() + +target_include_directories(sokol PRIVATE 3rd-party/sokol) + +################################ +# Sokol renderer example +################################ + +set(SOKOL_SRC + ${EXAMPLE_DIR}/sokol/main.c +) + +if(WIN32) + add_executable(sokol-renderer WIN32 ${SOKOL_SRC}) +else() + add_executable(sokol-renderer ${SOKOL_SRC}) +endif() + +if(MINGW) + target_link_libraries(sokol-renderer mingw32) +endif() + +# TODO: remove this and define shaders in the sokol lib +if(APPLE) + target_compile_definitions(sokol-renderer PRIVATE SOKOL_METAL) +elseif(WIN32) + target_compile_definitions(sokol-renderer PRIVATE SOKOL_D3D11) +elseif(LINUX) + target_compile_definitions(sokol-renderer PRIVATE SOKOL_GLCORE33) endif() target_include_directories(sokol-renderer PRIVATE include) target_include_directories(sokol-renderer PRIVATE 3rd-party/sokol) target_include_directories(sokol-renderer PRIVATE src) -add_dependencies(sokol-renderer tic80core) -target_link_libraries(sokol-renderer tic80core) +add_dependencies(sokol-renderer tic80core sokol) +target_link_libraries(sokol-renderer tic80core sokol) ################################ # SDL GPU @@ -470,19 +493,32 @@ target_compile_definitions(tic80prolib PRIVATE TIC80_PRO) # TIC-80 app ################################ -set(TIC80_DIR src) -set(TIC80_SRC - ${TIC80_DIR}/net.c - ${TIC80_DIR}/system/sdlgpu.c - ${TIC80_DIR}/ext/file_dialog.c -) +set(TIC80_OUTPUTS ${TIC80_OUTPUTS} tic80-sokol tic80pro-sokol) if(APPLE) - set(TIC80_SRC ${TIC80_SRC} ${TIC80_DIR}/ext/file_dialog.m) + set(TIC80_SRC_COMMON ${TIC80_SRC_COMMON} src/ext/file_dialog.m) +else() + set(TIC80_SRC_COMMON ${TIC80_SRC_COMMON} src/ext/file_dialog.c) endif() foreach(TIC80_OUTPUT ${TIC80_OUTPUTS}) + if(TIC80_OUTPUT MATCHES "-sokol") + set(SOKOL_RENDERER TRUE) + else() + set(SOKOL_RENDERER FALSE) + endif() + + message("SOKOL_RENDERER ${SOKOL_RENDERER}") + + set(TIC80_SRC ${TIC80_SRC_COMMON}) + + if(SOKOL_RENDERER) + set(TIC80_SRC ${TIC80_SRC} src/system/sokol.c) + else() + set(TIC80_SRC ${TIC80_SRC} src/net.c src/system/sdlgpu.c) + endif() + if(WIN32) set(TIC80_SRC ${TIC80_SRC} build/windows/tic80.rc) add_executable(${TIC80_OUTPUT} WIN32 ${TIC80_SRC}) @@ -496,21 +532,31 @@ foreach(TIC80_OUTPUT ${TIC80_OUTPUTS}) target_include_directories(${TIC80_OUTPUT} PRIVATE include) target_include_directories(${TIC80_OUTPUT} PRIVATE src) - target_include_directories(${TIC80_OUTPUT} PRIVATE 3rd-party/SDL2-2.0.8/include) - target_include_directories(${TIC80_OUTPUT} PRIVATE 3rd-party/sdl-gpu/include) target_include_directories(${TIC80_OUTPUT} PRIVATE 3rd-party/SDL2_net-2.0.1) + target_include_directories(${TIC80_OUTPUT} PRIVATE 3rd-party/SDL2-2.0.8/include) + + if(SOKOL_RENDERER) + target_include_directories(${TIC80_OUTPUT} PRIVATE 3rd-party/sokol) + else() + target_include_directories(${TIC80_OUTPUT} PRIVATE 3rd-party/sdl-gpu/include) + endif() if(MINGW) target_link_libraries(${TIC80_OUTPUT} mingw32) endif() - if(NOT EMSCRIPTEN) - add_dependencies(${TIC80_OUTPUT} SDL2main SDL2-static) - target_link_libraries(${TIC80_OUTPUT} SDL2-static SDL2main) - endif() + if(SOKOL_RENDERER) + add_dependencies(${TIC80_OUTPUT} sokol) + target_link_libraries(${TIC80_OUTPUT} sokol) + else() + if(NOT EMSCRIPTEN) + add_dependencies(${TIC80_OUTPUT} SDL2main SDL2-static) + target_link_libraries(${TIC80_OUTPUT} SDL2-static SDL2main) + endif() - add_dependencies(${TIC80_OUTPUT} ${TIC80_OUTPUT}lib sdlnet sdlgpu) - target_link_libraries(${TIC80_OUTPUT} ${TIC80_OUTPUT}lib sdlnet sdlgpu) + add_dependencies(${TIC80_OUTPUT} ${TIC80_OUTPUT}lib sdlnet sdlgpu) + target_link_libraries(${TIC80_OUTPUT} ${TIC80_OUTPUT}lib sdlnet sdlgpu) + endif() if(LINUX) include(FindPkgConfig) diff --git a/src/ext/file_dialog.c b/src/ext/file_dialog.c index ed13edc..68842bf 100644 --- a/src/ext/file_dialog.c +++ b/src/ext/file_dialog.c @@ -22,9 +22,9 @@ #include "file_dialog.h" -#include +#include -#if defined(__WINDOWS__) +#if defined(__TIC_WINDOWS__) #include #include @@ -36,7 +36,7 @@ wchar_t* wcscpy(wchar_t *, const wchar_t *); void file_dialog_load(file_dialog_load_callback callback, void* data) { OPENFILENAMEW ofn; - SDL_zero(ofn); + memset(&ofn, 0, sizeof ofn); wchar_t filename[MAX_PATH]; memset(filename, 0, sizeof(filename)); @@ -83,7 +83,7 @@ void file_dialog_load(file_dialog_load_callback callback, void* data) void file_dialog_save(file_dialog_save_callback callback, const char* name, const u8* buffer, size_t size, void* data, u32 mode) { OPENFILENAMEW ofn; - SDL_zero(ofn); + memset(&ofn, 0, sizeof ofn); wchar_t filename[MAX_PATH]; mbstowcs(filename, name, MAX_PATH); @@ -102,7 +102,7 @@ void file_dialog_save(file_dialog_save_callback callback, const char* name, cons fwrite(buffer, 1, size, file); fclose(file); -#if !defined(__WINDOWS__) +#if !defined(__TIC_WINDOWS__) chmod(filename, mode); #endif callback(true, data); @@ -157,7 +157,7 @@ void file_dialog_save(file_dialog_save_callback callback, const char* name, cons callback(true, data); } -#elif defined(__LINUX__) +#elif defined(__TIC_LINUX__) #include #include @@ -267,7 +267,7 @@ void file_dialog_save(file_dialog_save_callback callback, const char* name, cons callback(false, data); } -#elif defined(__MACOSX__) +#elif defined(__TIC_MACOSX__) #include #include @@ -345,7 +345,7 @@ void file_dialog_save(file_dialog_save_callback callback, const char* name, cons callback(false, data); } -#elif defined(__ANDROID__) +#elif defined(__TIC_ANDROID__) #include #include diff --git a/examples/sokol/sokol.c b/src/ext/sokol_impl.c similarity index 100% rename from examples/sokol/sokol.c rename to src/ext/sokol_impl.c diff --git a/examples/sokol/sokol.m b/src/ext/sokol_impl.m similarity index 100% rename from examples/sokol/sokol.m rename to src/ext/sokol_impl.m diff --git a/src/system/sokol.c b/src/system/sokol.c new file mode 100644 index 0000000..28b473b --- /dev/null +++ b/src/system/sokol.c @@ -0,0 +1,25 @@ +#include "sokol_app.h" +#include "sokol_gfx.h" +#include "sokol_time.h" +#include "sokol_audio.h" + +#include +#include +#include +#include + +#include + +sapp_desc sokol_main(int argc, char* argv[]) +{ + return (sapp_desc) {0}; + // .init_cb = app_init, + // .frame_cb = app_frame, + // .event_cb = app_input, + // .cleanup_cb = app_cleanup, + // .width = 3 * TIC80_FULLWIDTH, + // .height = 3 * TIC80_FULLHEIGHT, + // .window_title = "TIC-80 with Sokol renderer", + // .ios_keyboard_resizes_canvas = true + // }; +}