macos stuff

main
Vladyslav Hrytsenko 2023-10-17 22:07:05 +03:00
parent 9499a5b9d9
commit a739ca9b14
8 changed files with 286 additions and 10 deletions

2
.gitignore vendored
View File

@ -14,3 +14,5 @@ demos/ports/doom/.doomrc
*.sublime-workspace *.sublime-workspace
engine/v4k.html engine/v4k.html
*.exe.manifest *.exe.manifest
v4k.osx

272
MAKE.sh 100755
View File

@ -0,0 +1,272 @@
#!/bin/bash
# linux + osx -----------------------------------------------------------------
cd `dirname $0`
# copy demos to root folder. local changes are preserved
# cp -n demos/*.c .
# rem tests
# clang editor.c -I. -lm -lX11 -g -fsanitize=address,undefined && ./a.out
# cl editor.c -I. -fsanitize=address /DEBUG /Zi && editor
# tidy environment
if [ "$1" = "tidy" ]; then
rm 0?-* 2> /dev/null
rm v4k.o 2> /dev/null
rm .art*.zip 2> /dev/null
rm demos/lua/.art*.zip 2> /dev/null
rm demos/lua/libv4k* 2> /dev/null
rm demos/html5/.art*.zip 2> /dev/null
rm v4k_*.* 2> /dev/null
rm 3rd_*.* 2> /dev/null
rm libv4k* 2> /dev/null
rm -rf *.dSYM 2> /dev/null
rm *.png 2> /dev/null
rm *.mp4 2> /dev/null
rm editor 2> /dev/null
rm temp_* 2> /dev/null
rm hello 2> /dev/null
exit
fi
# shortcuts for split & join scripts
if [ "$1" = "split" ]; then
sh tools/split.bat
exit
fi
if [ "$1" = "join" ]; then
sh tools/join.bat
exit
fi
# cook
if [ "$1" = "cook" ]; then
cc -o cook tools/cook.c -Iengine
./cook
exit
fi
# sync
if [ "$1" = "sync" ]; then
git reset --hard HEAD^1 && git pull
sh MAKE.bat tidy
exit
fi
export dll=dll
export build=dev
export args=
export cc=cc
export app=$1
while [ $# -ge 1 ]; do
if [ "$1" = "help" ]; then
echo sh MAKE.bat
echo sh MAKE.bat [gcc,clang,tcc] [dbg,dev,rel] [dll,static]
echo sh MAKE.bat [tidy]
echo sh MAKE.bat [split,join]
echo sh MAKE.bat [cook]
echo sh MAKE.bat [proj]
exit
fi
if [ "$1" = "dll" ]; then
export dll=dll
fi
if [ "$1" = "static" ]; then
export dll=static
fi
if [ "$1" = "dbg" ]; then
export build=dbg
export flags="-O0 -g"
fi
if [ "$1" = "dev" ]; then
export build=dev
export flags="-O1 -g"
fi
if [ "$1" = "rel" ]; then
export build=rel
export flags="-O3 -DNDEBUG"
fi
if [ "$1" = "gcc" ]; then
export cc=gcc
fi
if [ "$1" = "clang" ]; then
export cc=clang
fi
if [ "$1" = "tcc" ]; then
export cc="tcc -D__STDC_NO_VLA__"
fi
if [ "$1" = "proj" ]; then
if [ "$(uname)" != "Darwin" ]; then
chmod +x tools/premake5.linux
tools/premake5.linux gmake
tools/premake5.linux ninja
exit
fi
if [ "$(uname)" = "Darwin" ]; then
chmod +x tools/premake5.osx
tools/premake5.osx xcode4
tools/premake5.osx ninja
exit
fi
fi
if [ "$1" = "--" ]; then
shift
export args=$*
shift $#
fi
if [ $# -ge 1 ]; then
shift
fi
done
if [ "$(uname)" != "Darwin" ]; then
# setup (ArchLinux)
[ ! -f ".setup" ] && sudo pacman -S --noconfirm tcc && echo>.setup
# setup (Debian, Ubuntu, etc)
[ ! -f ".setup" ] && sudo apt-get -y update
[ ! -f ".setup" ] && sudo apt-get -y install tcc libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev && echo>.setup # absolute minimum
# sudo apt-get -y install clang xorg-dev # memorable, around 100 mib
# sudo apt-get -y install clang xorg-dev libglfw3-dev libassimp-dev gcc # initial revision
# sudo apt-get -y install ffmpeg || (sudo apt-get install snapd && sudo snap install ffmpeg) # variant
# pipeline
#cc tools/ass2iqe.c -o tools/ass2iqe.linux -lm -ldl -lpthread -w -g -lassimp
#cc tools/iqe2iqm.cpp -o tools/iqe2iqm.linux -lm -ldl -lpthread -w -g -lstdc++
#cc tools/mid2wav.c -o tools/mid2wav.linux -lm -ldl -lpthread -w -g
# change permissions of precompiled tools binaries because of 'Permission denied' runtime error (@procedural)
chmod +x tools/ass2iqe.linux
chmod +x tools/cook.linux
chmod +x tools/cuttlefish.linux
chmod +x tools/ffmpeg.linux
chmod +x tools/furnace.linux
chmod +x tools/iqe2iqm.linux
chmod +x tools/mid2wav.linux
chmod +x tools/mod2wav.linux
chmod +x tools/PVRTexToolCLI.linux
chmod +x tools/sfxr2wav.linux
chmod +x tools/xlsx2ini.linux
chmod +x tools/premake5.linux
chmod +x tools/ninja.linux
chmod +x demos/lua/luajit.linux
export args="-lm -ldl -lpthread -lX11 -w -Iengine/ $args"
echo build=$build, type=$dll, cc=$cc, args=$args
# framework (as dynamic library)
if [ "$dll" = "dll" ]; then
echo libv4k.so && $cc -o libv4k.so engine/v4k.c -shared -fPIC $flags $args
cp libv4k.so demos/lua/
export import="libv4k.so -Wl,-rpath,./"
else
# framework (static)
echo v4k && $cc -c engine/v4k.c -w $flags $args
export import=v4k.o
fi
# editor
echo editor && $cc -o editor tools/editor/editor.c $flags $import $args &
# demos
echo hello && $cc -o hello hello.c $flags $args &
echo 00-loop && $cc -o 00-loop demos/00-loop.c $flags $import $args &
echo 00-script && $cc -o 00-script demos/00-script.c $flags $import $args &
echo 01-demo2d && $cc -o 01-demo2d demos/01-demo2d.c $flags $import $args &
echo 01-ui && $cc -o 01-ui demos/01-ui.c $flags $import $args &
echo 01-easing && $cc -o 01-easing demos/01-easing.c $flags $import $args &
echo 01-font && $cc -o 01-font demos/01-font.c $flags $import $args &
echo 02-ddraw && $cc -o 02-ddraw demos/02-ddraw.c $flags $import $args &
echo 02-frustum && $cc -o 02-frustum demos/02-frustum.c $flags $import $args &
echo 03-anims && $cc -o 03-anims demos/03-anims.c $flags $import $args &
echo 04-actor && $cc -o 04-actor demos/04-actor.c $flags $import $args &
echo 06-scene && $cc -o 06-scene demos/06-scene.c $flags $import $args &
echo 07-netsync && $cc -o 07-netsync demos/07-netsync.c $flags $import $args &
echo 06-material && $cc -o 06-material demos/06-material.c $flags $import $args &
echo 07-network && $cc -o 07-network demos/07-network.c $flags $import $args &
echo 08-audio && $cc -o 08-audio demos/08-audio.c $flags $import $args &
echo 08-video && $cc -o 08-video demos/08-video.c $flags $import $args &
echo 09-cubemap && $cc -o 09-cubemap demos/09-cubemap.c $flags $import $args &
echo 09-shadertoy && $cc -o 09-shadertoy demos/09-shadertoy.c $flags $import $args
fi
if [ "$(uname)" = "Darwin" ]; then
# setup (osx)
export SDKROOT=$(xcrun --show-sdk-path)
# brew install glfw
# pipeline
#cc tools/ass2iqe.c -o tools/ass2iqe.osx -w -g -lassimp
#cc tools/iqe2iqm.cpp -o tools/iqe2iqm.osx -w -g -lstdc++
#cc tools/mid2wav.c -o tools/mid2wav.osx -w -g
# change permissions of precompiled tools binaries because of 'Permission denied' runtime error (@procedural)
chmod +x tools/ass2iqe.osx
chmod +x tools/cook.osx
chmod +x tools/cuttlefish.osx
chmod +x tools/ffmpeg.osx
chmod +x tools/furnace.osx
chmod +x tools/iqe2iqm.osx
chmod +x tools/mid2wav.osx
chmod +x tools/mod2wav.osx
chmod +x tools/PVRTexToolCLI.osx
chmod +x tools/sfxr2wav.osx
chmod +x tools/xlsx2ini.osx
chmod +x tools/premake5.osx
chmod +x tools/ninja.osx
chmod +x demos/lua/luajit.osx
export args="-w -Iengine/ -framework cocoa -framework iokit -framework CoreFoundation -framework CoreAudio -framework AudioToolbox $args"
echo build=$build, type=$dll, cc=$cc, args=$args
# User-defined apps
if [ -n "$app" ]; then
echo "$app" && $cc -ObjC "$app" engine/v4k.c $args -o "v4k.osx" || rc=1
fi
# if [ "$run" == "yes" ]; then
# exename="$1.osx"
# if [ -n "$other" ]; then
# exename=$(basename "$other" .exe)
# fi
# echo "run $exename $run_args"
# ./"$exename" $run_args || rc=1
# fi
# # framework (as dynamic library)
# if [ "$dll" = "dll" ]; then
# echo libv4k && cc -ObjC -dynamiclib -o libv4k.dylib engine/v4k.c $flags $args
# cp libv4k.dylib demos/lua
# export import=libv4k.dylib
# else
# # framework
# echo v4k && cc -c -ObjC engine/v4k.c $flags $args
# export import=v4k.o
# fi
# # editor
# echo editor && cc -o editor tools/editor/editor.c $import $flags $args &
# # demos
# echo hello && cc -o hello -ObjC hello.c $flags $args &
# echo 00-loop && cc -o 00-loop demos/00-loop.c $import $flags $args &
# echo 00-script && cc -o 00-script demos/00-script.c $import $flags $args &
# echo 01-demo2d && cc -o 01-demo2d demos/01-demo2d.c $import $flags $args &
# echo 01-ui && cc -o 01-ui demos/01-ui.c $import $flags $args &
# echo 01-easing && cc -o 01-easing demos/01-easing.c $import $flags $args &
# echo 01-font && cc -o 01-font demos/01-font.c $import $flags $args &
# echo 02-ddraw && cc -o 02-ddraw demos/02-ddraw.c $import $flags $args &
# echo 02-frustum && cc -o 02-frustum demos/02-frustum.c $import $flags $args &
# echo 03-anims && cc -o 03-anims demos/03-anims.c $import $flags $args &
# echo 04-actor && cc -o 04-actor demos/04-actor.c $import $flags $args &
# echo 06-scene && cc -o 06-scene demos/06-scene.c $import $flags $args &
# echo 07-netsync && cc -o 07-netsync demos/07-netsync.c $import $flags $args &
# echo 06-material && cc -o 06-material demos/06-material.c $import $flags $args &
# echo 07-network && cc -o 07-network demos/07-network.c $import $flags $args &
# echo 08-audio && cc -o 08-audio demos/08-audio.c $import $flags $args &
# echo 08-video && cc -o 08-video demos/08-video.c $import $flags $args &
# echo 09-cubemap && cc -o 09-cubemap demos/09-cubemap.c $import $flags $args &
# echo 09-shadertoy && cc -o 09-shadertoy demos/09-shadertoy.c $import $flags $args
fi
exit

@ -1 +1 @@
Subproject commit 27e24e603f1d1405c74c3fc9b241ed6c26185ba2 Subproject commit be43196a3d33412a5dbad92983af7e149b1b066d

View File

@ -1,7 +1,7 @@
// uniform mat4 view = mat4(1.0); // uniform mat4 view = mat4(1.0);
uniform vec3 lightPos = vec3(1.0); uniform vec3 lightPos = vec3(1.0);
uniform float doTexture = 1.; uniform float doTexture = 1.;
#if VSMCUBE #ifdef VSMCUBE
uniform samplerCube shadowMap; // VSMCUBE uniform samplerCube shadowMap; // VSMCUBE
#else #else
uniform sampler2D shadowMap; // !VSMCUBE uniform sampler2D shadowMap; // !VSMCUBE
@ -23,7 +23,7 @@ struct light {
); );
// From http://fabiensanglard.net/shadowmappingVSM/index.php // From http://fabiensanglard.net/shadowmappingVSM/index.php
#if VSMCUBE #ifdef VSMCUBE
float chebyshevUpperBound(float distance, vec3 dir) { float chebyshevUpperBound(float distance, vec3 dir) {
distance = distance/20 ; distance = distance/20 ;
vec2 moments = texture(shadowMap, dir).rg; vec2 moments = texture(shadowMap, dir).rg;
@ -60,7 +60,7 @@ struct light {
// Convert to eye-space // Convert to eye-space
vec3 light = vec3(view * vec4(light0.position, 1.0)); vec3 light = vec3(view * vec4(light0.position, 1.0));
#if VSMCUBE #ifdef VSMCUBE
// Vectors // Vectors
vec3 fragmentToLight = light - fragment; vec3 fragmentToLight = light - fragment;
vec3 fragmentToLightDir = normalize(fragmentToLight); vec3 fragmentToLightDir = normalize(fragmentToLight);
@ -82,7 +82,7 @@ struct light {
#endif #endif
vec4 diffColor = vec4(1,1,1,1); vec4 diffColor = vec4(1,1,1,1);
#if VSMCUBE #ifdef VSMCUBE
if(doTexture != 0) diffColor = vec4(vec3(texture(shadowMap, -fragmentToLight_world.xyz).r), 1.0); if(doTexture != 0) diffColor = vec4(vec3(texture(shadowMap, -fragmentToLight_world.xyz).r), 1.0);
#else #else
if(doTexture != 0) diffColor = vec4(vec3(texture(shadowMap, vec2(uv.x, 1.0 - uv.y)).r), 1.0); if(doTexture != 0) diffColor = vec4(vec3(texture(shadowMap, vec2(uv.x, 1.0 - uv.y)).r), 1.0);
@ -109,4 +109,4 @@ struct light {
#endif #endif
return vec4(clamp(vec3(total_lighting), 0., 1.), 1.0); return vec4(clamp(vec3(total_lighting), 0., 1.), 1.0);
#endif #endif
} }

View File

@ -2,7 +2,7 @@ in vec4 v_position;
out vec4 outColor; out vec4 outColor;
void main() { void main() {
#if VSMCUBE #ifdef VSMCUBE
float depth = length( vec3(v_position) ) / 20; float depth = length( vec3(v_position) ) / 20;
#else #else
float depth = v_position.z / v_position.w; float depth = v_position.z / v_position.w;
@ -16,4 +16,4 @@ void main() {
float dy = dFdy(depth); float dy = dFdy(depth);
moment2 += 0.25*(dx*dx+dy*dy); moment2 += 0.25*(dx*dx+dy*dy);
outColor = vec4( moment1, moment2, 0.0, 0.0); outColor = vec4( moment1, moment2, 0.0, 0.0);
} }

View File

@ -7,9 +7,9 @@ out vec4 v_position;
void main() { void main() {
gl_Position = cameraToShadowProjector * model * vec4(position, 1.0); gl_Position = cameraToShadowProjector * model * vec4(position, 1.0);
#if VSMCUBE #ifdef VSMCUBE
v_position = cameraToShadowView * model * vec4(position, 1.0); v_position = cameraToShadowView * model * vec4(position, 1.0);
#else #else
v_position = gl_Position; v_position = gl_Position;
#endif #endif
} }

View File

@ -52,6 +52,7 @@
#define BQ_WEBSOCKET_IMPLEMENTATION // websocket #define BQ_WEBSOCKET_IMPLEMENTATION // websocket
#define XML_C // xml #define XML_C // xml
#ifdef __APPLE__ #ifdef __APPLE__
#define MA_NO_RUNTIME_LINKING // miniaudio
#define _GLFW_COCOA // glfw osx #define _GLFW_COCOA // glfw osx
#elif defined _WIN32 #elif defined _WIN32
#define _GLFW_WIN32 // glfw win32 #define _GLFW_WIN32 // glfw win32

View File

@ -13980,6 +13980,7 @@ int gladLoadGL( GLADloadfunc load) {
#define BQ_WEBSOCKET_IMPLEMENTATION // websocket #define BQ_WEBSOCKET_IMPLEMENTATION // websocket
#define XML_C // xml #define XML_C // xml
#ifdef __APPLE__ #ifdef __APPLE__
#define MA_NO_RUNTIME_LINKING // miniaudio
#define _GLFW_COCOA // glfw osx #define _GLFW_COCOA // glfw osx
#elif defined _WIN32 #elif defined _WIN32
#define _GLFW_WIN32 // glfw win32 #define _GLFW_WIN32 // glfw win32