diff --git a/.gitmodules b/.gitmodules index 37ee4d0..1d97f68 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "dependencies/microtar"] path = dependencies/microtar url = https://github.com/MrLetsplay2003/microtar.git +[submodule "dependencies/openvr"] + path = dependencies/openvr + url = https://github.com/ValveSoftware/openvr diff --git a/CMakeLists.txt b/CMakeLists.txt index 3bb9db5..ff9c138 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,11 +4,21 @@ project(KekEngine VERSION 1.0) option(BUILD_SHARED_LIBS "Build as a shared library" ON) option(KEKENGINE_DEBUG "Build with debug information" OFF) +option(KEKENGINE_VR "Include VR support" OFF) option(KEKENGINE_BUILD_KEKGAME "Build kekgame" OFF) +if(UNIX) + set(KEKENGINE_TARGET_PLATFORM Linux) +endif() +if(WIN32) + set(KEKENGINE_TARGET_PLATFORM Windows) + set(BUILD_SHARED_LIBS OFF) +endif() + message("Build shared libs: ${BUILD_SHARED_LIBS}") message("Debug: ${KEKENGINE_DEBUG}") message("Build kekgame: ${KEKENGINE_BUILD_KEKGAME}") +message("Target platform: ${KEKENGINE_TARGET_PLATFORM}") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) @@ -49,14 +59,39 @@ add_custom_command(TARGET kekengine_res PRE_BUILD add_library(kekengine ${KEKENGINE_SOURCE_FILES}) add_dependencies(kekengine kekengine_res) -target_link_libraries(kekengine PUBLIC glfw GLEW GL microtar) -target_include_directories(kekengine PRIVATE "src/kekengine/include") -target_compile_definitions(kekengine PUBLIC KEKENGINE_TARGET_LINUX) +target_link_libraries(kekengine PUBLIC microtar) -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK3 REQUIRED gtk+-3.0) -target_link_libraries(kekengine PUBLIC ${GTK3_LIBRARIES}) -target_include_directories(kekengine PRIVATE ${GTK3_INCLUDE_DIRS}) +if(UNIX) + target_link_libraries(kekengine PUBLIC glfw GLEW GL) + + # GTK + find_package(PkgConfig REQUIRED) + pkg_check_modules(GTK3 REQUIRED gtk+-3.0) + target_link_libraries(kekengine PUBLIC ${GTK3_LIBRARIES}) + target_include_directories(kekengine PRIVATE ${GTK3_INCLUDE_DIRS}) +endif() +if(WIN32) + target_link_libraries(kekengine PUBLIC glfw3 glew32s opengl32) +endif() + +if(${KEKENGINE_VR}) + target_link_directories(kekengine PUBLIC "dependencies/openvr/bin/linux64") + target_link_libraries(kekengine PUBLIC openvr_api) +endif() + +target_include_directories(kekengine PRIVATE "src/kekengine/include") + +if(UNIX) + target_compile_definitions(kekengine PUBLIC KEKENGINE_TARGET_LINUX) +endif() +if(WIN32) + target_compile_definitions(kekengine PUBLIC KEKENGINE_TARGET_WINDOWS) +endif() + +if(${KEKENGINE_VR}) + target_compile_definitions(kekengine PUBLIC KEKENGINE_VR) + target_include_directories(kekengine PRIVATE "dependencies/openvr/headers") +endif() if(${KEKENGINE_BUILD_KEKGAME}) # kekgame resources diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index a9b2f82..bbc287b 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -2,3 +2,4 @@ - OpenGL, GLEW, GLFW - stb_image, stb_image_write - microtar (included) +- openvr (SteamVR), if compiling with KEKENGINE_VR diff --git a/dependencies/openvr b/dependencies/openvr new file mode 160000 index 0000000..08de382 --- /dev/null +++ b/dependencies/openvr @@ -0,0 +1 @@ +Subproject commit 08de3821dfd3aa46f778376680c68f33b9fdcb6c diff --git a/src/kekengine/cpp/engine.cpp b/src/kekengine/cpp/engine.cpp index a8bbae2..1320d53 100644 --- a/src/kekengine/cpp/engine.cpp +++ b/src/kekengine/cpp/engine.cpp @@ -219,17 +219,27 @@ int start() { LightList *lights = kekData.activeScene->lights; - std::vector shaderLights; + std::vector shaderLights; // TODO: Maybe don't compute on every frame for(PointLight *light : lights->point) { - if(glm::abs(light->getPosition() - kekData.activeCamera->getPosition()).length() < 10) { + if(glm::length2(glm::abs(light->getPosition() - kekData.activeCamera->getPosition())) < KEK_LIGHT_MAX_DISTANCE_SQUARED) { shaderLights.push_back(light); } } - glUniform1i(glGetUniformLocation(kekData.shader->id, "numPointLights"), 1); + for(DirectionalLight *light : lights->directional) { + shaderLights.push_back(light); + } + + for(SpotLight *light : lights->spot) { + if(glm::length2(glm::abs(light->getPosition() - kekData.activeCamera->getPosition())) < KEK_LIGHT_MAX_DISTANCE_SQUARED) { + shaderLights.push_back(light); + } + } unsigned int i = 0; + int numPointLights = 0, numDirectionalLights = 0, numSpotLights = 0; + for(Light *light : shaderLights) { std::string prefix = "lights[" + std::to_string(i) + "]."; @@ -237,18 +247,39 @@ int start() { case LightType::POINT: { PointLight *l = (PointLight *) light; - glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "position").c_str()), 1, glm::value_ptr(l->getPosition())); glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "color").c_str()), 1, glm::value_ptr(l->color)); + glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "position").c_str()), 1, glm::value_ptr(l->getPosition())); glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "attenuation").c_str()), 1, glm::value_ptr(glm::vec3(l->constant, l->linear, l->quadratic))); + numPointLights++; + break; } case LightType::DIRECTIONAL: - case LightType::SPOT: + { + DirectionalLight *l = (DirectionalLight *) light; + glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "color").c_str()), 1, glm::value_ptr(l->color)); + glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "direction").c_str()), 1, glm::value_ptr(l->direction)); + numDirectionalLights++; break; + } + case LightType::SPOT: + { + SpotLight *l = (SpotLight *) light; + glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "color").c_str()), 1, glm::value_ptr(l->color)); + glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "position").c_str()), 1, glm::value_ptr(l->getPosition())); + glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "direction").c_str()), 1, glm::value_ptr(l->direction)); + glUniform3fv(glGetUniformLocation(kekData.shader->id, (prefix + "attenuation").c_str()), 1, glm::value_ptr(glm::vec3(l->constant, l->linear, l->quadratic))); + numSpotLights++; + break; + } } i++; } + glUniform1i(glGetUniformLocation(kekData.shader->id, "numPointLights"), numPointLights); + glUniform1i(glGetUniformLocation(kekData.shader->id, "numDirectionalLights"), numDirectionalLights); + glUniform1i(glGetUniformLocation(kekData.shader->id, "numSpotLights"), numSpotLights); + if(kekData.activeScene) kekData.activeScene->draw(kekData.shader); // Swap buffers and poll window events diff --git a/src/kekengine/cpp/light.cpp b/src/kekengine/cpp/light.cpp index 3f730ea..3eb2495 100644 --- a/src/kekengine/cpp/light.cpp +++ b/src/kekengine/cpp/light.cpp @@ -13,10 +13,10 @@ Light::~Light() { } -PointLight::PointLight(glm::vec3 color, float constantFalloff, float linearFalloff, float quadraticFalloff): Light(color) { - this->constant = constantFalloff; - this->linear = linearFalloff; - this->quadratic = quadraticFalloff; +PointLight::PointLight(glm::vec3 color, float constant, float linear, float quadratic): Light(color) { + this->constant = constant; + this->linear = linear; + this->quadratic = quadratic; } PointLight::~PointLight() { @@ -27,17 +27,50 @@ LightType PointLight::getType() { return LightType::POINT; } +DirectionalLight::DirectionalLight(glm::vec3 color, glm::vec3 direction): Light(color) { + this->direction = direction; +} + +DirectionalLight::~DirectionalLight() { + +} + +LightType DirectionalLight::getType() { + return LightType::DIRECTIONAL; +} + +void DirectionalLight::lookAt(glm::vec3 direction){ + this->direction = direction; +} + +SpotLight::SpotLight(glm::vec3 color, glm::vec3 direction, float constant, float linear, float quadratic): Light(color) { + this->direction = direction; + this->constant = constant; + this->linear = linear; + this->quadratic = quadratic; +} + +SpotLight::~SpotLight() { + +} + +LightType SpotLight::getType() { + return LightType::SPOT; +} + +void SpotLight::lookAt(glm::vec3 direction) { + this->direction = direction; +} + LightList::LightList() { - point = std::vector(); - //directional = std::vector(); - //spot = std::vector(); + } void LightList::add(Light *light) { switch(light->getType()) { case LightType::POINT: point.push_back((PointLight *) light); break; - //case LightType::DIRECTIONAL: directional.push_back((DirectionalLight *) light); break; - //case LightType::SPOT: spot.push_back((SpotLight *) light); break; + case LightType::DIRECTIONAL: directional.push_back((DirectionalLight *) light); break; + case LightType::SPOT: spot.push_back((SpotLight *) light); break; } } diff --git a/src/kekengine/include/constants.h b/src/kekengine/include/constants.h index 9d0802c..79d7ab3 100644 --- a/src/kekengine/include/constants.h +++ b/src/kekengine/include/constants.h @@ -14,3 +14,6 @@ #define KEK_LIGHT_DEFAULT_AMBIENT_STRENGTH 0.05f #define KEK_LIGHT_DEFAULT_SPECULAR_STRENGTH 0.1f + +#define KEK_LIGHT_MAX_DISTANCE 30 +#define KEK_LIGHT_MAX_DISTANCE_SQUARED (KEK_LIGHT_MAX_DISTANCE * KEK_LIGHT_MAX_DISTANCE) diff --git a/src/kekengine/include/light.h b/src/kekengine/include/light.h index 2ef4bd9..b6418a7 100644 --- a/src/kekengine/include/light.h +++ b/src/kekengine/include/light.h @@ -39,12 +39,43 @@ public: }; +class DirectionalLight: public Light { + +public: + glm::vec3 direction; + + DirectionalLight(glm::vec3 color, glm::vec3 direction); + + ~DirectionalLight(); + + LightType getType(); + + void lookAt(glm::vec3 direction); + +}; + +class SpotLight: public Light, public DefaultObject { + +public: + glm::vec3 direction; + float constant, linear, quadratic; + + SpotLight(glm::vec3 color, glm::vec3 direction, float constantFalloff, float linearFalloff, float quadraticFalloff); + + ~SpotLight(); + + LightType getType(); + + void lookAt(glm::vec3 direction); + +}; + class LightList { public: std::vector point; - //std::vector directional; - //std::vector spot; + std::vector directional; + std::vector spot; LightList(); diff --git a/src/kekengine/res/shader/include/lightcalc.glsl b/src/kekengine/res/shader/include/lightcalc.glsl index 8fa530f..10c9e72 100644 --- a/src/kekengine/res/shader/include/lightcalc.glsl +++ b/src/kekengine/res/shader/include/lightcalc.glsl @@ -23,3 +23,52 @@ vec3 calcPointLight(Light light, vec3 normal, vec3 fragPos, vec3 viewDir, vec2 t return ambient + (1.0 - shadow) * (diffuse + specular); } + +vec3 calcDirectionalLight(Light light, vec3 normal, vec3 viewDir, vec2 texCoord, float shadow) { + vec3 lightDir = normalize(-light.direction); + vec3 halfwayDir = normalize(lightDir + viewDir); + + // Ambient + vec3 ambient = light.color * vec3(texture(material.diffuse, texCoord)); + + // Diffuse + float diff = max(dot(normal, lightDir), 0.0); + vec3 diffuse = light.color * diff * vec3(texture(material.diffuse, texCoord)); + + // Specular + float spec = pow(max(dot(normal, halfwayDir), 0.0), material.shininess); + vec3 specular = light.color * spec * vec3(texture(material.specular, texCoord)); + + return ambient + (1.0 - shadow) * (diffuse + specular); +} + +vec3 calcSpotLight(Light light, vec3 normal, vec3 fragPos, vec3 viewDir, vec2 texCoord, float shadow) { + vec3 lightDir = normalize(light.position - fragPos); + vec3 halfwayDir = normalize(lightDir + viewDir); + + // Ambient + vec3 ambient = light.color * vec3(texture(material.diffuse, texCoord)); + + // Diffuse + float diff = max(dot(normal, lightDir), 0.0); + vec3 diffuse = light.color * diff * vec3(texture(material.diffuse, texCoord)); + + // Specular + float spec = pow(max(dot(normal, halfwayDir), 0.0), material.shininess); + vec3 specular = light.color * spec * vec3(texture(material.specular, texCoord)); + + // Intensity + float theta = dot(lightDir, normalize(-light.direction)); + float epsilon = light.cutoff.x - light.cutoff.y; + float intensity = clamp((theta - light.cutoff.y) / epsilon, 0.0, 1.0); + + // Attenuation + float dist = length(light.position - fragPos); + float attenuation = 1.0 / (light.attenuation.x + light.attenuation.y * dist + light.attenuation.z * (dist * dist)); + + ambient *= intensity * attenuation; + diffuse *= intensity * attenuation; + specular *= intensity * attenuation; + + return ambient + (1.0 - shadow) * (diffuse + specular); +} diff --git a/src/kekengine/res/shader/include/types.glsl b/src/kekengine/res/shader/include/types.glsl index eb67f94..422c778 100644 --- a/src/kekengine/res/shader/include/types.glsl +++ b/src/kekengine/res/shader/include/types.glsl @@ -6,10 +6,10 @@ struct Material { }; struct Light { + vec3 color; vec3 position; vec3 direction; - vec3 color; - vec3 attenuation; - vec2 cutoff; + vec3 attenuation; // constant, linear, quadratic + vec2 cutoff; // inner, outer mat4 lightSpaceMatrix; }; diff --git a/src/kekengine/res/shader/mesh/fragment.glsl b/src/kekengine/res/shader/mesh/fragment.glsl index 74e1300..e95a7c5 100644 --- a/src/kekengine/res/shader/mesh/fragment.glsl +++ b/src/kekengine/res/shader/mesh/fragment.glsl @@ -10,6 +10,8 @@ in VS_OUT { uniform Light lights[8]; uniform int numPointLights; +uniform int numDirectionalLights; +uniform int numSpotLights; uniform Material material; @@ -35,5 +37,13 @@ void main() { result += calcPointLight(lights[i], normal, fs_in.fragmentPosition, viewDir, fs_in.textureCoordinate, 0.0); } + for(int i = 0; i < numDirectionalLights; i++) { + result += calcDirectionalLight(lights[numPointLights + i], normal, viewDir, fs_in.textureCoordinate, 0.0); + } + + for(int i = 0; i < numSpotLights; i++) { + result += calcSpotLight(lights[numPointLights + numDirectionalLights + i], normal, fs_in.fragmentPosition, viewDir, fs_in.textureCoordinate, 0.0); + } + color = vec4(pow(result, vec3(1.0 / gamma)), 1.0); } diff --git a/src/kekgame/cpp/kekgame.cpp b/src/kekgame/cpp/kekgame.cpp index bd9ada0..4d12b2f 100644 --- a/src/kekgame/cpp/kekgame.cpp +++ b/src/kekgame/cpp/kekgame.cpp @@ -26,8 +26,11 @@ int main(int argc, char **argv) { scene->addObject(test2); } - PointLight *light = new PointLight(glm::vec3(1), 1, 1, 1); - scene->lights->add(light); + //PointLight *light = new PointLight(glm::vec3(1), 1, 1, 1); + //scene->lights->add(light); + + DirectionalLight *l = new DirectionalLight(glm::vec3(1), glm::vec3(1, -1, 1)); + scene->lights->add(l); Engine::setActiveScene(scene); diff --git a/toolchains/linux-mingw-windows.cmake b/toolchains/linux-mingw-windows.cmake new file mode 100644 index 0000000..7b54112 --- /dev/null +++ b/toolchains/linux-mingw-windows.cmake @@ -0,0 +1,19 @@ +set(CMAKE_SYSTEM_NAME Windows) + +set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) +set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) + +set(CMAKE_C_FLAGS -w) +set(CMAKE_CXX_FLAGS -w) + +set(KEKENGINE_TARGET_PLATFORM Windows) + +set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32/) +link_directories(windows/lib/) +include_directories(windows/include/) +link_directories(dependencies/openvr/bin/win64) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/windows/.gitignore b/windows/.gitignore new file mode 100644 index 0000000..dacffc6 --- /dev/null +++ b/windows/.gitignore @@ -0,0 +1 @@ +include/ \ No newline at end of file diff --git a/windows/glew32.dll b/windows/glew32.dll new file mode 100644 index 0000000..04f9381 Binary files /dev/null and b/windows/glew32.dll differ diff --git a/windows/glfw3.dll b/windows/glfw3.dll new file mode 100644 index 0000000..c5790d5 Binary files /dev/null and b/windows/glfw3.dll differ diff --git a/windows/lib/OpenAL32.def b/windows/lib/OpenAL32.def new file mode 100644 index 0000000..a5c4c00 --- /dev/null +++ b/windows/lib/OpenAL32.def @@ -0,0 +1,176 @@ +EXPORTS + alAuxiliaryEffectSlotPlaySOFT + alAuxiliaryEffectSlotPlayvSOFT + alAuxiliaryEffectSlotStopSOFT + alAuxiliaryEffectSlotStopvSOFT + alAuxiliaryEffectSlotf + alAuxiliaryEffectSlotfv + alAuxiliaryEffectSloti + alAuxiliaryEffectSlotiv + alBuffer3f + alBuffer3i + alBufferCallbackSOFT + alBufferData + alBufferSamplesSOFT + alBufferStorageSOFT + alBufferSubDataSOFT + alBufferSubSamplesSOFT + alBufferf + alBufferfv + alBufferi + alBufferiv + alDeferUpdatesSOFT + alDeleteAuxiliaryEffectSlots + alDeleteBuffers + alDeleteEffects + alDeleteFilters + alDeleteSources + alDisable + alDistanceModel + alDopplerFactor + alDopplerVelocity + alEffectf + alEffectfv + alEffecti + alEffectiv + alEnable + alEventCallbackSOFT + alEventControlSOFT + alFilterf + alFilterfv + alFilteri + alFilteriv + alFlushMappedBufferSOFT + alGenAuxiliaryEffectSlots + alGenBuffers + alGenEffects + alGenFilters + alGenSources + alGetAuxiliaryEffectSlotf + alGetAuxiliaryEffectSlotfv + alGetAuxiliaryEffectSloti + alGetAuxiliaryEffectSlotiv + alGetBoolean + alGetBooleanv + alGetBuffer3PtrSOFT + alGetBuffer3f + alGetBuffer3i + alGetBufferPtrSOFT + alGetBufferPtrvSOFT + alGetBufferSamplesSOFT + alGetBufferf + alGetBufferfv + alGetBufferi + alGetBufferiv + alGetDouble + alGetDoublev + alGetEffectf + alGetEffectfv + alGetEffecti + alGetEffectiv + alGetEnumValue + alGetError + alGetFilterf + alGetFilterfv + alGetFilteri + alGetFilteriv + alGetFloat + alGetFloatv + alGetInteger + alGetInteger64SOFT + alGetInteger64vSOFT + alGetIntegerv + alGetListener3f + alGetListener3i + alGetListenerf + alGetListenerfv + alGetListeneri + alGetListeneriv + alGetPointerSOFT + alGetPointervSOFT + alGetProcAddress + alGetSource3dSOFT + alGetSource3f + alGetSource3i + alGetSource3i64SOFT + alGetSourcedSOFT + alGetSourcedvSOFT + alGetSourcef + alGetSourcefv + alGetSourcei + alGetSourcei64SOFT + alGetSourcei64vSOFT + alGetSourceiv + alGetString + alGetStringiSOFT + alIsAuxiliaryEffectSlot + alIsBuffer + alIsBufferFormatSupportedSOFT + alIsEffect + alIsEnabled + alIsExtensionPresent + alIsFilter + alIsSource + alListener3f + alListener3i + alListenerf + alListenerfv + alListeneri + alListeneriv + alMapBufferSOFT + alProcessUpdatesSOFT + alSource3dSOFT + alSource3f + alSource3i + alSource3i64SOFT + alSourcePause + alSourcePausev + alSourcePlay + alSourcePlayv + alSourceQueueBuffers + alSourceRewind + alSourceRewindv + alSourceStop + alSourceStopv + alSourceUnqueueBuffers + alSourcedSOFT + alSourcedvSOFT + alSourcef + alSourcefv + alSourcei + alSourcei64SOFT + alSourcei64vSOFT + alSourceiv + alSpeedOfSound + alUnmapBufferSOFT + alcCaptureCloseDevice + alcCaptureOpenDevice + alcCaptureSamples + alcCaptureStart + alcCaptureStop + alcCloseDevice + alcCreateContext + alcDestroyContext + alcDevicePauseSOFT + alcDeviceResumeSOFT + alcGetContextsDevice + alcGetCurrentContext + alcGetEnumValue + alcGetError + alcGetInteger64vSOFT + alcGetIntegerv + alcGetProcAddress + alcGetString + alcGetStringiSOFT + alcGetThreadContext + alcIsExtensionPresent + alcIsRenderFormatSupportedSOFT + alcLoopbackOpenDeviceSOFT + alcMakeContextCurrent + alcOpenDevice + alcProcessContext + alcRenderSamplesSOFT + alcResetDeviceSOFT + alcSetThreadContext + alcSuspendContext + alsoft_get_version diff --git a/windows/lib/OpenAL32.lib b/windows/lib/OpenAL32.lib new file mode 100644 index 0000000..9c6ec3e Binary files /dev/null and b/windows/lib/OpenAL32.lib differ diff --git a/windows/lib/glew32.lib b/windows/lib/glew32.lib new file mode 100644 index 0000000..3d780d9 Binary files /dev/null and b/windows/lib/glew32.lib differ diff --git a/windows/lib/glew32s.lib b/windows/lib/glew32s.lib new file mode 100644 index 0000000..584c462 Binary files /dev/null and b/windows/lib/glew32s.lib differ diff --git a/windows/lib/glfw3.dll b/windows/lib/glfw3.dll new file mode 100644 index 0000000..c5790d5 Binary files /dev/null and b/windows/lib/glfw3.dll differ diff --git a/windows/lib/libOpenAL32.dll.a b/windows/lib/libOpenAL32.dll.a new file mode 100644 index 0000000..ad45644 Binary files /dev/null and b/windows/lib/libOpenAL32.dll.a differ diff --git a/windows/lib/libgdi32.a b/windows/lib/libgdi32.a new file mode 100644 index 0000000..38f386e Binary files /dev/null and b/windows/lib/libgdi32.a differ diff --git a/windows/lib/libglfw3.a b/windows/lib/libglfw3.a new file mode 100644 index 0000000..a1836b5 Binary files /dev/null and b/windows/lib/libglfw3.a differ diff --git a/windows/lib/libglfw3dll.a b/windows/lib/libglfw3dll.a new file mode 100644 index 0000000..60830a3 Binary files /dev/null and b/windows/lib/libglfw3dll.a differ diff --git a/windows/mingw_linux.sh b/windows/mingw_linux.sh new file mode 100755 index 0000000..5ea7feb --- /dev/null +++ b/windows/mingw_linux.sh @@ -0,0 +1,3 @@ +#!/bin/sh +FILES="../src/cpp/gameobject.cpp ../src/cpp/light.cpp ../src/cpp/material.cpp ../src/cpp/object.cpp ../src/cpp/scene.cpp ../src/cpp/shader.cpp ../src/cpp/texture.cpp ../src/cpp/utils.cpp ../src/cpp/engine.cpp ../src/cpp/input.cpp ../src/cpp/game.cpp" +x86_64-w64-mingw32-g++ -static-libstdc++ -static-libgcc -I../src/headers/ $FILES -lglfw3 -lopengl32 -lglew32 -lgdi32 -Wl,-Bstatic -lstdc++ -lwinpthread -Wl,-Bdynamic -mwindows -I./include/ -L./lib/ -o kek.exe \ No newline at end of file diff --git a/windows/msys-packages.txt b/windows/msys-packages.txt new file mode 100644 index 0000000..e30a8f1 --- /dev/null +++ b/windows/msys-packages.txt @@ -0,0 +1,153 @@ +base 2020.12-1 +bash 5.1.008-1 +bash-completion 2.11-1 +brotli 1.0.9-2 +bsdtar 3.5.2-1 +bzip2 1.0.8-3 +ca-certificates 20210119-3 +coreutils 8.32-2 +curl 7.80.0-3 +dash 0.5.11.5-1 +db 5.3.28-3 +file 5.41-2 +filesystem 2021.11-2 +findutils 4.8.0-1 +gawk 5.1.0-2 +gcc-libs 11.2.0-3 +gdbm 1.22-1 +getent 2.18.90-3 +gettext 0.21-1 +glib2 2.68.4-1 +gmp 6.2.1-1 +gnupg 2.2.32-2 +grep 1~3.0-3 +gzip 1.11-1 +heimdal-libs 7.7.0-3 +icu 70.1-1 +inetutils 1.9.4-3 +info 6.8-3 +less 590-1 +libargp 20110921-3 +libasprintf 0.21-1 +libassuan 2.5.5-1 +libbz2 1.0.8-3 +libcrypt 2.1-3 +libcurl 7.80.0-3 +libdb 5.3.28-3 +libedit 20210910_3.1-1 +libexpat 2.4.3-1 +libffi 3.3-1 +libgcrypt 1.9.4-1 +libgdbm 1.22-1 +libgettextpo 0.21-1 +libgnutls 3.7.2-1 +libgpg-error 1.43-1 +libgpgme 1.16.0-1 +libhogweed 3.7.3-1 +libiconv 1.16-2 +libidn2 2.3.2-1 +libintl 0.21-1 +libksba 1.6.0-1 +liblz4 1.9.3-1 +liblzma 5.2.5-1 +libnettle 3.7.3-1 +libnghttp2 1.46.0-1 +libnpth 1.6-1 +libopenssl 1.1.1.m-1 +libp11-kit 0.24.0-1 +libpcre 8.45-1 +libpcre2_8 10.37-1 +libpsl 0.21.1-2 +libreadline 8.1.001-1 +libsqlite 3.36.0-3 +libssh2 1.10.0-1 +libtasn1 4.18.0-2 +libunistring 0.9.10-1 +libutil-linux 2.35.2-1 +libxml2 2.9.12-3 +libxslt 1.1.34-4 +libzstd 1.5.1-1 +mingw-w64-x86_64-binutils 2.37-4 +mingw-w64-x86_64-bzip2 1.0.8-2 +mingw-w64-x86_64-ca-certificates 20210119-1 +mingw-w64-x86_64-crt-git 9.0.0.6373.5be8fcd83-1 +mingw-w64-x86_64-expat 2.4.3-1 +mingw-w64-x86_64-gcc 11.2.0-7 +mingw-w64-x86_64-gcc-ada 11.2.0-7 +mingw-w64-x86_64-gcc-fortran 11.2.0-7 +mingw-w64-x86_64-gcc-libgfortran 11.2.0-7 +mingw-w64-x86_64-gcc-libs 11.2.0-7 +mingw-w64-x86_64-gcc-objc 11.2.0-7 +mingw-w64-x86_64-gdb 11.1-2 +mingw-w64-x86_64-gdb-multiarch 11.1-2 +mingw-w64-x86_64-gettext 0.21-3 +mingw-w64-x86_64-glew 2.2.0-2 +mingw-w64-x86_64-glfw 3.3.6-1 +mingw-w64-x86_64-glm 0.9.9.8-1 +mingw-w64-x86_64-gmp 6.2.1-3 +mingw-w64-x86_64-headers-git 9.0.0.6373.5be8fcd83-1 +mingw-w64-x86_64-isl 0.24-1 +mingw-w64-x86_64-libffi 3.3-4 +mingw-w64-x86_64-libgccjit 11.2.0-7 +mingw-w64-x86_64-libiconv 1.16-2 +mingw-w64-x86_64-libmangle-git 9.0.0.6373.5be8fcd83-1 +mingw-w64-x86_64-libsystre 1.0.1-4 +mingw-w64-x86_64-libtasn1 4.18.0-1 +mingw-w64-x86_64-libtre-git r128.6fb7206-2 +mingw-w64-x86_64-libwinpthread-git 9.0.0.6373.5be8fcd83-1 +mingw-w64-x86_64-libxml2 2.9.12-5 +mingw-w64-x86_64-llvm 13.0.0-5 +mingw-w64-x86_64-make 4.3-1 +mingw-w64-x86_64-mesa 21.3.4-1 +mingw-w64-x86_64-mpc 1.2.1-1 +mingw-w64-x86_64-mpdecimal 2.5.1-1 +mingw-w64-x86_64-mpfr 4.1.0.p13-1 +mingw-w64-x86_64-ncurses 6.3-3 +mingw-w64-x86_64-openssl 1.1.1.m-1 +mingw-w64-x86_64-p11-kit 0.24.1-1 +mingw-w64-x86_64-pkgconf 1.8.0-2 +mingw-w64-x86_64-python 3.9.7-4 +mingw-w64-x86_64-readline 8.1.001-1 +mingw-w64-x86_64-sqlite3 3.37.2-1 +mingw-w64-x86_64-stb r1943.c9064e3-2 +mingw-w64-x86_64-tcl 8.6.11-5 +mingw-w64-x86_64-termcap 1.3.1-6 +mingw-w64-x86_64-tk 8.6.11.1-2 +mingw-w64-x86_64-tools-git 9.0.0.6373.5be8fcd83-1 +mingw-w64-x86_64-tzdata 2021e-1 +mingw-w64-x86_64-vulkan-headers 1.2.194-1 +mingw-w64-x86_64-vulkan-loader 1.2.194-1 +mingw-w64-x86_64-windows-default-manifest 6.4-3 +mingw-w64-x86_64-winpthreads-git 9.0.0.6373.5be8fcd83-1 +mingw-w64-x86_64-winstorecompat-git 9.0.0.6373.5be8fcd83-1 +mingw-w64-x86_64-xxhash 0.8.1-1 +mingw-w64-x86_64-xz 5.2.5-2 +mingw-w64-x86_64-zlib 1.2.11-9 +mingw-w64-x86_64-zstd 1.5.2-1 +mintty 1~3.5.2-1 +mpfr 4.1.0-1 +msys2-keyring 1~20211228-1 +msys2-launcher 1.4-1 +msys2-runtime 3.3.3-7 +nano 5.9-1 +ncurses 6.2-2 +nettle 3.7.3-1 +openssl 1.1.1.m-1 +p11-kit 0.24.0-1 +pacman 6.0.1-9 +pacman-contrib 1.4.0-2 +pacman-mirrors 20211230-1 +perl 5.32.1-2 +pinentry 1.2.0-1 +rebase 4.5.0-1 +sed 4.8-2 +tcl 8.6.10-1 +tftp-hpa 5.2-4 +time 1.9-2 +tzcode 2021e-1 +util-linux 2.35.2-1 +wget 1.21.2-1 +which 2.21-3 +xz 5.2.5-1 +zlib 1.2.11-1 +zstd 1.5.1-1 diff --git a/windows/msys2_windows.sh b/windows/msys2_windows.sh new file mode 100644 index 0000000..3f68649 --- /dev/null +++ b/windows/msys2_windows.sh @@ -0,0 +1,4 @@ +#!/bin/sh +export PATH=$PATH:/mingw64/bin/ +FILES="../src/cpp/gameobject.cpp ../src/cpp/light.cpp ../src/cpp/material.cpp ../src/cpp/object.cpp ../src/cpp/scene.cpp ../src/cpp/shader.cpp ../src/cpp/texture.cpp ../src/cpp/utils.cpp ../src/cpp/engine.cpp ../src/cpp/input.cpp ../src/cpp/game.cpp" +g++ -static-libgcc -static-libstdc++ -I../src/headers/ $FILES -lglfw3 -lopengl32 -lglew32 -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic -mwindows -o kek.exe