uuuuuuuuuuuuuggggggggggggggggghhhhhhhhhhhhhhhhhh
This commit is contained in:
1
.gitmodules
vendored
1
.gitmodules
vendored
@@ -17,7 +17,6 @@
|
||||
[submodule "external/SDL_mixer"]
|
||||
path = external/SDL_mixer
|
||||
url = https://github.com/libsdl-org/SDL_mixer
|
||||
|
||||
[submodule "external/libxm"]
|
||||
path = external/libxm
|
||||
url = https://github.com/Artefact2/libxm
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.27)
|
||||
project(anm2ed CXX)
|
||||
project(anm2ed LANGUAGES C CXX)
|
||||
|
||||
if (WIN32 AND DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
|
||||
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
|
||||
@@ -22,7 +22,18 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
||||
|
||||
set(SDL_STATIC ON CACHE BOOL "" FORCE)
|
||||
set(SDL_SHARED OFF CACHE BOOL "" FORCE)
|
||||
if (NOT WIN32)
|
||||
set(SDL_ALSA ON CACHE BOOL "" FORCE)
|
||||
set(SDL_ALSA_SHARED ON CACHE BOOL "" FORCE)
|
||||
set(SDL_JACK ON CACHE BOOL "" FORCE)
|
||||
set(SDL_JACK_SHARED ON CACHE BOOL "" FORCE)
|
||||
set(SDL_PIPEWIRE ON CACHE BOOL "" FORCE)
|
||||
set(SDL_PIPEWIRE_SHARED ON CACHE BOOL "" FORCE)
|
||||
set(SDL_SNDIO ON CACHE BOOL "" FORCE)
|
||||
set(SDL_SNDIO_SHARED ON CACHE BOOL "" FORCE)
|
||||
endif ()
|
||||
set(SDL_HAPTIC OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_JOYSTICK OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_SENSOR OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_HIDAPI OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_CAMERA OFF CACHE BOOL "" FORCE)
|
||||
@@ -49,6 +60,7 @@ if (WIN32)
|
||||
set(MATH_LIBRARY "" CACHE FILEPATH "Windows doesn't require libm for libxm" FORCE)
|
||||
endif ()
|
||||
add_subdirectory(external/libxm/src EXCLUDE_FROM_ALL)
|
||||
set(LIBXM_COMPAT_HEADER "${CMAKE_SOURCE_DIR}/include/libxm_compat.h")
|
||||
|
||||
set(GLAD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/include/glad/glad.cpp)
|
||||
|
||||
@@ -86,6 +98,13 @@ add_executable(${PROJECT_NAME}
|
||||
${TINYXML2_SRC}
|
||||
${PROJECT_SRC}
|
||||
)
|
||||
if (MSVC)
|
||||
cmake_path(CONVERT "${LIBXM_COMPAT_HEADER}" TO_NATIVE_PATH LIBXM_COMPAT_HEADER_NATIVE)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE "/FI${LIBXM_COMPAT_HEADER_NATIVE}")
|
||||
if (TARGET xm)
|
||||
target_compile_options(xm PRIVATE "/FI${LIBXM_COMPAT_HEADER_NATIVE}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (WIN32)
|
||||
enable_language(RC)
|
||||
|
||||
Submodule include/libxm deleted from 9f599c4dd4
@@ -5,8 +5,6 @@
|
||||
#define __attribute__(x)
|
||||
#endif
|
||||
#ifndef restrict
|
||||
#define restrict
|
||||
#define restrict __restrict
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <xm.h>
|
||||
@@ -41,7 +41,7 @@ namespace anm2ed::imgui
|
||||
if (ImGui::BeginMenu("File"))
|
||||
{
|
||||
if (ImGui::MenuItem("New", settings.shortcutNew.c_str())) dialog.file_save(dialog::ANM2_NEW);
|
||||
if (ImGui::MenuItem("Open", settings.shortcutOpen.c_str())) dialog.file_open(dialog::ANM2_NEW);
|
||||
if (ImGui::MenuItem("Open", settings.shortcutOpen.c_str())) dialog.file_open(dialog::ANM2_OPEN);
|
||||
|
||||
if (ImGui::BeginMenu("Open Recent", !manager.recentFiles.empty()))
|
||||
{
|
||||
@@ -699,7 +699,7 @@ namespace anm2ed::imgui
|
||||
|
||||
auto credits_reset = [&]()
|
||||
{
|
||||
resources.music.play(true);
|
||||
resources.music_track().play(true);
|
||||
creditsState = {};
|
||||
creditsState.spawnTimer = CREDIT_DELAY;
|
||||
};
|
||||
@@ -802,7 +802,8 @@ namespace anm2ed::imgui
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
if (resources.music.is_playing() && !aboutPopup.isOpen) resources.music.stop();
|
||||
if (auto* music = resources.music_track_if_loaded())
|
||||
if (music->is_playing() && !aboutPopup.isOpen) music->stop();
|
||||
|
||||
aboutPopup.end();
|
||||
|
||||
|
||||
@@ -7,13 +7,14 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include "xm_wrapper.h"
|
||||
#include "libxm_compat.h"
|
||||
#include <xm.h>
|
||||
|
||||
namespace anm2ed::resource
|
||||
{
|
||||
namespace
|
||||
{
|
||||
constexpr int XM_SAMPLE_RATE = 44100;
|
||||
constexpr int XM_SAMPLE_RATE_ = 44100;
|
||||
constexpr uint16_t XM_CHUNK_FRAMES = 1024;
|
||||
constexpr int XM_MAX_SECONDS = 600;
|
||||
constexpr int XM_CHANNELS = 2;
|
||||
@@ -51,14 +52,14 @@ namespace anm2ed::resource
|
||||
auto context = xm_create_context(pool.get(), prescan, (const char*)data, (uint32_t)size);
|
||||
if (!context) return;
|
||||
|
||||
xm_set_sample_rate(context, (uint16_t)XM_SAMPLE_RATE);
|
||||
xm_set_sample_rate(context, (uint16_t)XM_SAMPLE_RATE_);
|
||||
xm_set_max_loop_count(context, 1);
|
||||
|
||||
auto pcm = std::vector<float>{};
|
||||
pcm.reserve(static_cast<size_t>(XM_CHUNK_FRAMES) * XM_CHANNELS * 8);
|
||||
|
||||
size_t framesGenerated = 0;
|
||||
const auto maxFrames = static_cast<size_t>(XM_SAMPLE_RATE) * XM_MAX_SECONDS;
|
||||
const auto maxFrames = static_cast<size_t>(XM_SAMPLE_RATE_) * XM_MAX_SECONDS;
|
||||
auto heardAudio = false;
|
||||
|
||||
while (framesGenerated < maxFrames)
|
||||
@@ -88,7 +89,7 @@ namespace anm2ed::resource
|
||||
if (pcm.empty()) return;
|
||||
|
||||
auto spec = SDL_AudioSpec{};
|
||||
spec.freq = XM_SAMPLE_RATE;
|
||||
spec.freq = XM_SAMPLE_RATE_;
|
||||
spec.format = SDL_AUDIO_F32;
|
||||
spec.channels = XM_CHANNELS;
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
#include "xm_wrapper.h"
|
||||
#include "libxm_compat.h"
|
||||
#include <xm.h>
|
||||
|
||||
namespace anm2ed::resource::xm
|
||||
{
|
||||
|
||||
@@ -18,7 +18,20 @@ namespace anm2ed
|
||||
|
||||
for (auto [i, shader] : std::views::enumerate(shader::SHADERS))
|
||||
shaders[i] = Shader(shader.vertex, shader.fragment);
|
||||
|
||||
music = Audio(xm::ABOUT, std::size(xm::ABOUT));
|
||||
};
|
||||
}
|
||||
|
||||
resource::Audio& Resources::music_track()
|
||||
{
|
||||
if (!isMusicLoaded)
|
||||
{
|
||||
music = Audio(xm::ABOUT, std::size(xm::ABOUT));
|
||||
isMusicLoaded = true;
|
||||
}
|
||||
return music;
|
||||
}
|
||||
|
||||
resource::Audio* Resources::music_track_if_loaded()
|
||||
{
|
||||
return isMusicLoaded ? &music : nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,5 +19,10 @@ namespace anm2ed
|
||||
resource::Audio music{};
|
||||
|
||||
Resources();
|
||||
resource::Audio& music_track();
|
||||
resource::Audio* music_track_if_loaded();
|
||||
|
||||
private:
|
||||
bool isMusicLoaded{false};
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user