updated .gitattributes, configured CMake to properly handle SteamAudio DLL

This commit is contained in:
Nyx
2025-05-08 01:13:48 -06:00
parent 319795c4c9
commit 79bdb2254c
27 changed files with 660 additions and 254 deletions

View File

@@ -4,7 +4,8 @@ target_sources( ${PROJECT_NAME}
PRIVATE
register_types.cpp
register_types.h
steam_audio.cpp
steam_audio.h
)
target_include_directories( ${PROJECT_NAME}

View File

@@ -4,27 +4,28 @@
using namespace godot;
void register_steam_audio_types() {
ClassDB::register_class<SteamAudio>();
void initialize_steam_audio(ModuleInitializationLevel p_level) {
if (p_level!=MODULE_INITIALIZATION_LEVEL_SERVERS) {
return;
}
GDREGISTER_CLASS(SteamAudio);
}
void uninitialize_steam_audio(ModuleInitializationLevel p_level) {
if (p_level!=MODULE_INITIALIZATION_LEVEL_SERVERS) {
return;
}
}
extern "C" GDE_EXPORT GDExtensionBool godot_steam_audio_init(
GDExtensionInterfaceGetProcAddress p_get_proc_address,
GDExtensionClassLibraryPtr p_library,
GDExtensionInitialization *p_initialization
) {
// Create the InitObject that drives registration.
GDExtensionBinding::InitObject init_obj{ p_get_proc_address, p_library, p_initialization };
extern "C" {
// Initialization.
GDExtensionBool GDE_EXPORT steam_audio_library_init(GDExtensionInterfaceGetProcAddress p_get_proc_address, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization);
// 1) Hook up your initializer
init_obj.register_initializer( register_steam_audio_types );
init_obj.register_initializer(initialize_steam_audio);
init_obj.register_terminator(uninitialize_steam_audio);
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
// 2) Hook up your terminator (must match the expected callback signature)
init_obj.register_terminator( [](ModuleInitializationLevel level) {} );
// 3) Choose the minimum init level (common choices: SCENE, EDITOR, etc.)
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
// 4) Actually perform the registrations
return init_obj.init();
}
return init_obj.init();
}
}

View File

@@ -3,18 +3,9 @@
//
#pragma once
#include <godot_cpp/godot.hpp>
#include <godot_cpp/core/binder_common.hpp>
#include <godot_cpp/core/class_db.hpp> // for ClassDB
using namespace godot;
// Called by the InitObject below to register your SteamAudio class.
void register_steam_audio_types();
// This is the exact symbol Godot will look up in your DLL.
extern "C" GDE_EXPORT GDExtensionBool godot_steam_audio_init(
GDExtensionInterfaceGetProcAddress p_get_proc_address,
GDExtensionClassLibraryPtr p_library,
GDExtensionInitialization *p_initialization
);
void initialize_steam_audio(ModuleInitializationLevel p_level);
void uninitialize_steam_audio(ModuleInitializationLevel p_level);

View File

@@ -10,14 +10,16 @@ using namespace godot;
{
if (context)
{
steam_audio_release_context(context);
iplContextRelease(&context);
context=nullptr;
}
}
void SteamAudio::_bind_methods()
{
void SteamAudio::_bind_methods() {
ClassDB::bind_method(D_METHOD("initialize"), &SteamAudio::initialize);
}
SteamAudio::SteamAudio() = default;
bool SteamAudio::initialize()
{
IPLContextSettings settings{};

View File

@@ -7,20 +7,21 @@
#include <godot_cpp/godot.hpp>
#include<godot_cpp/core/class_db.hpp>
#include <godot_cpp/classes/ref.hpp>
#include<godot_cpp/variant/utility_functions.hpp>
#include<phonon.h>
#include <godot_cpp/variant/utility_functions.hpp>
#include <phonon.h>
using namespace godot;
class SteamAudio : RefCounted
class SteamAudio : public RefCounted
{
GDCLASS( SteamAudio,RefCounted );
GDCLASS( SteamAudio,RefCounted ) // NOLINT(readability-use-auto)
private:
IPLContext context = nullptr;
protected:
static void _bind_methods();
public:
SteamAudio();
~SteamAudio();
~SteamAudio() override;
bool initialize();
};