diff --git a/src/register_types.cpp b/src/register_types.cpp index 6757a72..93c8309 100644 --- a/src/register_types.cpp +++ b/src/register_types.cpp @@ -12,6 +12,8 @@ void initialize_steam_audio(ModuleInitializationLevel p_level) { if (p_level == MODULE_INITIALIZATION_LEVEL_SERVERS) { GDREGISTER_CLASS(SteamAudioServer); srv = memnew(SteamAudioServer); + Engine::get_singleton()->register_singleton("SteamAudioServer", srv); + srv->initialize(); } if (p_level == MODULE_INITIALIZATION_LEVEL_SCENE) { @@ -28,6 +30,7 @@ void initialize_steam_audio(ModuleInitializationLevel p_level) { void uninitialize_steam_audio(ModuleInitializationLevel p_level) { if (p_level == MODULE_INITIALIZATION_LEVEL_SERVERS) { memdelete(srv); + srv = nullptr; } } diff --git a/src/steam_audio_listener.cpp b/src/steam_audio_listener.cpp index d3253fa..61b365a 100644 --- a/src/steam_audio_listener.cpp +++ b/src/steam_audio_listener.cpp @@ -38,15 +38,15 @@ void SteamAudioListener::_notification(int p_what) { } void SteamAudioListener::update_listener(IPLSimulator iplSim, IPLSimulationSharedInputs iplSimInputs) { - needs_update=false; + needs_update = false; Transform3D transform = get_global_transform(); IPLCoordinateSpace3 space = SteamAudio::godot_to_ipl_space(transform); - iplSimInputs.listener=space; + iplSimInputs.listener = space; - iplSimulatorSetSharedInputs(iplSim,IPL_SIMULATIONFLAGS_DIRECT,&iplSimInputs); - iplSimulatorSetSharedInputs(iplSim,IPL_SIMULATIONFLAGS_PATHING,&iplSimInputs); - iplSimulatorSetSharedInputs(iplSim,IPL_SIMULATIONFLAGS_REFLECTIONS,&iplSimInputs); -} \ No newline at end of file + iplSimulatorSetSharedInputs(iplSim, IPL_SIMULATIONFLAGS_DIRECT, &iplSimInputs); + iplSimulatorSetSharedInputs(iplSim, IPL_SIMULATIONFLAGS_PATHING, &iplSimInputs); + iplSimulatorSetSharedInputs(iplSim, IPL_SIMULATIONFLAGS_REFLECTIONS, &iplSimInputs); +} diff --git a/src/steam_audio_server.cpp b/src/steam_audio_server.cpp index 2d99206..ccb4b64 100644 --- a/src/steam_audio_server.cpp +++ b/src/steam_audio_server.cpp @@ -3,11 +3,10 @@ using namespace godot; SteamAudioServer::SteamAudioServer() { - } - SteamAudioServer::~SteamAudioServer() { - shutdown(); +SteamAudioServer::~SteamAudioServer() { + shutdown(); } // Core Godot Methods @@ -17,10 +16,13 @@ void SteamAudioServer::_bind_methods() { void SteamAudioServer::initialize() { if (Engine::get_singleton()->is_editor_hint()) return; + IPLerror err = iplContextCreate(&ctxSettings,&ctx); + if (err!=IPL_STATUS_SUCCESS) { ERR_PRINT("Failed to create IPL context"); } + switch (static_cast(proj_settings->get_setting("steam_audio/ray_tracer/RayTracer"))){ case 0: break; @@ -60,6 +62,8 @@ void SteamAudioServer::_notification(int p_what) { directThread->start(callable_mp(this,&SteamAudioServer::start_direct_thread),Thread::PRIORITY_NORMAL); indirectThread->start(callable_mp(this,&SteamAudioServer::start_indirect_thread),Thread::PRIORITY_NORMAL); + default: + return; } } void SteamAudioServer::start_direct_thread() { diff --git a/src/steam_audio_server.hpp b/src/steam_audio_server.hpp index 05b0ca4..7b382aa 100644 --- a/src/steam_audio_server.hpp +++ b/src/steam_audio_server.hpp @@ -1,21 +1,22 @@ #pragma once #include +#include #include +#include #include #include #include -#include -#include #include #include +#include + #include "steam_audio_dynamic_mesh.hpp" #include "steam_audio_source.hpp" #include "steam_audio_static_mesh.hpp" using namespace godot; - class SteamAudioServer : public Object { GDCLASS(SteamAudioServer, Object) // Godot class declaration macro private: @@ -27,7 +28,7 @@ private: bool needs_processing = false; }; - std::unordered_map audio_sources; + std::unordered_map audio_sources; Ref audio_mutex; IPLContext ctx=nullptr; IPLContextSettings ctxSettings; @@ -47,8 +48,8 @@ private: Ref indirectThread; public: - SteamAudioServer(); // Constructor - ~SteamAudioServer() override; // Destructor + SteamAudioServer(); + ~SteamAudioServer() override; void _notification(int p_what); void register_audio_source(SteamAudioSource *source); void unregister_audio_source(SteamAudioSource *source); @@ -57,8 +58,11 @@ public: protected: static void _bind_methods(); + +public: void initialize(); void shutdown(); void start_direct_thread(); void start_indirect_thread(); + };