diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..5a12fd7ecd --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vendor/projectm-eval"] + path = vendor/projectm-eval + url = https://github.com/projectM-visualizer/projectm-eval.git diff --git a/BUILDING.md b/BUILDING.md index c6b58e2644..369d77036a 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -32,13 +32,16 @@ If you want to use a stable version of projectM, download the latest release fro the [Releases page on GitHub](https://github.com/projectM-visualizer/projectm/releases) and unpack it. You can then skip to the next step. -If you prefer a bleeding-edge version or want to modify the code, clone the Git repository: +If you prefer a bleeding-edge version or want to modify the code, clone the Git repository and initialize any +submodules: ```bash sudo apt install git # Probably already installed git clone https://github.com/projectM-visualizer/projectm.git /path/to/local/repo cd /path/to/local/repo git fetch --all --tags +git submodule init +git submodule update ``` ### Build and install projectM diff --git a/CMakeLists.txt b/CMakeLists.txt index e0d63bdddb..3eb81b4a1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,8 +65,6 @@ option(ENABLE_SYSTEM_GLM "Enable use of system-install GLM library" OFF) cmake_dependent_option(ENABLE_LLVM "Enable experimental LLVM JIT support" OFF "NOT ENABLE_EMSCRIPTEN" OFF) option(ENABLE_CXX_INTERFACE "Enable exporting C++ symbols for ProjectM and PCM classes, not only the C API. Warning: This is not very portable." OFF) -find_package(projectM-Eval REQUIRED) - if(ENABLE_SYSTEM_GLM) find_package(GLM REQUIRED) else() diff --git a/src/libprojectM/CMakeLists.txt b/src/libprojectM/CMakeLists.txt index 0b6a96fac5..0f33ae8b0f 100644 --- a/src/libprojectM/CMakeLists.txt +++ b/src/libprojectM/CMakeLists.txt @@ -93,6 +93,7 @@ add_library(projectM $ $ $ + $ ) target_include_directories(projectM @@ -101,8 +102,6 @@ target_include_directories(projectM ) target_link_libraries(projectM - PRIVATE - projectM::Eval PUBLIC ${PROJECTM_OPENGL_LIBRARIES} libprojectM::API diff --git a/src/libprojectM/MilkdropPreset/CustomShape.cpp b/src/libprojectM/MilkdropPreset/CustomShape.cpp index 142c4efe12..b366532e8a 100644 --- a/src/libprojectM/MilkdropPreset/CustomShape.cpp +++ b/src/libprojectM/MilkdropPreset/CustomShape.cpp @@ -175,7 +175,7 @@ void CustomShape::Draw() if (static_cast(*m_perFrameContext.textured) != 0) { m_presetState.texturedShader.Bind(); - m_presetState.texturedShader.SetUniformMat4x4("vertex_transformation", PresetState::orthogonalProjectionFlipped); + m_presetState.texturedShader.SetUniformMat4x4("vertex_transformation", PresetState::orthogonalProjection); m_presetState.texturedShader.SetUniformInt("texture_sampler", 0); // Textured shape, either main texture or texture from "image" key @@ -234,7 +234,7 @@ void CustomShape::Draw() glBufferData(GL_ARRAY_BUFFER, sizeof(TexturedPoint) * (sides + 2), vertexData.data(), GL_DYNAMIC_DRAW); m_presetState.untexturedShader.Bind(); - m_presetState.untexturedShader.SetUniformMat4x4("vertex_transformation", PresetState::orthogonalProjectionFlipped); + m_presetState.untexturedShader.SetUniformMat4x4("vertex_transformation", PresetState::orthogonalProjection); glBindVertexArray(m_vaoIdUntextured); glDrawArrays(GL_TRIANGLE_FAN, 0, sides + 2); @@ -252,7 +252,7 @@ void CustomShape::Draw() } m_presetState.untexturedShader.Bind(); - m_presetState.untexturedShader.SetUniformMat4x4("vertex_transformation", PresetState::orthogonalProjectionFlipped); + m_presetState.untexturedShader.SetUniformMat4x4("vertex_transformation", PresetState::orthogonalProjection); glVertexAttrib4f(1, static_cast(*m_perFrameContext.border_r), diff --git a/src/libprojectM/MilkdropPreset/IdlePreset.cpp b/src/libprojectM/MilkdropPreset/IdlePreset.cpp index c0491de6c6..ffb4855ba2 100644 --- a/src/libprojectM/MilkdropPreset/IdlePreset.cpp +++ b/src/libprojectM/MilkdropPreset/IdlePreset.cpp @@ -182,7 +182,7 @@ per_frame_29=q3 = if(above(frame,60),1, frame/60.0); per_frame_30=oldq8 = if(above(oldq8,1000),0,oldq8); per_frame_31=cx = cx + 0.3 * (0.6 * sin(0.245 * time) + 0.4 * sin(0.123 * time)); per_frame_31=cy = cy + 0.3 * (0.6 * sin(0.263 * time) + 0.4 * sin(0.117 * time)); -per_frame_32=q9 = 0.12; // Headphones Y offset +per_frame_32=q9 = -0.12; // Headphones Y offset per_frame_33=q10 = 0.5 * sin(time * 0.5623); // Logo tilt per_pixel_1=zoom = log(sqrt(sin(time * .5) * 0.5 + 2.5) - .5 * rad) + 0.4; )"; diff --git a/src/libprojectM/ProjectMCWrapper.cpp b/src/libprojectM/ProjectMCWrapper.cpp index d882bfdf1a..7e5da6c299 100644 --- a/src/libprojectM/ProjectMCWrapper.cpp +++ b/src/libprojectM/ProjectMCWrapper.cpp @@ -148,7 +148,7 @@ char* projectm_get_version_string() { auto versionLength = strlen(PROJECTM_VERSION_STRING); auto buffer = projectm_alloc_string(versionLength + 1); - strncpy(buffer, PROJECTM_VERSION_STRING, versionLength); + strncpy(buffer, PROJECTM_VERSION_STRING, versionLength + 1); return buffer; } @@ -156,7 +156,7 @@ char* projectm_get_vcs_version_string() { auto versionLength = strlen(PROJECTM_VERSION_VCS); auto buffer = projectm_alloc_string(versionLength + 1); - strncpy(buffer, PROJECTM_VERSION_VCS, versionLength); + strncpy(buffer, PROJECTM_VERSION_VCS, versionLength + 1); return buffer; } diff --git a/src/libprojectM/Renderer/TextureManager.cpp b/src/libprojectM/Renderer/TextureManager.cpp index c596ad16e7..eb3ea52bde 100644 --- a/src/libprojectM/Renderer/TextureManager.cpp +++ b/src/libprojectM/Renderer/TextureManager.cpp @@ -66,7 +66,7 @@ void TextureManager::Preload() M_bytes, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, - SOIL_FLAG_INVERT_Y | SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MULTIPLY_ALPHA, &width, &height); + SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MULTIPLY_ALPHA, &width, &height); auto newTex = std::make_shared("idlem", tex, GL_TEXTURE_2D, width, height, false); @@ -77,7 +77,7 @@ void TextureManager::Preload() headphones_bytes, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, - SOIL_FLAG_INVERT_Y | SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MULTIPLY_ALPHA, &width, &height); + SOIL_FLAG_POWER_OF_TWO | SOIL_FLAG_MULTIPLY_ALPHA, &width, &height); newTex = std::make_shared("idleheadphones", tex, GL_TEXTURE_2D, width, height, false); m_textures["idleheadphones"] = newTex; @@ -192,11 +192,14 @@ void TextureManager::PurgeTextures() { return; } - // Purge one texture. No need to inform presets, as the texture shouldn't be in use anymore. // If this really happens for some reason, it'll simply be reloaded on the next frame. m_textures.erase(m_textures.find(biggestName)); m_textureStats.erase(m_textureStats.find(biggestName)); + +#ifdef DEBUG + std::cerr << "Purged texture " << biggestName << std::endl; +#endif } TextureSamplerDescriptor TextureManager::TryLoadingTexture(const std::string& name) @@ -233,14 +236,14 @@ TextureSamplerDescriptor TextureManager::TryLoadingTexture(const std::string& na if (!texDesc.Empty()) { #ifdef DEBUG - std::cerr << "Located texture " << unqualifiedName << std::endl; + std::cerr << "Loaded texture " << unqualifiedName << std::endl; #endif return texDesc; } } #ifdef DEBUG - std::cerr << "Failed to locate texture " << unqualifiedName << std::endl; + std::cerr << "Failed to find texture " << unqualifiedName << std::endl; #endif // Return a placeholder. diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index 33e71c2451..ad635ced4e 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -1,3 +1,4 @@ add_subdirectory(hlslparser) add_subdirectory(omptl) +add_subdirectory(projectm-eval) add_subdirectory(SOIL2) diff --git a/vendor/projectm-eval b/vendor/projectm-eval new file mode 160000 index 0000000000..4fe4690e07 --- /dev/null +++ b/vendor/projectm-eval @@ -0,0 +1 @@ +Subproject commit 4fe4690e07284418d93a139708e8a89bf28720f1