Merge branch 'master' into vulkan
This commit is contained in:
commit
1c3654148d
|
|
@ -9,6 +9,7 @@ insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
[*.{hpp,inl,cpp,lua}]
|
[*.{hpp,inl,cpp,lua}]
|
||||||
|
indent_size = 4
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
|
|
||||||
[*.html]
|
[*.html]
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Auto detect text files and perform LF normalization
|
# Auto detect text files and perform LF normalization
|
||||||
* text=auto
|
* text=auto
|
||||||
extlibs/* linguist-vendored
|
thirdparty/* linguist-vendored
|
||||||
NazaraModuleTemplate/* linguist-vendored
|
NazaraModuleTemplate/* linguist-vendored
|
||||||
|
|
|
||||||
56
.travis.yml
56
.travis.yml
|
|
@ -1,54 +1,26 @@
|
||||||
language:
|
language:
|
||||||
cpp
|
cpp
|
||||||
|
|
||||||
dist:
|
|
||||||
trusty
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources:
|
|
||||||
- llvm-toolchain-precise-3.7
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
packages:
|
|
||||||
- clang-3.7
|
|
||||||
- libassimp-dev
|
|
||||||
- libfreetype6-dev
|
|
||||||
- libgl1-mesa-dev
|
|
||||||
- libopenal-dev
|
|
||||||
- libsndfile1-dev
|
|
||||||
- libx11-dev
|
|
||||||
- libxcb-cursor-dev
|
|
||||||
- libxcb-ewmh-dev
|
|
||||||
- libxcb-icccm4-dev
|
|
||||||
- libxcb-keysyms1-dev
|
|
||||||
- libxcb-randr0-dev
|
|
||||||
- mesa-common-dev
|
|
||||||
|
|
||||||
sudo:
|
sudo:
|
||||||
required
|
required
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email: true
|
email: true
|
||||||
|
|
||||||
compiler:
|
services:
|
||||||
- clang
|
- docker
|
||||||
|
|
||||||
env:
|
before_install:
|
||||||
global:
|
- docker build -t nazara .
|
||||||
- COMPILER=clang++-3.7
|
|
||||||
- CFLAGS="-Wall -Wextra"
|
|
||||||
- CXXFLAGS="-Wall -Wextra"
|
|
||||||
matrix:
|
|
||||||
- CONFIG=debug
|
|
||||||
- CONFIG=release
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- cd build &&
|
- docker run --name Nazara -v `pwd`:/NazaraEngine nazara
|
||||||
./premake5-linux64 --cc=clang gmake
|
sh -c "
|
||||||
- cd gmake &&
|
cd build &&
|
||||||
make -j4 -f NazaraEngine.make config=${CONFIG}dynamic_x64
|
./premake5-linux64 --cc=clang gmake &&
|
||||||
|
cd gmake &&
|
||||||
after_script:
|
make -j4 &&
|
||||||
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../lib/gmake/x64/:../extlibs/lib/gmake/x64/ &&
|
cd ../../tests &&
|
||||||
cd ../../tests &&
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../lib/gmake/x64/:../extlibs/lib/gmake/x64/ &&
|
||||||
./NazaraUnitTestsServer
|
./NazaraUnitTestsServer
|
||||||
|
"
|
||||||
|
|
|
||||||
40
ChangeLog.md
40
ChangeLog.md
|
|
@ -1,5 +1,15 @@
|
||||||
# Upcoming version:
|
# Upcoming version:
|
||||||
|
|
||||||
|
Miscellaneous:
|
||||||
|
- Add possibility to excludes with one commande all tests/examples/tools/etc.
|
||||||
|
- Units tests are now part of the "test" exclusion category
|
||||||
|
- Fix project exclusion not working (but correctly excluding projects relying upon it)
|
||||||
|
- Upgraded Catch to v2.0.1
|
||||||
|
- ⚠️ Merged NazaraExtlibs workspace to main workspace (allowing `make` command to work without -f parameter) and removed extern libraries precompiled
|
||||||
|
- Updated stb_image to version 2.16 and stb_image_write to version 1.07 (allowing support for JPEG writing)
|
||||||
|
- ⚠️ Renamed extlibs folder to thirdparty
|
||||||
|
- Partial fix for Premake regenerating projects for no reason
|
||||||
|
|
||||||
Nazara Engine:
|
Nazara Engine:
|
||||||
- VertexMapper:GetComponentPtr no longer throw an error if component is disabled or incompatible with template type, instead a null pointer is returned.
|
- VertexMapper:GetComponentPtr no longer throw an error if component is disabled or incompatible with template type, instead a null pointer is returned.
|
||||||
- Bitset swap operation is now correctly marked as noexcept`
|
- Bitset swap operation is now correctly marked as noexcept`
|
||||||
|
|
@ -24,7 +34,25 @@ Nazara Engine:
|
||||||
- Fix String movement constructor, which was leaving a null shared string (which was not reusable)
|
- Fix String movement constructor, which was leaving a null shared string (which was not reusable)
|
||||||
- Add Flags<E>::Test method, in order to test one or multiple flags at once.
|
- Add Flags<E>::Test method, in order to test one or multiple flags at once.
|
||||||
- ⚠️ Vector2, Vector3 and Vector4 array/pointer constructor is now explicit to prevent some mistakes as `Vector2 vec2; vec2 = 0;`
|
- ⚠️ Vector2, Vector3 and Vector4 array/pointer constructor is now explicit to prevent some mistakes as `Vector2 vec2; vec2 = 0;`
|
||||||
|
- Fix RigidBody2D::SetGeom attribute copy and possible crash with static objects
|
||||||
|
- Fix error when opening a non-existent file on Posix
|
||||||
|
- Fix Directory::Create not working on Posix systems when recursive option was enabled
|
||||||
|
- Fix default directory permission (now created with 777)
|
||||||
|
- Add linear and angular damping accessor to RigidBody3D
|
||||||
|
- Fix MemoryStream::WriteBlock "Invalid buffer" assertion triggering when writing a zero-sized block
|
||||||
|
- ⚠️ Rename RigidBody3D::[Get|Set]Velocity to [Get|Set]LinearVelocity
|
||||||
|
- Fix RigidBody3D copy constructor not copying all physics states (angular/linear damping/velocity, mass center, position and rotation)
|
||||||
|
- Add RigidBody3D simulation control (via EnableSimulation and IsSimulationEnabled), which allows to disable physics and collisions at will.
|
||||||
|
- Fix some uninitialized values (found by Valgrind) in Network module
|
||||||
|
- Fix possible infinite recursion when outputting a Thread::Id object
|
||||||
|
- ⚠️ Replaced implicit conversion from a Nz::String to a std::string by an explicit method ToStdString()
|
||||||
|
- Fix LuaInstance movement constructor/assignment operator which was corrupting Lua memory
|
||||||
|
- Fix potential bug on SocketImpl::Connect (used by TcpClient::Connect) on POSIX platforms
|
||||||
|
- It is now possible to initialize a StackArray with a size of zero on every platforms (this was not possible on non-Windows platforms before)
|
||||||
|
- Calling PlacementDestroy on a null pointer is now a no-op (was triggering an undefined behavior)
|
||||||
|
- Fix OBJParser relative offsets handling
|
||||||
|
- Add JPEG image saver
|
||||||
|
- Update Constraint2Ds classes (Add : Ref, Library, ConstRef, New function and Update : ctors)
|
||||||
|
|
||||||
Nazara Development Kit:
|
Nazara Development Kit:
|
||||||
- Added ImageWidget (#139)
|
- Added ImageWidget (#139)
|
||||||
|
|
@ -46,6 +74,16 @@ Nazara Development Kit:
|
||||||
- Fix TextAreaWidget cursor sometimes showing up in readonly mode
|
- Fix TextAreaWidget cursor sometimes showing up in readonly mode
|
||||||
- ⚠️ BaseWidget::OnKeyPressed now returns a boolean to indicate if it should block default action (such as tab to switch to the previous/next widget)
|
- ⚠️ BaseWidget::OnKeyPressed now returns a boolean to indicate if it should block default action (such as tab to switch to the previous/next widget)
|
||||||
- Pressing tab/shift-tab will now move to the next/previous widget able to be focused on
|
- Pressing tab/shift-tab will now move to the next/previous widget able to be focused on
|
||||||
|
- Fix GraphicsComponent::Clear method now clearing reflective states
|
||||||
|
- Add linear and angular damping accessor to PhysicsComponent3D
|
||||||
|
- Fix GraphicsComponent cloning not copying renderable local matrices
|
||||||
|
- ⚠️ Rename PhysicsComponent3D::[Get|Set]Velocity to [Get|Set]LinearVelocity
|
||||||
|
- Add OnEntityDisabled and OnEntityEnabled callbacks to BaseComponent
|
||||||
|
- Disabling an entity with a CollisionComponent3D or PhysicsComponent3D will properly disable it from the physics simulation
|
||||||
|
- It is now possible to disable synchronization between a PhysicsComponent3D and the NodeComponent
|
||||||
|
- Fix PhysicsComponent3D copy which was not copying physics state (such as mass, mass center, damping values, gravity factor and auto-sleep mode)
|
||||||
|
- Fix TextAreaWidget::Clear crash
|
||||||
|
- Add ConstraintComponent2D class
|
||||||
|
|
||||||
# 0.4:
|
# 0.4:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
FROM debian:stretch
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y build-essential clang libopenal-dev libsndfile1-dev libxcb-cursor-dev libxcb-ewmh-dev libxcb-randr0-dev libxcb-icccm4-dev libxcb-keysyms1-dev libx11-dev libfreetype6-dev mesa-common-dev libgl1-mesa-dev libassimp-dev
|
||||||
|
|
||||||
|
RUN mkdir /NazaraEngine
|
||||||
|
WORKDIR /NazaraEngine
|
||||||
|
|
@ -50,6 +50,8 @@ namespace Ndk
|
||||||
virtual void OnComponentDetached(BaseComponent& component);
|
virtual void OnComponentDetached(BaseComponent& component);
|
||||||
virtual void OnDetached();
|
virtual void OnDetached();
|
||||||
virtual void OnEntityDestruction();
|
virtual void OnEntityDestruction();
|
||||||
|
virtual void OnEntityDisabled();
|
||||||
|
virtual void OnEntityEnabled();
|
||||||
|
|
||||||
void SetEntity(Entity* entity);
|
void SetEntity(Entity* entity);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,5 +17,6 @@
|
||||||
#include <NDK/Components/PhysicsComponent2D.hpp>
|
#include <NDK/Components/PhysicsComponent2D.hpp>
|
||||||
#include <NDK/Components/PhysicsComponent3D.hpp>
|
#include <NDK/Components/PhysicsComponent3D.hpp>
|
||||||
#include <NDK/Components/VelocityComponent.hpp>
|
#include <NDK/Components/VelocityComponent.hpp>
|
||||||
|
#include <NDK/Components/ConstraintComponent2D.hpp>
|
||||||
|
|
||||||
#endif // NDK_COMPONENTS_GLOBAL_HPP
|
#endif // NDK_COMPONENTS_GLOBAL_HPP
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ namespace Ndk
|
||||||
class NDK_API CollisionComponent2D : public Component<CollisionComponent2D>
|
class NDK_API CollisionComponent2D : public Component<CollisionComponent2D>
|
||||||
{
|
{
|
||||||
friend class PhysicsSystem2D;
|
friend class PhysicsSystem2D;
|
||||||
|
friend class ConstraintComponent2D;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CollisionComponent2D(Nz::Collider2DRef geom = Nz::Collider2DRef());
|
CollisionComponent2D(Nz::Collider2DRef geom = Nz::Collider2DRef());
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@ namespace Ndk
|
||||||
void OnComponentAttached(BaseComponent& component) override;
|
void OnComponentAttached(BaseComponent& component) override;
|
||||||
void OnComponentDetached(BaseComponent& component) override;
|
void OnComponentDetached(BaseComponent& component) override;
|
||||||
void OnDetached() override;
|
void OnDetached() override;
|
||||||
|
void OnEntityDisabled() override;
|
||||||
|
void OnEntityEnabled() override;
|
||||||
|
|
||||||
std::unique_ptr<Nz::RigidBody3D> m_staticBody;
|
std::unique_ptr<Nz::RigidBody3D> m_staticBody;
|
||||||
Nz::Collider3DRef m_geom;
|
Nz::Collider3DRef m_geom;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef NDK_COMPONENTS_CONSTRAINTCOMPONENT2D_HPP
|
||||||
|
#define NDK_COMPONENTS_CONSTRAINTCOMPONENT2D_HPP
|
||||||
|
|
||||||
|
#include <NDK/Component.hpp>
|
||||||
|
#include <Nazara/Physics2D/Constraint2D.hpp>
|
||||||
|
#include <Nazara/Math/Vector3.hpp>
|
||||||
|
#include <vector>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace Ndk
|
||||||
|
{
|
||||||
|
class NDK_API ConstraintComponent2D : public Component<ConstraintComponent2D>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ConstraintComponent2D() = default;
|
||||||
|
ConstraintComponent2D(const ConstraintComponent2D& joint) = default;
|
||||||
|
ConstraintComponent2D(ConstraintComponent2D&& joint) = default;
|
||||||
|
|
||||||
|
template<typename T, typename... Args> inline Nz::ObjectRef<T> CreateConstraint(const Ndk::EntityHandle& first, const Ndk::EntityHandle& second, Args&&... args);
|
||||||
|
|
||||||
|
static ComponentIndex componentIndex;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
std::vector<Nz::Constraint2DRef> m_constraints;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <NDK/Components/ConstraintComponent2D.inl>
|
||||||
|
|
||||||
|
#endif// NDK_COMPONENTS_CONSTRAINTCOMPONENT2D_HPP
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
#include <NDK/Components/ConstraintComponent2D.hpp>
|
||||||
|
#include <NDK/Components/PhysicsComponent2D.hpp>
|
||||||
|
#include <NDK/Components/CollisionComponent2D.hpp>
|
||||||
|
|
||||||
|
namespace Ndk
|
||||||
|
{
|
||||||
|
template<typename T, typename ...Args>
|
||||||
|
Nz::ObjectRef<T> ConstraintComponent2D::CreateConstraint(const Ndk::EntityHandle& first, const Ndk::EntityHandle& second, Args && ...args)
|
||||||
|
{
|
||||||
|
auto FetchBody = [](const Ndk::EntityHandle& entity) -> Nz::RigidBody2D*
|
||||||
|
{
|
||||||
|
if (entity->HasComponent<Ndk::PhysicsComponent2D>())
|
||||||
|
return entity->GetComponent<Ndk::PhysicsComponent2D>().GetRigidBody();
|
||||||
|
else if (entity->HasComponent<Ndk::CollisionComponent2D>())
|
||||||
|
return entity->GetComponent<Ndk::CollisionComponent2D>().GetStaticBody();
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
Nz::RigidBody2D* firstBody = FetchBody(first);
|
||||||
|
NazaraAssert(firstBody, "First entity has no CollisionComponent2D nor PhysicsComponent2D component");
|
||||||
|
|
||||||
|
Nz::RigidBody2D* secondBody = FetchBody(second);
|
||||||
|
NazaraAssert(secondBody, "Second entity has no CollisionComponent2D nor PhysicsComponent2D component");
|
||||||
|
|
||||||
|
Nz::ObjectRef<T> constraint = T::New(*firstBody, *secondBody, std::forward<Args>(args)...);
|
||||||
|
m_constraints.push_back(constraint);
|
||||||
|
|
||||||
|
return constraint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -25,7 +25,7 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
m_renderables.reserve(graphicsComponent.m_renderables.size());
|
m_renderables.reserve(graphicsComponent.m_renderables.size());
|
||||||
for (const Renderable& r : graphicsComponent.m_renderables)
|
for (const Renderable& r : graphicsComponent.m_renderables)
|
||||||
Attach(r.renderable, r.data.renderOrder);
|
Attach(r.renderable, r.data.localMatrix, r.data.renderOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void GraphicsComponent::AddToCullingList(GraphicsComponentCullingList* cullingList) const
|
inline void GraphicsComponent::AddToCullingList(GraphicsComponentCullingList* cullingList) const
|
||||||
|
|
@ -55,8 +55,15 @@ namespace Ndk
|
||||||
|
|
||||||
inline void GraphicsComponent::Clear()
|
inline void GraphicsComponent::Clear()
|
||||||
{
|
{
|
||||||
|
m_materialEntries.clear();
|
||||||
m_renderables.clear();
|
m_renderables.clear();
|
||||||
|
|
||||||
|
if (m_reflectiveMaterialCount > 0)
|
||||||
|
{
|
||||||
|
m_reflectiveMaterialCount = 0;
|
||||||
|
InvalidateReflectionMap();
|
||||||
|
}
|
||||||
|
|
||||||
InvalidateBoundingVolume();
|
InvalidateBoundingVolume();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
friend class CollisionComponent2D;
|
friend class CollisionComponent2D;
|
||||||
friend class PhysicsSystem2D;
|
friend class PhysicsSystem2D;
|
||||||
|
friend class ConstraintComponent2D;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PhysicsComponent2D() = default;
|
PhysicsComponent2D() = default;
|
||||||
|
|
@ -49,7 +50,7 @@ namespace Ndk
|
||||||
static ComponentIndex componentIndex;
|
static ComponentIndex componentIndex;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Nz::RigidBody2D& GetRigidBody();
|
Nz::RigidBody2D* GetRigidBody();
|
||||||
|
|
||||||
void OnAttached() override;
|
void OnAttached() override;
|
||||||
void OnComponentAttached(BaseComponent& component) override;
|
void OnComponentAttached(BaseComponent& component) override;
|
||||||
|
|
|
||||||
|
|
@ -307,8 +307,8 @@ namespace Ndk
|
||||||
* \return A reference to the physics object
|
* \return A reference to the physics object
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline Nz::RigidBody2D& PhysicsComponent2D::GetRigidBody()
|
inline Nz::RigidBody2D* PhysicsComponent2D::GetRigidBody()
|
||||||
{
|
{
|
||||||
return *m_object.get();
|
return m_object.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ namespace Ndk
|
||||||
friend class PhysicsSystem3D;
|
friend class PhysicsSystem3D;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PhysicsComponent3D() = default;
|
inline PhysicsComponent3D();
|
||||||
PhysicsComponent3D(const PhysicsComponent3D& physics);
|
PhysicsComponent3D(const PhysicsComponent3D& physics);
|
||||||
~PhysicsComponent3D() = default;
|
~PhysicsComponent3D() = default;
|
||||||
|
|
||||||
|
|
@ -28,41 +28,65 @@ namespace Ndk
|
||||||
void AddTorque(const Nz::Vector3f& torque, Nz::CoordSys coordSys = Nz::CoordSys_Global);
|
void AddTorque(const Nz::Vector3f& torque, Nz::CoordSys coordSys = Nz::CoordSys_Global);
|
||||||
|
|
||||||
void EnableAutoSleep(bool autoSleep);
|
void EnableAutoSleep(bool autoSleep);
|
||||||
|
void EnableNodeSynchronization(bool nodeSynchronization);
|
||||||
|
|
||||||
Nz::Boxf GetAABB() const;
|
Nz::Boxf GetAABB() const;
|
||||||
|
Nz::Vector3f GetAngularDamping() const;
|
||||||
Nz::Vector3f GetAngularVelocity() const;
|
Nz::Vector3f GetAngularVelocity() const;
|
||||||
float GetGravityFactor() const;
|
float GetGravityFactor() const;
|
||||||
|
float GetLinearDamping() const;
|
||||||
|
Nz::Vector3f GetLinearVelocity() const;
|
||||||
float GetMass() const;
|
float GetMass() const;
|
||||||
Nz::Vector3f GetMassCenter(Nz::CoordSys coordSys = Nz::CoordSys_Local) const;
|
Nz::Vector3f GetMassCenter(Nz::CoordSys coordSys = Nz::CoordSys_Local) const;
|
||||||
const Nz::Matrix4f& GetMatrix() const;
|
const Nz::Matrix4f& GetMatrix() const;
|
||||||
Nz::Vector3f GetPosition() const;
|
Nz::Vector3f GetPosition() const;
|
||||||
Nz::Quaternionf GetRotation() const;
|
Nz::Quaternionf GetRotation() const;
|
||||||
Nz::Vector3f GetVelocity() const;
|
|
||||||
|
|
||||||
bool IsAutoSleepEnabled() const;
|
bool IsAutoSleepEnabled() const;
|
||||||
bool IsMoveable() const;
|
bool IsMoveable() const;
|
||||||
|
bool IsNodeSynchronizationEnabled() const;
|
||||||
bool IsSleeping() const;
|
bool IsSleeping() const;
|
||||||
|
|
||||||
|
void SetAngularDamping(const Nz::Vector3f& angularDamping);
|
||||||
void SetAngularVelocity(const Nz::Vector3f& angularVelocity);
|
void SetAngularVelocity(const Nz::Vector3f& angularVelocity);
|
||||||
void SetGravityFactor(float gravityFactor);
|
void SetGravityFactor(float gravityFactor);
|
||||||
|
void SetLinearDamping(float damping);
|
||||||
|
void SetLinearVelocity(const Nz::Vector3f& velocity);
|
||||||
void SetMass(float mass);
|
void SetMass(float mass);
|
||||||
void SetMassCenter(const Nz::Vector3f& center);
|
void SetMassCenter(const Nz::Vector3f& center);
|
||||||
void SetPosition(const Nz::Vector3f& position);
|
void SetPosition(const Nz::Vector3f& position);
|
||||||
void SetRotation(const Nz::Quaternionf& rotation);
|
void SetRotation(const Nz::Quaternionf& rotation);
|
||||||
void SetVelocity(const Nz::Vector3f& velocity);
|
|
||||||
|
|
||||||
static ComponentIndex componentIndex;
|
static ComponentIndex componentIndex;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Nz::RigidBody3D& GetRigidBody();
|
void ApplyPhysicsState(Nz::RigidBody3D& rigidBody) const;
|
||||||
|
void CopyPhysicsState(const Nz::RigidBody3D& rigidBody);
|
||||||
|
Nz::RigidBody3D* GetRigidBody();
|
||||||
|
const Nz::RigidBody3D& GetRigidBody() const;
|
||||||
|
|
||||||
void OnAttached() override;
|
void OnAttached() override;
|
||||||
void OnComponentAttached(BaseComponent& component) override;
|
void OnComponentAttached(BaseComponent& component) override;
|
||||||
void OnComponentDetached(BaseComponent& component) override;
|
void OnComponentDetached(BaseComponent& component) override;
|
||||||
void OnDetached() override;
|
void OnDetached() override;
|
||||||
void OnEntityDestruction() override;
|
void OnEntityDestruction() override;
|
||||||
|
void OnEntityDisabled() override;
|
||||||
|
void OnEntityEnabled() override;
|
||||||
|
|
||||||
|
struct PendingPhysObjectStates
|
||||||
|
{
|
||||||
|
Nz::Vector3f angularDamping;
|
||||||
|
Nz::Vector3f massCenter;
|
||||||
|
bool autoSleep;
|
||||||
|
bool valid = false;
|
||||||
|
float gravityFactor;
|
||||||
|
float linearDamping;
|
||||||
|
float mass;
|
||||||
|
};
|
||||||
|
|
||||||
std::unique_ptr<Nz::RigidBody3D> m_object;
|
std::unique_ptr<Nz::RigidBody3D> m_object;
|
||||||
|
PendingPhysObjectStates m_pendingStates;
|
||||||
|
bool m_nodeSynchronizationEnabled;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,19 +3,25 @@
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
#include <Nazara/Core/Error.hpp>
|
#include <Nazara/Core/Error.hpp>
|
||||||
|
#include "PhysicsComponent3D.hpp"
|
||||||
|
|
||||||
namespace Ndk
|
namespace Ndk
|
||||||
{
|
{
|
||||||
|
inline PhysicsComponent3D::PhysicsComponent3D() :
|
||||||
|
m_nodeSynchronizationEnabled(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Constructs a PhysicsComponent3D object by copy semantic
|
* \brief Constructs a PhysicsComponent3D object by copy semantic
|
||||||
*
|
*
|
||||||
* \param physics PhysicsComponent3D to copy
|
* \param physics PhysicsComponent3D to copy
|
||||||
*/
|
*/
|
||||||
|
inline PhysicsComponent3D::PhysicsComponent3D(const PhysicsComponent3D& physics) :
|
||||||
inline PhysicsComponent3D::PhysicsComponent3D(const PhysicsComponent3D& physics)
|
m_nodeSynchronizationEnabled(physics.m_nodeSynchronizationEnabled)
|
||||||
{
|
{
|
||||||
// No copy of physical object (because we only create it when attached to an entity)
|
// We can't make a copy of the RigidBody3D, as we are not attached yet (and will possibly be attached to another world)
|
||||||
NazaraUnused(physics);
|
CopyPhysicsState(physics.GetRigidBody());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -74,7 +80,6 @@ namespace Ndk
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline void PhysicsComponent3D::EnableAutoSleep(bool autoSleep)
|
inline void PhysicsComponent3D::EnableAutoSleep(bool autoSleep)
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
@ -82,13 +87,28 @@ namespace Ndk
|
||||||
m_object->EnableAutoSleep(autoSleep);
|
m_object->EnableAutoSleep(autoSleep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Enables position/rotation synchronization with the NodeComponent
|
||||||
|
*
|
||||||
|
* By default, at every update of the PhysicsSystem3D, the NodeComponent's position and rotation (if any) will be synchronized with
|
||||||
|
* the values of the PhysicsComponent3D. This function allows to enable/disable this behavior on a per-entity basis.
|
||||||
|
*
|
||||||
|
* \param nodeSynchronization Should synchronization occur between NodeComponent and PhysicsComponent3D
|
||||||
|
*/
|
||||||
|
inline void PhysicsComponent3D::EnableNodeSynchronization(bool nodeSynchronization)
|
||||||
|
{
|
||||||
|
m_nodeSynchronizationEnabled = nodeSynchronization;
|
||||||
|
|
||||||
|
if (m_entity)
|
||||||
|
m_entity->Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the AABB of the physics object
|
* \brief Gets the AABB of the physics object
|
||||||
* \return AABB of the object
|
* \return AABB of the object
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline Nz::Boxf PhysicsComponent3D::GetAABB() const
|
inline Nz::Boxf PhysicsComponent3D::GetAABB() const
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
@ -96,13 +116,23 @@ namespace Ndk
|
||||||
return m_object->GetAABB();
|
return m_object->GetAABB();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Gets the angular damping of the physics object
|
||||||
|
* \return Angular damping of the object
|
||||||
|
*
|
||||||
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
|
*/
|
||||||
|
inline Nz::Vector3f PhysicsComponent3D::GetAngularDamping() const
|
||||||
|
{
|
||||||
|
return m_object->GetAngularDamping();
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the angular velocity of the physics object
|
* \brief Gets the angular velocity of the physics object
|
||||||
* \return Angular velocity of the object
|
* \return Angular velocity of the object
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline Nz::Vector3f PhysicsComponent3D::GetAngularVelocity() const
|
inline Nz::Vector3f PhysicsComponent3D::GetAngularVelocity() const
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
@ -116,7 +146,6 @@ namespace Ndk
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline float PhysicsComponent3D::GetGravityFactor() const
|
inline float PhysicsComponent3D::GetGravityFactor() const
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
@ -124,6 +153,33 @@ namespace Ndk
|
||||||
return m_object->GetGravityFactor();
|
return m_object->GetGravityFactor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Gets the linear damping of the physics object
|
||||||
|
* \return Linear damping of the object
|
||||||
|
*
|
||||||
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
|
*/
|
||||||
|
inline float PhysicsComponent3D::GetLinearDamping() const
|
||||||
|
{
|
||||||
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
||||||
|
return m_object->GetLinearDamping();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Gets the linear velocity of the physics object
|
||||||
|
* \return Linear velocity of the object
|
||||||
|
*
|
||||||
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
|
*/
|
||||||
|
|
||||||
|
inline Nz::Vector3f PhysicsComponent3D::GetLinearVelocity() const
|
||||||
|
{
|
||||||
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
||||||
|
return m_object->GetLinearVelocity();
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the mass of the physics object
|
* \brief Gets the mass of the physics object
|
||||||
* \return Mass of the object
|
* \return Mass of the object
|
||||||
|
|
@ -196,27 +252,12 @@ namespace Ndk
|
||||||
return m_object->GetRotation();
|
return m_object->GetRotation();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Gets the velocity of the physics object
|
|
||||||
* \return Velocity of the object
|
|
||||||
*
|
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
|
||||||
*/
|
|
||||||
|
|
||||||
inline Nz::Vector3f PhysicsComponent3D::GetVelocity() const
|
|
||||||
{
|
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
|
||||||
|
|
||||||
return m_object->GetVelocity();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Checks whether the auto sleep is enabled
|
* \brief Checks whether the auto sleep is enabled
|
||||||
* \return true If it is the case
|
* \return true If it is the case
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline bool PhysicsComponent3D::IsAutoSleepEnabled() const
|
inline bool PhysicsComponent3D::IsAutoSleepEnabled() const
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
@ -224,13 +265,36 @@ namespace Ndk
|
||||||
return m_object->IsAutoSleepEnabled();
|
return m_object->IsAutoSleepEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks whether the object is moveable
|
||||||
|
* \return true If it is the case
|
||||||
|
*
|
||||||
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
|
*/
|
||||||
|
inline bool PhysicsComponent3D::IsMoveable() const
|
||||||
|
{
|
||||||
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
||||||
|
return m_object->IsMoveable();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks if position & rotation are synchronized with NodeComponent
|
||||||
|
* \return true If synchronization is enabled
|
||||||
|
*
|
||||||
|
* \see EnableNodeSynchronization
|
||||||
|
*/
|
||||||
|
inline bool PhysicsComponent3D::IsNodeSynchronizationEnabled() const
|
||||||
|
{
|
||||||
|
return m_nodeSynchronizationEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Checks whether the entity is currently sleeping
|
* \brief Checks whether the entity is currently sleeping
|
||||||
* \return true If it is the case
|
* \return true If it is the case
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline bool PhysicsComponent3D::IsSleeping() const
|
inline bool PhysicsComponent3D::IsSleeping() const
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
@ -238,6 +302,20 @@ namespace Ndk
|
||||||
return m_object->IsSleeping();
|
return m_object->IsSleeping();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Sets the angular damping of the physics object
|
||||||
|
*
|
||||||
|
* \param angularDamping Angular damping of the object
|
||||||
|
*
|
||||||
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
|
*/
|
||||||
|
inline void PhysicsComponent3D::SetAngularDamping(const Nz::Vector3f& angularDamping)
|
||||||
|
{
|
||||||
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
||||||
|
m_object->SetAngularDamping(angularDamping);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Sets the angular velocity of the physics object
|
* \brief Sets the angular velocity of the physics object
|
||||||
*
|
*
|
||||||
|
|
@ -245,7 +323,6 @@ namespace Ndk
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline void PhysicsComponent3D::SetAngularVelocity(const Nz::Vector3f& angularVelocity)
|
inline void PhysicsComponent3D::SetAngularVelocity(const Nz::Vector3f& angularVelocity)
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
@ -260,7 +337,6 @@ namespace Ndk
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline void PhysicsComponent3D::SetGravityFactor(float gravityFactor)
|
inline void PhysicsComponent3D::SetGravityFactor(float gravityFactor)
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
@ -268,6 +344,34 @@ namespace Ndk
|
||||||
m_object->SetGravityFactor(gravityFactor);
|
m_object->SetGravityFactor(gravityFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Sets the linear damping of the physics object
|
||||||
|
*
|
||||||
|
* \param damping Linear damping of the object
|
||||||
|
*
|
||||||
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
|
*/
|
||||||
|
inline void PhysicsComponent3D::SetLinearDamping(float damping)
|
||||||
|
{
|
||||||
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
||||||
|
m_object->SetLinearDamping(damping);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Sets the linear velocity of the physics object
|
||||||
|
*
|
||||||
|
* \param velocity New linear velocity of the object
|
||||||
|
*
|
||||||
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
|
*/
|
||||||
|
inline void PhysicsComponent3D::SetLinearVelocity(const Nz::Vector3f& velocity)
|
||||||
|
{
|
||||||
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
||||||
|
m_object->SetLinearVelocity(velocity);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Sets the mass of the physics object
|
* \brief Sets the mass of the physics object
|
||||||
*
|
*
|
||||||
|
|
@ -276,11 +380,11 @@ namespace Ndk
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
* \remark Produces a NazaraAssert if the physics object is invalid
|
||||||
* \remark Produces a NazaraAssert if the mass is negative
|
* \remark Produces a NazaraAssert if the mass is negative
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline void PhysicsComponent3D::SetMass(float mass)
|
inline void PhysicsComponent3D::SetMass(float mass)
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
NazaraAssert(mass > 0.f, "Mass should be positive");
|
NazaraAssert(mass >= 0.f, "Mass must be positive and finite");
|
||||||
|
NazaraAssert(std::isfinite(mass), "Mass must be positive and finite");
|
||||||
|
|
||||||
m_object->SetMass(mass);
|
m_object->SetMass(mass);
|
||||||
}
|
}
|
||||||
|
|
@ -330,27 +434,43 @@ namespace Ndk
|
||||||
m_object->SetRotation(rotation);
|
m_object->SetRotation(rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
inline void PhysicsComponent3D::ApplyPhysicsState(Nz::RigidBody3D& rigidBody) const
|
||||||
* \brief Sets the velocity of the physics object
|
|
||||||
*
|
|
||||||
* \param velocity Velocity of the object
|
|
||||||
*
|
|
||||||
* \remark Produces a NazaraAssert if the physics object is invalid
|
|
||||||
*/
|
|
||||||
|
|
||||||
inline void PhysicsComponent3D::SetVelocity(const Nz::Vector3f& velocity)
|
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid physics object");
|
assert(m_pendingStates.valid);
|
||||||
|
|
||||||
m_object->SetVelocity(velocity);
|
rigidBody.EnableAutoSleep(m_pendingStates.autoSleep);
|
||||||
|
rigidBody.SetAngularDamping(m_pendingStates.angularDamping);
|
||||||
|
rigidBody.SetGravityFactor(m_pendingStates.gravityFactor);
|
||||||
|
rigidBody.SetLinearDamping(m_pendingStates.linearDamping);
|
||||||
|
rigidBody.SetMass(m_pendingStates.mass);
|
||||||
|
rigidBody.SetMassCenter(m_pendingStates.massCenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void PhysicsComponent3D::CopyPhysicsState(const Nz::RigidBody3D& rigidBody)
|
||||||
|
{
|
||||||
|
m_pendingStates.autoSleep = rigidBody.IsAutoSleepEnabled();
|
||||||
|
m_pendingStates.angularDamping = rigidBody.GetAngularDamping();
|
||||||
|
m_pendingStates.gravityFactor = rigidBody.GetGravityFactor();
|
||||||
|
m_pendingStates.linearDamping = rigidBody.GetLinearDamping();
|
||||||
|
m_pendingStates.mass = rigidBody.GetMass();
|
||||||
|
m_pendingStates.massCenter = rigidBody.GetMassCenter(Nz::CoordSys_Local);
|
||||||
|
m_pendingStates.valid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the underlying physics object
|
* \brief Gets the underlying physics object
|
||||||
* \return A reference to the physics object
|
* \return A reference to the physics object
|
||||||
*/
|
*/
|
||||||
|
inline Nz::RigidBody3D* PhysicsComponent3D::GetRigidBody()
|
||||||
|
{
|
||||||
|
return m_object.get();
|
||||||
|
}
|
||||||
|
|
||||||
inline Nz::RigidBody3D& PhysicsComponent3D::GetRigidBody()
|
/*!
|
||||||
|
* \brief Gets the underlying physics object
|
||||||
|
* \return A reference to the physics object
|
||||||
|
*/
|
||||||
|
inline const Nz::RigidBody3D& PhysicsComponent3D::GetRigidBody() const
|
||||||
{
|
{
|
||||||
return *m_object.get();
|
return *m_object.get();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ namespace Ndk
|
||||||
const EntityHandle& Clone() const;
|
const EntityHandle& Clone() const;
|
||||||
|
|
||||||
inline void Disable();
|
inline void Disable();
|
||||||
inline void Enable(bool enable = true);
|
void Enable(bool enable = true);
|
||||||
|
|
||||||
inline BaseComponent& GetComponent(ComponentIndex index);
|
inline BaseComponent& GetComponent(ComponentIndex index);
|
||||||
template<typename ComponentType> ComponentType& GetComponent();
|
template<typename ComponentType> ComponentType& GetComponent();
|
||||||
|
|
|
||||||
|
|
@ -38,20 +38,6 @@ namespace Ndk
|
||||||
Enable(false);
|
Enable(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Enables the entity
|
|
||||||
*
|
|
||||||
* \param enable Should the entity be enabled
|
|
||||||
*/
|
|
||||||
inline void Entity::Enable(bool enable)
|
|
||||||
{
|
|
||||||
if (m_enabled != enable)
|
|
||||||
{
|
|
||||||
m_enabled = enable;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets a component in the entity by index
|
* \brief Gets a component in the entity by index
|
||||||
* \return A reference to the component
|
* \return A reference to the component
|
||||||
|
|
|
||||||
|
|
@ -31,4 +31,4 @@ namespace Ndk
|
||||||
|
|
||||||
#include <NDK/EntityOwner.inl>
|
#include <NDK/EntityOwner.inl>
|
||||||
|
|
||||||
#endif // NDK_ENTITYOwner_HPP
|
#endif // NDK_ENTITYOWNER_HPP
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,11 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
m_cursorPosition.MakeZero();
|
m_cursorPosition.MakeZero();
|
||||||
m_drawer.Clear();
|
m_drawer.Clear();
|
||||||
|
m_text.Clear();
|
||||||
m_textSprite->Update(m_drawer);
|
m_textSprite->Update(m_drawer);
|
||||||
|
|
||||||
RefreshCursor();
|
RefreshCursor();
|
||||||
|
OnTextChanged(this, m_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void TextAreaWidget::EnableMultiline(bool enable)
|
inline void TextAreaWidget::EnableMultiline(bool enable)
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,26 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Operation to perform when the entity is disabled
|
||||||
|
*
|
||||||
|
* \remark Disabling an entity will remove it from systems it belongs to, but sometimes the entity will need to do
|
||||||
|
* additional work in order to be properly disabled (i.e.: disabling physics simulation & collisions)
|
||||||
|
*/
|
||||||
|
void BaseComponent::OnEntityDisabled()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Operation to perform when the entity is disabled
|
||||||
|
*
|
||||||
|
* \remark Enabling an entity will add it back to systems it belongs to, but sometimes the entity will need to do
|
||||||
|
* additional work in order to be properly re-enabled (i.e.: enabling physics simulation & collisions)
|
||||||
|
*/
|
||||||
|
void BaseComponent::OnEntityEnabled()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<BaseComponent::ComponentEntry> BaseComponent::s_entries;
|
std::vector<BaseComponent::ComponentEntry> BaseComponent::s_entries;
|
||||||
std::unordered_map<ComponentId, ComponentIndex> BaseComponent::s_idToIndex;
|
std::unordered_map<ComponentId, ComponentIndex> BaseComponent::s_idToIndex;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
// We update the geometry of the PhysiscsObject linked to the PhysicsComponent2D
|
// We update the geometry of the PhysiscsObject linked to the PhysicsComponent2D
|
||||||
PhysicsComponent2D& physComponent = m_entity->GetComponent<PhysicsComponent2D>();
|
PhysicsComponent2D& physComponent = m_entity->GetComponent<PhysicsComponent2D>();
|
||||||
physComponent.GetRigidBody().SetGeom(m_geom);
|
physComponent.GetRigidBody()->SetGeom(m_geom);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -58,7 +58,7 @@ namespace Ndk
|
||||||
NazaraAssert(entityWorld->HasSystem<PhysicsSystem2D>(), "World must have a physics system");
|
NazaraAssert(entityWorld->HasSystem<PhysicsSystem2D>(), "World must have a physics system");
|
||||||
Nz::PhysWorld2D& physWorld = entityWorld->GetSystem<PhysicsSystem2D>().GetWorld();
|
Nz::PhysWorld2D& physWorld = entityWorld->GetSystem<PhysicsSystem2D>().GetWorld();
|
||||||
|
|
||||||
m_staticBody.reset(new Nz::RigidBody2D(&physWorld, 0.f, m_geom));
|
m_staticBody = std::make_unique<Nz::RigidBody2D>(&physWorld, 0.f, m_geom);
|
||||||
|
|
||||||
Nz::Matrix4f matrix;
|
Nz::Matrix4f matrix;
|
||||||
if (m_entity->HasComponent<NodeComponent>())
|
if (m_entity->HasComponent<NodeComponent>())
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
// We update the geometry of the PhysiscsObject linked to the PhysicsComponent3D
|
// We update the geometry of the PhysiscsObject linked to the PhysicsComponent3D
|
||||||
PhysicsComponent3D& physComponent = m_entity->GetComponent<PhysicsComponent3D>();
|
PhysicsComponent3D& physComponent = m_entity->GetComponent<PhysicsComponent3D>();
|
||||||
physComponent.GetRigidBody().SetGeom(m_geom);
|
physComponent.GetRigidBody()->SetGeom(m_geom);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -57,7 +57,7 @@ namespace Ndk
|
||||||
NazaraAssert(entityWorld->HasSystem<PhysicsSystem3D>(), "World must have a physics system");
|
NazaraAssert(entityWorld->HasSystem<PhysicsSystem3D>(), "World must have a physics system");
|
||||||
Nz::PhysWorld3D& physWorld = entityWorld->GetSystem<PhysicsSystem3D>().GetWorld();
|
Nz::PhysWorld3D& physWorld = entityWorld->GetSystem<PhysicsSystem3D>().GetWorld();
|
||||||
|
|
||||||
m_staticBody.reset(new Nz::RigidBody3D(&physWorld, m_geom));
|
m_staticBody = std::make_unique<Nz::RigidBody3D>(&physWorld, m_geom);
|
||||||
m_staticBody->EnableAutoSleep(false);
|
m_staticBody->EnableAutoSleep(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,5 +104,17 @@ namespace Ndk
|
||||||
m_staticBody.reset();
|
m_staticBody.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CollisionComponent3D::OnEntityDisabled()
|
||||||
|
{
|
||||||
|
if (m_staticBody)
|
||||||
|
m_staticBody->EnableSimulation(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CollisionComponent3D::OnEntityEnabled()
|
||||||
|
{
|
||||||
|
if (m_staticBody)
|
||||||
|
m_staticBody->EnableSimulation(true);
|
||||||
|
}
|
||||||
|
|
||||||
ComponentIndex CollisionComponent3D::componentIndex;
|
ComponentIndex CollisionComponent3D::componentIndex;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include <NDK/Components/ConstraintComponent2D.hpp>
|
||||||
|
|
||||||
|
namespace Ndk
|
||||||
|
{
|
||||||
|
ComponentIndex ConstraintComponent2D::componentIndex;
|
||||||
|
}
|
||||||
|
|
@ -40,8 +40,12 @@ namespace Ndk
|
||||||
else
|
else
|
||||||
matrix.MakeIdentity();
|
matrix.MakeIdentity();
|
||||||
|
|
||||||
m_object.reset(new Nz::RigidBody3D(&world, geom, matrix));
|
m_object = std::make_unique<Nz::RigidBody3D>(&world, geom, matrix);
|
||||||
m_object->SetMass(1.f);
|
|
||||||
|
if (m_pendingStates.valid)
|
||||||
|
ApplyPhysicsState(*m_object);
|
||||||
|
else
|
||||||
|
m_object->SetMass(1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -57,6 +61,7 @@ namespace Ndk
|
||||||
if (IsComponent<CollisionComponent3D>(component))
|
if (IsComponent<CollisionComponent3D>(component))
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid object");
|
NazaraAssert(m_object, "Invalid object");
|
||||||
|
|
||||||
m_object->SetGeom(static_cast<CollisionComponent3D&>(component).GetGeom());
|
m_object->SetGeom(static_cast<CollisionComponent3D&>(component).GetGeom());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -74,6 +79,7 @@ namespace Ndk
|
||||||
if (IsComponent<CollisionComponent3D>(component))
|
if (IsComponent<CollisionComponent3D>(component))
|
||||||
{
|
{
|
||||||
NazaraAssert(m_object, "Invalid object");
|
NazaraAssert(m_object, "Invalid object");
|
||||||
|
|
||||||
m_object->SetGeom(Nz::NullCollider3D::New());
|
m_object->SetGeom(Nz::NullCollider3D::New());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -84,7 +90,11 @@ namespace Ndk
|
||||||
|
|
||||||
void PhysicsComponent3D::OnDetached()
|
void PhysicsComponent3D::OnDetached()
|
||||||
{
|
{
|
||||||
m_object.reset();
|
if (m_object)
|
||||||
|
{
|
||||||
|
CopyPhysicsState(*m_object);
|
||||||
|
m_object.reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PhysicsComponent3D::OnEntityDestruction()
|
void PhysicsComponent3D::OnEntityDestruction()
|
||||||
|
|
@ -93,5 +103,19 @@ namespace Ndk
|
||||||
m_object.reset();
|
m_object.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PhysicsComponent3D::OnEntityDisabled()
|
||||||
|
{
|
||||||
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
||||||
|
m_object->EnableSimulation(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PhysicsComponent3D::OnEntityEnabled()
|
||||||
|
{
|
||||||
|
NazaraAssert(m_object, "Invalid physics object");
|
||||||
|
|
||||||
|
m_object->EnableSimulation(true);
|
||||||
|
}
|
||||||
|
|
||||||
ComponentIndex PhysicsComponent3D::componentIndex;
|
ComponentIndex PhysicsComponent3D::componentIndex;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,10 @@ namespace Ndk
|
||||||
m_components[i]->OnComponentAttached(component);
|
m_components[i]->OnComponentAttached(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we are currently disabled, inform the component
|
||||||
|
if (!m_enabled)
|
||||||
|
component.OnEntityDisabled();
|
||||||
|
|
||||||
return component;
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,7 +110,6 @@ namespace Ndk
|
||||||
* \remark The close is enable by default, even if the original is disabled
|
* \remark The close is enable by default, even if the original is disabled
|
||||||
* \remark Produces a NazaraAssert if the entity is not valid
|
* \remark Produces a NazaraAssert if the entity is not valid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const EntityHandle& Entity::Clone() const
|
const EntityHandle& Entity::Clone() const
|
||||||
{
|
{
|
||||||
NazaraAssert(IsValid(), "Invalid entity");
|
NazaraAssert(IsValid(), "Invalid entity");
|
||||||
|
|
@ -114,10 +117,34 @@ namespace Ndk
|
||||||
return m_world->CloneEntity(m_id);
|
return m_world->CloneEntity(m_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Enables the entity
|
||||||
|
*
|
||||||
|
* \param enable Should the entity be enabled
|
||||||
|
*/
|
||||||
|
void Entity::Enable(bool enable)
|
||||||
|
{
|
||||||
|
if (m_enabled != enable)
|
||||||
|
{
|
||||||
|
m_enabled = enable;
|
||||||
|
if (m_enabled)
|
||||||
|
{
|
||||||
|
for (std::size_t i = m_componentBits.FindFirst(); i != m_componentBits.npos; i = m_componentBits.FindNext(i))
|
||||||
|
m_components[i]->OnEntityEnabled();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (std::size_t i = m_componentBits.FindFirst(); i != m_componentBits.npos; i = m_componentBits.FindNext(i))
|
||||||
|
m_components[i]->OnEntityDisabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Kills the entity
|
* \brief Kills the entity
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void Entity::Kill()
|
void Entity::Kill()
|
||||||
{
|
{
|
||||||
m_world->KillEntity(this);
|
m_world->KillEntity(this);
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
#include <NDK/Components/PhysicsComponent2D.hpp>
|
#include <NDK/Components/PhysicsComponent2D.hpp>
|
||||||
#include <NDK/Components/PhysicsComponent3D.hpp>
|
#include <NDK/Components/PhysicsComponent3D.hpp>
|
||||||
#include <NDK/Components/VelocityComponent.hpp>
|
#include <NDK/Components/VelocityComponent.hpp>
|
||||||
|
#include <NDK/Components/ConstraintComponent2D.hpp>
|
||||||
#include <NDK/Systems/PhysicsSystem2D.hpp>
|
#include <NDK/Systems/PhysicsSystem2D.hpp>
|
||||||
#include <NDK/Systems/PhysicsSystem3D.hpp>
|
#include <NDK/Systems/PhysicsSystem3D.hpp>
|
||||||
#include <NDK/Systems/VelocitySystem.hpp>
|
#include <NDK/Systems/VelocitySystem.hpp>
|
||||||
|
|
@ -89,6 +90,7 @@ namespace Ndk
|
||||||
InitializeComponent<PhysicsComponent2D>("NdkPhys2");
|
InitializeComponent<PhysicsComponent2D>("NdkPhys2");
|
||||||
InitializeComponent<PhysicsComponent3D>("NdkPhys3");
|
InitializeComponent<PhysicsComponent3D>("NdkPhys3");
|
||||||
InitializeComponent<VelocityComponent>("NdkVeloc");
|
InitializeComponent<VelocityComponent>("NdkVeloc");
|
||||||
|
InitializeComponent<VelocityComponent>("NdkCons2");
|
||||||
|
|
||||||
#ifndef NDK_SERVER
|
#ifndef NDK_SERVER
|
||||||
// Client components
|
// Client components
|
||||||
|
|
|
||||||
|
|
@ -80,9 +80,9 @@ namespace Ndk
|
||||||
NodeComponent& node = entity->GetComponent<NodeComponent>();
|
NodeComponent& node = entity->GetComponent<NodeComponent>();
|
||||||
PhysicsComponent2D& phys = entity->GetComponent<PhysicsComponent2D>();
|
PhysicsComponent2D& phys = entity->GetComponent<PhysicsComponent2D>();
|
||||||
|
|
||||||
Nz::RigidBody2D& body = phys.GetRigidBody();
|
Nz::RigidBody2D* body = phys.GetRigidBody();
|
||||||
node.SetRotation(Nz::EulerAnglesf(0.f, 0.f, body.GetRotation()), Nz::CoordSys_Global);
|
node.SetRotation(Nz::EulerAnglesf(0.f, 0.f, body->GetRotation()), Nz::CoordSys_Global);
|
||||||
node.SetPosition(Nz::Vector3f(body.GetPosition(), node.GetPosition(Nz::CoordSys_Global).z), Nz::CoordSys_Global);
|
node.SetPosition(Nz::Vector3f(body->GetPosition(), node.GetPosition(Nz::CoordSys_Global).z), Nz::CoordSys_Global);
|
||||||
}
|
}
|
||||||
|
|
||||||
float invElapsedTime = 1.f / elapsedTime;
|
float invElapsedTime = 1.f / elapsedTime;
|
||||||
|
|
|
||||||
|
|
@ -47,16 +47,32 @@ namespace Ndk
|
||||||
|
|
||||||
void PhysicsSystem3D::OnEntityValidation(Entity* entity, bool justAdded)
|
void PhysicsSystem3D::OnEntityValidation(Entity* entity, bool justAdded)
|
||||||
{
|
{
|
||||||
// It's possible our entity got revalidated because of the addition/removal of a PhysicsComponent3D
|
if (entity->HasComponent<PhysicsComponent3D>())
|
||||||
if (!justAdded)
|
|
||||||
{
|
{
|
||||||
// We take the opposite array from which the entity should belong to
|
if (entity->GetComponent<PhysicsComponent3D>().IsNodeSynchronizationEnabled())
|
||||||
auto& entities = (entity->HasComponent<PhysicsComponent3D>()) ? m_staticObjects : m_dynamicObjects;
|
m_dynamicObjects.Insert(entity);
|
||||||
entities.Remove(entity);
|
else
|
||||||
}
|
m_dynamicObjects.Remove(entity);
|
||||||
|
|
||||||
auto& entities = (entity->HasComponent<PhysicsComponent3D>()) ? m_dynamicObjects : m_staticObjects;
|
m_staticObjects.Remove(entity);
|
||||||
entities.Insert(entity);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_dynamicObjects.Remove(entity);
|
||||||
|
m_staticObjects.Insert(entity);
|
||||||
|
|
||||||
|
// If entities just got added to the system, teleport them to their NodeComponent position/rotation
|
||||||
|
// This will prevent the physics engine to mess with the scene while correcting position/rotation
|
||||||
|
if (justAdded)
|
||||||
|
{
|
||||||
|
auto& collision = entity->GetComponent<CollisionComponent3D>();
|
||||||
|
auto& node = entity->GetComponent<NodeComponent>();
|
||||||
|
|
||||||
|
Nz::RigidBody3D* physObj = collision.GetStaticBody();
|
||||||
|
physObj->SetPosition(node.GetPosition());
|
||||||
|
physObj->SetRotation(node.GetRotation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_world)
|
if (!m_world)
|
||||||
CreatePhysWorld();
|
CreatePhysWorld();
|
||||||
|
|
@ -80,9 +96,9 @@ namespace Ndk
|
||||||
NodeComponent& node = entity->GetComponent<NodeComponent>();
|
NodeComponent& node = entity->GetComponent<NodeComponent>();
|
||||||
PhysicsComponent3D& phys = entity->GetComponent<PhysicsComponent3D>();
|
PhysicsComponent3D& phys = entity->GetComponent<PhysicsComponent3D>();
|
||||||
|
|
||||||
Nz::RigidBody3D& physObj = phys.GetRigidBody();
|
Nz::RigidBody3D* physObj = phys.GetRigidBody();
|
||||||
node.SetRotation(physObj.GetRotation(), Nz::CoordSys_Global);
|
node.SetRotation(physObj->GetRotation(), Nz::CoordSys_Global);
|
||||||
node.SetPosition(physObj.GetPosition(), Nz::CoordSys_Global);
|
node.SetPosition(physObj->GetPosition(), Nz::CoordSys_Global);
|
||||||
}
|
}
|
||||||
|
|
||||||
float invElapsedTime = 1.f / elapsedTime;
|
float invElapsedTime = 1.f / elapsedTime;
|
||||||
|
|
@ -103,10 +119,10 @@ namespace Ndk
|
||||||
if (newPosition != oldPosition)
|
if (newPosition != oldPosition)
|
||||||
{
|
{
|
||||||
physObj->SetPosition(newPosition);
|
physObj->SetPosition(newPosition);
|
||||||
physObj->SetVelocity((newPosition - oldPosition) * invElapsedTime);
|
physObj->SetLinearVelocity((newPosition - oldPosition) * invElapsedTime);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
physObj->SetVelocity(Nz::Vector3f::Zero());
|
physObj->SetLinearVelocity(Nz::Vector3f::Zero());
|
||||||
|
|
||||||
if (newRotation != oldRotation)
|
if (newRotation != oldRotation)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ namespace Ndk
|
||||||
|
|
||||||
Nz::Vector3f textBox = m_textSprite->GetBoundingVolume().obb.localBox.GetLengths();
|
Nz::Vector3f textBox = m_textSprite->GetBoundingVolume().obb.localBox.GetLengths();
|
||||||
m_textEntity->GetComponent<NodeComponent>().SetPosition(origin.x + checkboxSize.x + (m_adaptativeMargin ? checkboxSize.x / 2.f : m_textMargin),
|
m_textEntity->GetComponent<NodeComponent>().SetPosition(origin.x + checkboxSize.x + (m_adaptativeMargin ? checkboxSize.x / 2.f : m_textMargin),
|
||||||
origin.y + checkboxSize.y / 2.f - textBox.y / 2.f);
|
origin.y + checkboxSize.y / 2.f - textBox.y / 2.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckboxWidget::OnMouseButtonRelease(int x, int y, Nz::Mouse::Button button)
|
void CheckboxWidget::OnMouseButtonRelease(int x, int y, Nz::Mouse::Button button)
|
||||||
|
|
|
||||||
|
|
@ -138,12 +138,11 @@ namespace Ndk
|
||||||
*
|
*
|
||||||
* \param id Identifier of the entity
|
* \param id Identifier of the entity
|
||||||
*
|
*
|
||||||
* \remark Produces a NazaraError if the entity to clone does not exist
|
* \remark Cloning a disabled entity will produce an enabled clone
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const EntityHandle& World::CloneEntity(EntityId id)
|
const EntityHandle& World::CloneEntity(EntityId id)
|
||||||
{
|
{
|
||||||
EntityHandle original = GetEntity(id);
|
const EntityHandle& original = GetEntity(id);
|
||||||
if (!original)
|
if (!original)
|
||||||
{
|
{
|
||||||
NazaraError("Invalid entity ID");
|
NazaraError("Invalid entity ID");
|
||||||
|
|
@ -151,6 +150,8 @@ namespace Ndk
|
||||||
}
|
}
|
||||||
|
|
||||||
const EntityHandle& clone = CreateEntity();
|
const EntityHandle& clone = CreateEntity();
|
||||||
|
if (!original->IsEnabled())
|
||||||
|
clone->Disable();
|
||||||
|
|
||||||
const Nz::Bitset<>& componentBits = original->GetComponentBits();
|
const Nz::Bitset<>& componentBits = original->GetComponentBits();
|
||||||
for (std::size_t i = componentBits.FindFirst(); i != componentBits.npos; i = componentBits.FindNext(i))
|
for (std::size_t i = componentBits.FindFirst(); i != componentBits.npos; i = componentBits.FindNext(i))
|
||||||
|
|
@ -159,6 +160,8 @@ namespace Ndk
|
||||||
clone->AddComponent(std::move(component));
|
clone->AddComponent(std::move(component));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clone->Enable();
|
||||||
|
|
||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ ACTION.Function = function ()
|
||||||
for arch, enabled in pairs(archEnabled) do
|
for arch, enabled in pairs(archEnabled) do
|
||||||
if (enabled) then
|
if (enabled) then
|
||||||
local archLibSrc = realLibDir .. arch .. "/"
|
local archLibSrc = realLibDir .. arch .. "/"
|
||||||
local arch3rdPartyBinSrc = "../extlibs/lib/common/" .. arch .. "/"
|
local arch3rdPartyBinSrc = "../thirdparty/lib/common/" .. arch .. "/"
|
||||||
local archBinDst = "bin/" .. arch .. "/"
|
local archBinDst = "bin/" .. arch .. "/"
|
||||||
local archLibDst = "lib/" .. arch .. "/"
|
local archLibDst = "lib/" .. arch .. "/"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,12 @@ NazaraBuild = {}
|
||||||
local clangGccActions = "action:" .. table.concat({"codeblocks", "codelite", "gmake", "xcode3", "xcode4"}, " or ")
|
local clangGccActions = "action:" .. table.concat({"codeblocks", "codelite", "gmake", "xcode3", "xcode4"}, " or ")
|
||||||
|
|
||||||
function NazaraBuild:AddExecutablePath(path)
|
function NazaraBuild:AddExecutablePath(path)
|
||||||
self.ExecutableDir[path] = true
|
table.insert(self.ExecutableDir, path)
|
||||||
self.InstallDir[path] = true
|
self:AddInstallPath(path)
|
||||||
end
|
end
|
||||||
|
|
||||||
function NazaraBuild:AddInstallPath(path)
|
function NazaraBuild:AddInstallPath(path)
|
||||||
self.InstallDir[path] = true
|
table.insert(self.InstallDir, path)
|
||||||
end
|
end
|
||||||
|
|
||||||
function NazaraBuild:FilterLibDirectory(prefix, func)
|
function NazaraBuild:FilterLibDirectory(prefix, func)
|
||||||
|
|
@ -53,41 +53,49 @@ function NazaraBuild:Execute()
|
||||||
end
|
end
|
||||||
|
|
||||||
if (self.Actions[_ACTION] == nil) then
|
if (self.Actions[_ACTION] == nil) then
|
||||||
|
-- Start defining projects
|
||||||
|
workspace("NazaraEngine")
|
||||||
|
platforms(platformData)
|
||||||
|
|
||||||
|
location(_ACTION)
|
||||||
|
|
||||||
|
do
|
||||||
|
local linkTypes = {"Dynamic"} -- {"Static", "Dynamic"}
|
||||||
|
local configs = {}
|
||||||
|
for k,linkType in pairs(linkTypes) do
|
||||||
|
for k,config in pairs(self.Config["Configurations"]) do
|
||||||
|
table.insert(configs, config .. linkType)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
configurations(configs)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Extern libraries
|
||||||
if (self.Config["BuildDependencies"]) then
|
if (self.Config["BuildDependencies"]) then
|
||||||
workspace("NazaraExtlibs")
|
self:FilterLibDirectory("../thirdparty/lib/", targetdir)
|
||||||
platforms(platformData)
|
|
||||||
|
|
||||||
-- Configuration générale
|
|
||||||
configurations({
|
|
||||||
"DebugStatic",
|
|
||||||
"ReleaseStatic"
|
|
||||||
})
|
|
||||||
|
|
||||||
self:PrepareGeneric()
|
|
||||||
self:FilterLibDirectory("../extlibs/lib/", targetdir)
|
|
||||||
|
|
||||||
filter(clangGccActions)
|
|
||||||
buildoptions("-U__STRICT_ANSI__")
|
|
||||||
|
|
||||||
filter({})
|
|
||||||
|
|
||||||
includedirs("../extlibs/include")
|
|
||||||
libdirs("../extlibs/lib/common")
|
|
||||||
location(_ACTION)
|
|
||||||
|
|
||||||
for k, libTable in ipairs(self.OrderedExtLibs) do
|
for k, libTable in ipairs(self.OrderedExtLibs) do
|
||||||
project(libTable.Name)
|
project(libTable.Name)
|
||||||
|
|
||||||
|
self:PrepareGeneric()
|
||||||
|
|
||||||
language(libTable.Language)
|
language(libTable.Language)
|
||||||
location(_ACTION .. "/extlibs")
|
location(_ACTION .. "/thirdparty")
|
||||||
|
|
||||||
files(libTable.Files)
|
files(libTable.Files)
|
||||||
excludes(libTable.FilesExcluded)
|
excludes(libTable.FilesExcluded)
|
||||||
|
|
||||||
defines(libTable.Defines)
|
defines(libTable.Defines)
|
||||||
flags(libTable.Flags)
|
flags(libTable.Flags)
|
||||||
|
kind("StaticLib") -- Force them as static libs
|
||||||
|
includedirs("../thirdparty/include")
|
||||||
includedirs(libTable.Includes)
|
includedirs(libTable.Includes)
|
||||||
links(libTable.Libraries)
|
links(libTable.Libraries)
|
||||||
|
libdirs("../thirdparty/lib/common")
|
||||||
|
|
||||||
|
filter(clangGccActions)
|
||||||
|
buildoptions("-U__STRICT_ANSI__")
|
||||||
|
|
||||||
filter("architecture:x86")
|
filter("architecture:x86")
|
||||||
libdirs(libTable.LibraryPaths.x86)
|
libdirs(libTable.LibraryPaths.x86)
|
||||||
|
|
@ -104,30 +112,6 @@ function NazaraBuild:Execute()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Start defining projects
|
|
||||||
workspace("NazaraEngine")
|
|
||||||
platforms(platformData)
|
|
||||||
|
|
||||||
self:PrepareMainWorkspace()
|
|
||||||
|
|
||||||
-- Add lib/conf/arch to library search path
|
|
||||||
self:FilterLibDirectory("../lib/", libdirs)
|
|
||||||
|
|
||||||
do
|
|
||||||
local linkTypes = {"Dynamic"} -- {"Static", "Dynamic"}
|
|
||||||
local configs = {}
|
|
||||||
for k,linkType in pairs(linkTypes) do
|
|
||||||
for k,config in pairs(self.Config["Configurations"]) do
|
|
||||||
table.insert(configs, config .. linkType)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
configurations(configs)
|
|
||||||
end
|
|
||||||
|
|
||||||
language("C++")
|
|
||||||
location(_ACTION)
|
|
||||||
|
|
||||||
if (self.Config["PremakeProject"] and os.ishost("windows")) then
|
if (self.Config["PremakeProject"] and os.ishost("windows")) then
|
||||||
local commandLine = "premake5.exe " .. table.concat(_ARGV, ' ')
|
local commandLine = "premake5.exe " .. table.concat(_ARGV, ' ')
|
||||||
project("_PremakeProject")
|
project("_PremakeProject")
|
||||||
|
|
@ -138,11 +122,15 @@ function NazaraBuild:Execute()
|
||||||
-- Modules
|
-- Modules
|
||||||
if (_OPTIONS["united"]) then
|
if (_OPTIONS["united"]) then
|
||||||
project("NazaraEngine")
|
project("NazaraEngine")
|
||||||
|
|
||||||
|
self:PrepareMainWorkspace()
|
||||||
end
|
end
|
||||||
|
|
||||||
for k, moduleTable in ipairs(self.OrderedModules) do
|
for k, moduleTable in ipairs(self.OrderedModules) do
|
||||||
if (not _OPTIONS["united"]) then
|
if (not _OPTIONS["united"]) then
|
||||||
project("Nazara" .. moduleTable.Name)
|
project("Nazara" .. moduleTable.Name)
|
||||||
|
|
||||||
|
self:PrepareMainWorkspace()
|
||||||
end
|
end
|
||||||
|
|
||||||
location(_ACTION .. "/modules")
|
location(_ACTION .. "/modules")
|
||||||
|
|
@ -150,7 +138,7 @@ function NazaraBuild:Execute()
|
||||||
includedirs({
|
includedirs({
|
||||||
"../include",
|
"../include",
|
||||||
"../src/",
|
"../src/",
|
||||||
"../extlibs/include"
|
"../thirdparty/include"
|
||||||
})
|
})
|
||||||
|
|
||||||
files(moduleTable.Files)
|
files(moduleTable.Files)
|
||||||
|
|
@ -162,7 +150,7 @@ function NazaraBuild:Execute()
|
||||||
links(moduleTable.Libraries)
|
links(moduleTable.Libraries)
|
||||||
|
|
||||||
libdirs({
|
libdirs({
|
||||||
"../extlibs/lib/common",
|
"../thirdparty/lib/common",
|
||||||
"../lib"
|
"../lib"
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -195,6 +183,8 @@ function NazaraBuild:Execute()
|
||||||
|
|
||||||
project(prefix .. toolTable.Name)
|
project(prefix .. toolTable.Name)
|
||||||
|
|
||||||
|
self:PrepareMainWorkspace()
|
||||||
|
|
||||||
location(_ACTION .. "/tools")
|
location(_ACTION .. "/tools")
|
||||||
|
|
||||||
if (toolTable.Kind == "plugin" or toolTable.Kind == "library") then
|
if (toolTable.Kind == "plugin" or toolTable.Kind == "library") then
|
||||||
|
|
@ -216,11 +206,11 @@ function NazaraBuild:Execute()
|
||||||
|
|
||||||
includedirs({
|
includedirs({
|
||||||
"../include",
|
"../include",
|
||||||
"../extlibs/include"
|
"../thirdparty/include"
|
||||||
})
|
})
|
||||||
|
|
||||||
libdirs({
|
libdirs({
|
||||||
"../extlibs/lib/common",
|
"../thirdparty/lib/common",
|
||||||
"../lib"
|
"../lib"
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -258,6 +248,8 @@ function NazaraBuild:Execute()
|
||||||
|
|
||||||
project("Demo" .. exampleTable.Name)
|
project("Demo" .. exampleTable.Name)
|
||||||
|
|
||||||
|
self:PrepareMainWorkspace()
|
||||||
|
|
||||||
location(_ACTION .. "/examples")
|
location(_ACTION .. "/examples")
|
||||||
|
|
||||||
if (exampleTable.Kind == "plugin" or exampleTable.Kind == "library") then
|
if (exampleTable.Kind == "plugin" or exampleTable.Kind == "library") then
|
||||||
|
|
@ -278,7 +270,7 @@ function NazaraBuild:Execute()
|
||||||
debugdir(destPath)
|
debugdir(destPath)
|
||||||
includedirs({
|
includedirs({
|
||||||
"../include",
|
"../include",
|
||||||
"../extlibs/include"
|
"../thirdparty/include"
|
||||||
})
|
})
|
||||||
libdirs("../lib")
|
libdirs("../lib")
|
||||||
|
|
||||||
|
|
@ -355,7 +347,7 @@ function NazaraBuild:Initialize()
|
||||||
ACTION = nil
|
ACTION = nil
|
||||||
|
|
||||||
-- Extern libraries
|
-- Extern libraries
|
||||||
local extlibs = os.matchfiles("../extlibs/build/*.lua")
|
local extlibs = os.matchfiles("../thirdparty/build/*.lua")
|
||||||
for k,v in pairs(extlibs) do
|
for k,v in pairs(extlibs) do
|
||||||
local f, err = loadfile(v)
|
local f, err = loadfile(v)
|
||||||
if (f) then
|
if (f) then
|
||||||
|
|
@ -463,7 +455,7 @@ function NazaraBuild:Initialize()
|
||||||
if (self:Process(projectTable)) then
|
if (self:Process(projectTable)) then
|
||||||
table.insert(orderedTables[k], projectTable)
|
table.insert(orderedTables[k], projectTable)
|
||||||
else
|
else
|
||||||
print("Rejected " .. projectTable.Name .. " " .. string.lower(projectTable.Type) .. ": " .. projectTable.ExcludeReason)
|
print("Rejected " .. projectTable.Name .. " " .. string.lower(projectTable.Category) .. ": " .. projectTable.ExcludeReason)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -610,11 +602,13 @@ function NazaraBuild:MakeInstallCommands(infoTable)
|
||||||
|
|
||||||
postbuildmessage("Copying " .. infoTable.Name .. " library and its dependencies to install/executable directories...")
|
postbuildmessage("Copying " .. infoTable.Name .. " library and its dependencies to install/executable directories...")
|
||||||
|
|
||||||
for k,v in pairs(self.InstallDir) do
|
-- Copy built file to install directory
|
||||||
local destPath = path.translate(path.isabsolute(k) and k or "../../" .. k)
|
for k,installPath in pairs(self.InstallDir) do
|
||||||
|
local destPath = path.translate(path.isabsolute(installPath) and installPath or "../../" .. installPath)
|
||||||
postbuildcommands({[[xcopy "%{path.translate(cfg.buildtarget.relpath)}" "]] .. destPath .. [[\" /E /Y]]})
|
postbuildcommands({[[xcopy "%{path.translate(cfg.buildtarget.relpath)}" "]] .. destPath .. [[\" /E /Y]]})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Copy additional dependencies to executable directories too
|
||||||
for k,fileName in pairs(table.join(infoTable.Libraries, infoTable.DynLib)) do
|
for k,fileName in pairs(table.join(infoTable.Libraries, infoTable.DynLib)) do
|
||||||
local paths = {}
|
local paths = {}
|
||||||
for k,v in pairs(infoTable.BinaryPaths.x86) do
|
for k,v in pairs(infoTable.BinaryPaths.x86) do
|
||||||
|
|
@ -637,9 +631,9 @@ function NazaraBuild:MakeInstallCommands(infoTable)
|
||||||
|
|
||||||
filter("architecture:" .. arch)
|
filter("architecture:" .. arch)
|
||||||
|
|
||||||
for k,v in pairs(self.ExecutableDir) do
|
for k,execPath in pairs(self.ExecutableDir) do
|
||||||
local srcPath = path.isabsolute(srcPath) and path.translate(srcPath) or [[%{path.translate(cfg.linktarget.relpath:sub(1, -#cfg.linktarget.name - 1) .. "../../]] .. srcPath .. [[")}]]
|
local srcPath = path.isabsolute(srcPath) and path.translate(srcPath) or [[%{path.translate(cfg.linktarget.relpath:sub(1, -#cfg.linktarget.name - 1) .. "../../]] .. srcPath .. [[")}]]
|
||||||
local destPath = path.translate(path.isabsolute(k) and k or "../../" .. k)
|
local destPath = path.translate(path.isabsolute(execPath) and execPath or "../../" .. execPath)
|
||||||
postbuildcommands({[[xcopy "]] .. srcPath .. [[" "]] .. destPath .. [[\" /E /Y]]})
|
postbuildcommands({[[xcopy "]] .. srcPath .. [[" "]] .. destPath .. [[\" /E /Y]]})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -658,13 +652,17 @@ local PosixOSes = {
|
||||||
}
|
}
|
||||||
|
|
||||||
function NazaraBuild:Process(infoTable)
|
function NazaraBuild:Process(infoTable)
|
||||||
|
if (infoTable.Excluded) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
local libraries = {}
|
local libraries = {}
|
||||||
for k, library in pairs(infoTable.Libraries) do
|
for k, library in pairs(infoTable.Libraries) do
|
||||||
local libraryTable = self:GetDependency(infoTable, library)
|
local libraryTable = self:GetDependency(infoTable, library)
|
||||||
if (libraryTable) then
|
if (libraryTable) then
|
||||||
if (libraryTable.Excluded) then
|
if (libraryTable.Excluded) then
|
||||||
infoTable.Excluded = true
|
infoTable.Excluded = true
|
||||||
infoTable.ExcludeReason = "depends on excluded " .. library .. " " .. libraryTable.Type:lower()
|
infoTable.ExcludeReason = "depends on excluded " .. library .. " " .. libraryTable.Category:lower()
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -686,12 +684,16 @@ function NazaraBuild:Process(infoTable)
|
||||||
elseif (libraryTable.Type == "ExternLib") then
|
elseif (libraryTable.Type == "ExternLib") then
|
||||||
library = libraryTable.Name
|
library = libraryTable.Name
|
||||||
|
|
||||||
table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d")
|
if (self.Config["BuildDependencies"]) then
|
||||||
table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, library .. "-s")
|
table.insert(libraries, library)
|
||||||
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugStatic, library .. "-s")
|
else
|
||||||
table.insert(infoTable.ConfigurationLibraries.DebugDynamic, library .. "-s-d")
|
table.insert(infoTable.ConfigurationLibraries.DebugStatic, library .. "-s-d")
|
||||||
table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, library .. "-s")
|
table.insert(infoTable.ConfigurationLibraries.ReleaseStatic, library .. "-s")
|
||||||
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, library .. "-s")
|
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugStatic, library .. "-s")
|
||||||
|
table.insert(infoTable.ConfigurationLibraries.DebugDynamic, library .. "-s-d")
|
||||||
|
table.insert(infoTable.ConfigurationLibraries.ReleaseDynamic, library .. "-s")
|
||||||
|
table.insert(infoTable.ConfigurationLibraries.ReleaseWithDebugDynamic, library .. "-s")
|
||||||
|
end
|
||||||
elseif (libraryTable.Type == "Tool") then
|
elseif (libraryTable.Type == "Tool") then
|
||||||
library = "Nazara" .. libraryTable.Name
|
library = "Nazara" .. libraryTable.Name
|
||||||
|
|
||||||
|
|
@ -786,7 +788,7 @@ function NazaraBuild:PrepareGeneric()
|
||||||
|
|
||||||
cppdialect("C++14")
|
cppdialect("C++14")
|
||||||
|
|
||||||
self:FilterLibDirectory("../extlibs/lib/", libdirs)
|
self:FilterLibDirectory("../thirdparty/lib/", libdirs)
|
||||||
|
|
||||||
-- Fixes Premake stuff
|
-- Fixes Premake stuff
|
||||||
filter({"kind:SharedLib", clangGccActions})
|
filter({"kind:SharedLib", clangGccActions})
|
||||||
|
|
@ -801,13 +803,13 @@ function NazaraBuild:PrepareGeneric()
|
||||||
filter("kind:*Lib")
|
filter("kind:*Lib")
|
||||||
pic("On")
|
pic("On")
|
||||||
|
|
||||||
filter({"kind:*Lib", "configurations:DebugStatic"})
|
filter({"kind:StaticLib", "configurations:Debug*"})
|
||||||
targetsuffix("-s-d")
|
targetsuffix("-s-d")
|
||||||
|
|
||||||
filter({"kind:*Lib", "configurations:ReleaseStatic"})
|
filter({"kind:StaticLib", "configurations:Release*"})
|
||||||
targetsuffix("-s")
|
targetsuffix("-s")
|
||||||
|
|
||||||
filter({"kind:*Lib", "configurations:DebugDynamic"})
|
filter({"kind:SharedLib", "configurations:Debug*"})
|
||||||
targetsuffix("-d")
|
targetsuffix("-d")
|
||||||
|
|
||||||
filter("configurations:*Debug*")
|
filter("configurations:*Debug*")
|
||||||
|
|
@ -840,6 +842,11 @@ end
|
||||||
function NazaraBuild:PrepareMainWorkspace()
|
function NazaraBuild:PrepareMainWorkspace()
|
||||||
self:PrepareGeneric()
|
self:PrepareGeneric()
|
||||||
|
|
||||||
|
language("C++")
|
||||||
|
|
||||||
|
-- Add lib/conf/arch to library search path
|
||||||
|
self:FilterLibDirectory("../lib/", libdirs)
|
||||||
|
|
||||||
filter("action:vs*")
|
filter("action:vs*")
|
||||||
buildoptions({"/MP", "/bigobj"}) -- Multiprocessus build and big .obj
|
buildoptions({"/MP", "/bigobj"}) -- Multiprocessus build and big .obj
|
||||||
defines("_CRT_SECURE_NO_WARNINGS")
|
defines("_CRT_SECURE_NO_WARNINGS")
|
||||||
|
|
@ -927,6 +934,8 @@ function NazaraBuild:RegisterExample(exampleTable)
|
||||||
exampleTable.Files = files
|
exampleTable.Files = files
|
||||||
|
|
||||||
exampleTable.Type = "Example"
|
exampleTable.Type = "Example"
|
||||||
|
exampleTable.Category = exampleTable.Category or exampleTable.Type
|
||||||
|
|
||||||
self.Examples[lowerCaseName] = exampleTable
|
self.Examples[lowerCaseName] = exampleTable
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
@ -950,6 +959,8 @@ function NazaraBuild:RegisterExternLibrary(libTable)
|
||||||
end
|
end
|
||||||
|
|
||||||
libTable.Type = "ExternLib"
|
libTable.Type = "ExternLib"
|
||||||
|
libTable.Category = libTable.Category or libTable.Type
|
||||||
|
|
||||||
self.ExtLibs[lowerCaseName] = libTable
|
self.ExtLibs[lowerCaseName] = libTable
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
@ -976,6 +987,8 @@ function NazaraBuild:RegisterModule(moduleTable)
|
||||||
end
|
end
|
||||||
|
|
||||||
moduleTable.Type = "Module"
|
moduleTable.Type = "Module"
|
||||||
|
moduleTable.Category = moduleTable.Category or moduleTable.Type
|
||||||
|
|
||||||
self.Modules[lowerCaseName] = moduleTable
|
self.Modules[lowerCaseName] = moduleTable
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
@ -1006,10 +1019,13 @@ function NazaraBuild:RegisterTool(toolTable)
|
||||||
end
|
end
|
||||||
|
|
||||||
toolTable.Type = "Tool"
|
toolTable.Type = "Tool"
|
||||||
|
toolTable.Category = toolTable.Category or toolTable.Type
|
||||||
|
|
||||||
self.Tools[lowerCaseName] = toolTable
|
self.Tools[lowerCaseName] = toolTable
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local globalExcludes = {}
|
||||||
function NazaraBuild:Resolve(infoTable)
|
function NazaraBuild:Resolve(infoTable)
|
||||||
if (infoTable.ClientOnly and self.Config["ServerMode"]) then
|
if (infoTable.ClientOnly and self.Config["ServerMode"]) then
|
||||||
infoTable.Excluded = true
|
infoTable.Excluded = true
|
||||||
|
|
@ -1017,15 +1033,28 @@ function NazaraBuild:Resolve(infoTable)
|
||||||
end
|
end
|
||||||
|
|
||||||
if (infoTable.Excludable) then
|
if (infoTable.Excludable) then
|
||||||
local optionName = "excludes-" .. string.lower(infoTable.Type .. "-" .. infoTable.Name)
|
local globalExcludeOption = "excludes-" .. infoTable.Category:lower() .. "s"
|
||||||
|
if (not globalExcludes[infoTable.Category]) then
|
||||||
|
newoption({
|
||||||
|
trigger = globalExcludeOption,
|
||||||
|
description = "Excludes all " .. string.lower(infoTable.Category) .. "s and projects relying on it"
|
||||||
|
})
|
||||||
|
|
||||||
|
globalExcludes[infoTable.Category] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
local specificExcludeOption = "excludes-" .. string.lower(infoTable.Category .. "-" .. infoTable.Name)
|
||||||
newoption({
|
newoption({
|
||||||
trigger = optionName,
|
trigger = specificExcludeOption,
|
||||||
description = "Excludes the " .. infoTable.Name .. " " .. string.lower(infoTable.Type) .. " and projects relying on it"
|
description = "Excludes the " .. infoTable.Name .. " " .. string.lower(infoTable.Category) .. " and projects relying on it"
|
||||||
})
|
})
|
||||||
|
|
||||||
if (_OPTIONS[optionName]) then
|
if (_OPTIONS[globalExcludeOption]) then
|
||||||
infoTable.Excluded = true
|
infoTable.Excluded = true
|
||||||
infoTable.ExcludeReason = "excluded by command-line options"
|
infoTable.ExcludeReason = "excluded by global command-line options"
|
||||||
|
elseif (_OPTIONS[specificExcludeOption]) then
|
||||||
|
infoTable.Excluded = true
|
||||||
|
infoTable.ExcludeReason = "excluded by specific command-line options"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -1069,10 +1098,10 @@ function NazaraBuild:SetupExtlibTable(infoTable)
|
||||||
|
|
||||||
infoTable.Kind = "library"
|
infoTable.Kind = "library"
|
||||||
|
|
||||||
table.insert(infoTable.BinaryPaths.x86, "../extlibs/lib/common/x86")
|
table.insert(infoTable.BinaryPaths.x86, "../thirdparty/lib/common/x86")
|
||||||
table.insert(infoTable.BinaryPaths.x64, "../extlibs/lib/common/x64")
|
table.insert(infoTable.BinaryPaths.x64, "../thirdparty/lib/common/x64")
|
||||||
table.insert(infoTable.LibraryPaths.x86, "../extlibs/lib/common/x86")
|
table.insert(infoTable.LibraryPaths.x86, "../thirdparty/lib/common/x86")
|
||||||
table.insert(infoTable.LibraryPaths.x64, "../extlibs/lib/common/x64")
|
table.insert(infoTable.LibraryPaths.x64, "../thirdparty/lib/common/x64")
|
||||||
end
|
end
|
||||||
|
|
||||||
function NazaraBuild:SetupModuleTable(infoTable)
|
function NazaraBuild:SetupModuleTable(infoTable)
|
||||||
|
|
@ -1080,10 +1109,10 @@ function NazaraBuild:SetupModuleTable(infoTable)
|
||||||
|
|
||||||
infoTable.Kind = "library"
|
infoTable.Kind = "library"
|
||||||
|
|
||||||
table.insert(infoTable.BinaryPaths.x86, "../extlibs/lib/common/x86")
|
table.insert(infoTable.BinaryPaths.x86, "../thirdparty/lib/common/x86")
|
||||||
table.insert(infoTable.BinaryPaths.x64, "../extlibs/lib/common/x64")
|
table.insert(infoTable.BinaryPaths.x64, "../thirdparty/lib/common/x64")
|
||||||
table.insert(infoTable.LibraryPaths.x86, "../extlibs/lib/common/x86")
|
table.insert(infoTable.LibraryPaths.x86, "../thirdparty/lib/common/x86")
|
||||||
table.insert(infoTable.LibraryPaths.x64, "../extlibs/lib/common/x64")
|
table.insert(infoTable.LibraryPaths.x64, "../thirdparty/lib/common/x64")
|
||||||
end
|
end
|
||||||
|
|
||||||
NazaraBuild.SetupToolTable = NazaraBuild.SetupInfoTable
|
NazaraBuild.SetupToolTable = NazaraBuild.SetupInfoTable
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
MODULE.Name = "Physics2D"
|
MODULE.Name = "Physics2D"
|
||||||
|
|
||||||
|
MODULE.Defines = {"CP_USE_CGTYPES=0", "TARGET_OS_IPHONE=0", "TARGET_OS_MAC=0"}
|
||||||
|
|
||||||
MODULE.Libraries = {
|
MODULE.Libraries = {
|
||||||
"NazaraCore",
|
"NazaraCore",
|
||||||
"chipmunk-s"
|
"chipmunk"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ TOOL.Directory = "../plugins/Assimp"
|
||||||
TOOL.Kind = "Plugin"
|
TOOL.Kind = "Plugin"
|
||||||
|
|
||||||
TOOL.Includes = {
|
TOOL.Includes = {
|
||||||
"../extlibs/include",
|
"../thirdparty/include",
|
||||||
"../include",
|
"../include",
|
||||||
"../plugins/Assimp"
|
"../plugins/Assimp"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,5 +27,8 @@ TOOL.Libraries = function()
|
||||||
table.insert(libraries, "Nazara" .. v.Name)
|
table.insert(libraries, "Nazara" .. v.Name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Keep libraries in the same order to prevent useless premake regeneration
|
||||||
|
table.sort(libraries)
|
||||||
|
|
||||||
return libraries
|
return libraries
|
||||||
end
|
end
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
TOOL.Name = "UnitTests"
|
TOOL.Name = "UnitTests"
|
||||||
|
|
||||||
|
TOOL.Category = "Test"
|
||||||
TOOL.Directory = "../tests"
|
TOOL.Directory = "../tests"
|
||||||
TOOL.EnableConsole = true
|
TOOL.EnableConsole = true
|
||||||
TOOL.Kind = "Application"
|
TOOL.Kind = "Application"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
TOOL.Name = "UnitTestsServer"
|
TOOL.Name = "UnitTestsServer"
|
||||||
|
|
||||||
|
TOOL.Category = "Test"
|
||||||
TOOL.Directory = "../tests"
|
TOOL.Directory = "../tests"
|
||||||
TOOL.EnableConsole = true
|
TOOL.EnableConsole = true
|
||||||
TOOL.Kind = "Application"
|
TOOL.Kind = "Application"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2017 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Engine - Core module"
|
// This file is part of the "Nazara Engine - Core module"
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
|
|
@ -11,13 +11,15 @@
|
||||||
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
|
||||||
|
// with MSVC, using alloca with a size of zero returns a valid pointer
|
||||||
#define NAZARA_ALLOCA(size) _alloca(size)
|
#define NAZARA_ALLOCA(size) _alloca(size)
|
||||||
#define NAZARA_ALLOCA_SUPPORT
|
#define NAZARA_ALLOCA_SUPPORT
|
||||||
|
|
||||||
#elif defined(NAZARA_COMPILER_CLANG) || defined(NAZARA_COMPILER_GCC) || defined(NAZARA_COMPILER_INTEL)
|
#elif defined(NAZARA_COMPILER_CLANG) || defined(NAZARA_COMPILER_GCC) || defined(NAZARA_COMPILER_INTEL)
|
||||||
#include <alloca.h>
|
#include <alloca.h>
|
||||||
|
|
||||||
#define NAZARA_ALLOCA(size) alloca(size)
|
// with Clang/GCC, using alloca with a size of zero does nothing good
|
||||||
|
#define NAZARA_ALLOCA(size) alloca(((size) > 0) ? (size) : 1)
|
||||||
#define NAZARA_ALLOCA_SUPPORT
|
#define NAZARA_ALLOCA_SUPPORT
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2017 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Engine - Core module"
|
// This file is part of the "Nazara Engine - Core module"
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
|
|
@ -70,11 +70,14 @@ namespace Nz
|
||||||
* \brief Calls the object destructor explicitly
|
* \brief Calls the object destructor explicitly
|
||||||
*
|
*
|
||||||
* \param ptr Pointer to a previously constructed pointer on raw memory
|
* \param ptr Pointer to a previously constructed pointer on raw memory
|
||||||
|
*
|
||||||
|
* \remark This does not deallocate memory, and is a no-op on a null pointer
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void PlacementDestroy(T* ptr)
|
void PlacementDestroy(T* ptr)
|
||||||
{
|
{
|
||||||
ptr->~T();
|
if (ptr)
|
||||||
|
ptr->~T();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace Nz
|
||||||
template<typename T>
|
template<typename T>
|
||||||
SparsePtr<T>::SparsePtr(VoidPtr ptr, std::size_t stride)
|
SparsePtr<T>::SparsePtr(VoidPtr ptr, std::size_t stride)
|
||||||
{
|
{
|
||||||
assert(stride <= std::numeric_limits<int>::max());
|
assert(stride <= static_cast<unsigned int>(std::numeric_limits<int>::max()));
|
||||||
Reset(ptr, static_cast<int>(stride));
|
Reset(ptr, static_cast<int>(stride));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@ namespace Nz
|
||||||
bool ToDouble(double* value) const;
|
bool ToDouble(double* value) const;
|
||||||
bool ToInteger(long long* value, UInt8 radix = 10) const;
|
bool ToInteger(long long* value, UInt8 radix = 10) const;
|
||||||
String ToLower(UInt32 flags = None) const;
|
String ToLower(UInt32 flags = None) const;
|
||||||
|
std::string ToStdString() const;
|
||||||
String ToUpper(UInt32 flags = None) const;
|
String ToUpper(UInt32 flags = None) const;
|
||||||
|
|
||||||
String& Trim(UInt32 flags = None);
|
String& Trim(UInt32 flags = None);
|
||||||
|
|
@ -193,8 +194,6 @@ namespace Nz
|
||||||
typedef char value_type;
|
typedef char value_type;
|
||||||
// Méthodes STD
|
// Méthodes STD
|
||||||
|
|
||||||
operator std::string() const;
|
|
||||||
|
|
||||||
char& operator[](std::size_t pos);
|
char& operator[](std::size_t pos);
|
||||||
char operator[](std::size_t pos) const;
|
char operator[](std::size_t pos) const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ namespace Nz
|
||||||
NAZARA_CORE_API friend std::ostream& operator<<(std::ostream& o, const Id& id);
|
NAZARA_CORE_API friend std::ostream& operator<<(std::ostream& o, const Id& id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Id(ThreadImpl* thread);
|
explicit Id(ThreadImpl* thread);
|
||||||
|
|
||||||
ThreadImpl* m_id = nullptr;
|
ThreadImpl* m_id = nullptr;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -214,6 +214,8 @@ namespace Nz
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void CullingList<T>::NotifyMovement(CullTest type, std::size_t index, void* oldPtr, void* newPtr)
|
void CullingList<T>::NotifyMovement(CullTest type, std::size_t index, void* oldPtr, void* newPtr)
|
||||||
{
|
{
|
||||||
|
NazaraUnused(oldPtr);
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case CullTest::NoTest:
|
case CullTest::NoTest:
|
||||||
|
|
|
||||||
|
|
@ -69,15 +69,15 @@ namespace Nz
|
||||||
template<typename U, bool HasDestructor>
|
template<typename U, bool HasDestructor>
|
||||||
friend struct LuaClassImplFinalizerSetupProxy;
|
friend struct LuaClassImplFinalizerSetupProxy;
|
||||||
|
|
||||||
void PushClassInfo(LuaState& state);
|
int PushClassInfo(LuaState& state);
|
||||||
void SetupConstructor(LuaState& state);
|
void SetupConstructor(LuaState& state, int classInfoRef);
|
||||||
void SetupDefaultToString(LuaState& state);
|
void SetupDefaultToString(LuaState& state, int classInfoRef);
|
||||||
void SetupFinalizer(LuaState& state);
|
void SetupFinalizer(LuaState& state, int classInfoRef);
|
||||||
void SetupGetter(LuaState& state, LuaCFunction proxy);
|
void SetupGetter(LuaState& state, LuaCFunction proxy, int classInfoRef);
|
||||||
void SetupGlobalTable(LuaState& state);
|
void SetupGlobalTable(LuaState& state, int classInfoRef);
|
||||||
void SetupMetatable(LuaState& state);
|
void SetupMetatable(LuaState& state, int classInfoRef);
|
||||||
void SetupMethod(LuaState& state, LuaCFunction proxy, const String& name, std::size_t methodIndex);
|
void SetupMethod(LuaState& state, LuaCFunction proxy, const String& name, std::size_t methodIndex, int classInfoRef);
|
||||||
void SetupSetter(LuaState& state, LuaCFunction proxy);
|
void SetupSetter(LuaState& state, LuaCFunction proxy, int classInfoRef);
|
||||||
|
|
||||||
using ParentFunc = std::function<void(LuaState& state, T* instance)>;
|
using ParentFunc = std::function<void(LuaState& state, T* instance)>;
|
||||||
using InstanceGetter = std::function<T*(LuaState& state)>;
|
using InstanceGetter = std::function<T*(LuaState& state)>;
|
||||||
|
|
|
||||||
|
|
@ -80,15 +80,15 @@ namespace Nz
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::Register(LuaState& state)
|
void LuaClass<T>::Register(LuaState& state)
|
||||||
{
|
{
|
||||||
PushClassInfo(state);
|
int classInfoRef = PushClassInfo(state);
|
||||||
|
|
||||||
// Let's create the metatable which will be associated with every state.
|
// Let's create the metatable which will be associated with every state.
|
||||||
SetupMetatable(state);
|
SetupMetatable(state, classInfoRef);
|
||||||
|
|
||||||
if (m_info->constructor || m_info->staticGetter || m_info->staticSetter || !m_staticMethods.empty())
|
if (m_info->constructor || m_info->staticGetter || m_info->staticSetter || !m_staticMethods.empty())
|
||||||
SetupGlobalTable(state);
|
SetupGlobalTable(state, classInfoRef);
|
||||||
|
|
||||||
state.Pop(); // Pop our ClassInfo, which is now referenced by all our functions
|
state.DestroyReference(classInfoRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
@ -216,7 +216,7 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::PushClassInfo(LuaState& state)
|
int LuaClass<T>::PushClassInfo(LuaState& state)
|
||||||
{
|
{
|
||||||
// Our ClassInfo has to outlive the LuaClass, because we don't want to force the user to keep the LuaClass alive
|
// Our ClassInfo has to outlive the LuaClass, because we don't want to force the user to keep the LuaClass alive
|
||||||
// To do that, each Registration creates a tiny shared_ptr wrapper whose life is directly managed by Lua.
|
// To do that, each Registration creates a tiny shared_ptr wrapper whose life is directly managed by Lua.
|
||||||
|
|
@ -231,20 +231,22 @@ namespace Nz
|
||||||
state.PushCFunction(InfoDestructor, 1);
|
state.PushCFunction(InfoDestructor, 1);
|
||||||
state.SetField("__gc");
|
state.SetField("__gc");
|
||||||
state.SetMetatable(-2);
|
state.SetMetatable(-2);
|
||||||
|
|
||||||
|
return state.CreateReference();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::SetupConstructor(LuaState& state)
|
void LuaClass<T>::SetupConstructor(LuaState& state, int classInfoRef)
|
||||||
{
|
{
|
||||||
state.PushValue(1); // ClassInfo
|
state.PushReference(classInfoRef);
|
||||||
state.PushCFunction(ConstructorProxy, 1);
|
state.PushCFunction(ConstructorProxy, 1);
|
||||||
state.SetField("__call"); // ClassMeta.__call = ConstructorProxy
|
state.SetField("__call"); // ClassMeta.__call = ConstructorProxy
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::SetupDefaultToString(LuaState& state)
|
void LuaClass<T>::SetupDefaultToString(LuaState& state, int classInfoRef)
|
||||||
{
|
{
|
||||||
state.PushValue(1); // shared_ptr on UserData
|
state.PushReference(classInfoRef);
|
||||||
state.PushCFunction(ToStringProxy, 1);
|
state.PushCFunction(ToStringProxy, 1);
|
||||||
state.SetField("__tostring");
|
state.SetField("__tostring");
|
||||||
}
|
}
|
||||||
|
|
@ -255,9 +257,9 @@ namespace Nz
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct LuaClassImplFinalizerSetupProxy<T, true>
|
struct LuaClassImplFinalizerSetupProxy<T, true>
|
||||||
{
|
{
|
||||||
static void Setup(LuaState& state)
|
static void Setup(LuaState& state, int classInfoRef)
|
||||||
{
|
{
|
||||||
state.PushValue(1); // ClassInfo
|
state.PushReference(classInfoRef);
|
||||||
state.PushCFunction(LuaClass<T>::FinalizerProxy, 1);
|
state.PushCFunction(LuaClass<T>::FinalizerProxy, 1);
|
||||||
state.SetField("__gc");
|
state.SetField("__gc");
|
||||||
}
|
}
|
||||||
|
|
@ -266,21 +268,21 @@ namespace Nz
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct LuaClassImplFinalizerSetupProxy<T, false>
|
struct LuaClassImplFinalizerSetupProxy<T, false>
|
||||||
{
|
{
|
||||||
static void Setup(LuaState&)
|
static void Setup(LuaState&, int)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::SetupFinalizer(LuaState& state)
|
void LuaClass<T>::SetupFinalizer(LuaState& state, int classInfoRef)
|
||||||
{
|
{
|
||||||
LuaClassImplFinalizerSetupProxy<T, std::is_destructible<T>::value>::Setup(state);
|
LuaClassImplFinalizerSetupProxy<T, std::is_destructible<T>::value>::Setup(state, classInfoRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::SetupGetter(LuaState& state, LuaCFunction proxy)
|
void LuaClass<T>::SetupGetter(LuaState& state, LuaCFunction proxy, int classInfoRef)
|
||||||
{
|
{
|
||||||
state.PushValue(1); // ClassInfo
|
state.PushReference(classInfoRef);
|
||||||
state.PushValue(-2); // Metatable
|
state.PushValue(-2); // Metatable
|
||||||
state.PushCFunction(proxy, 2);
|
state.PushCFunction(proxy, 2);
|
||||||
|
|
||||||
|
|
@ -288,7 +290,7 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::SetupGlobalTable(LuaState& state)
|
void LuaClass<T>::SetupGlobalTable(LuaState& state, int classInfoRef)
|
||||||
{
|
{
|
||||||
// Create the global table
|
// Create the global table
|
||||||
state.PushTable(); // Class = {}
|
state.PushTable(); // Class = {}
|
||||||
|
|
@ -297,10 +299,10 @@ namespace Nz
|
||||||
state.PushTable(); // ClassMeta = {}
|
state.PushTable(); // ClassMeta = {}
|
||||||
|
|
||||||
if (m_info->constructor)
|
if (m_info->constructor)
|
||||||
SetupConstructor(state);
|
SetupConstructor(state, classInfoRef);
|
||||||
|
|
||||||
if (m_info->staticGetter)
|
if (m_info->staticGetter)
|
||||||
SetupGetter(state, StaticGetterProxy);
|
SetupGetter(state, StaticGetterProxy, classInfoRef);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Optimize by assigning the metatable instead of a search function
|
// Optimize by assigning the metatable instead of a search function
|
||||||
|
|
@ -309,7 +311,7 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_info->staticSetter)
|
if (m_info->staticSetter)
|
||||||
SetupSetter(state, StaticSetterProxy);
|
SetupSetter(state, StaticSetterProxy, classInfoRef);
|
||||||
|
|
||||||
m_info->staticMethods.reserve(m_staticMethods.size());
|
m_info->staticMethods.reserve(m_staticMethods.size());
|
||||||
for (auto& pair : m_staticMethods)
|
for (auto& pair : m_staticMethods)
|
||||||
|
|
@ -317,7 +319,7 @@ namespace Nz
|
||||||
std::size_t methodIndex = m_info->staticMethods.size();
|
std::size_t methodIndex = m_info->staticMethods.size();
|
||||||
m_info->staticMethods.push_back(pair.second);
|
m_info->staticMethods.push_back(pair.second);
|
||||||
|
|
||||||
SetupMethod(state, StaticMethodProxy, pair.first, methodIndex);
|
SetupMethod(state, StaticMethodProxy, pair.first, methodIndex, classInfoRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
state.SetMetatable(-2); // setmetatable(Class, ClassMeta), pops ClassMeta
|
state.SetMetatable(-2); // setmetatable(Class, ClassMeta), pops ClassMeta
|
||||||
|
|
@ -329,15 +331,15 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::SetupMetatable(LuaState& state)
|
void LuaClass<T>::SetupMetatable(LuaState& state, int classInfoRef)
|
||||||
{
|
{
|
||||||
if (!state.NewMetatable(m_info->name))
|
if (!state.NewMetatable(m_info->name))
|
||||||
NazaraWarning("Class \"" + m_info->name + "\" already registred in this instance");
|
NazaraWarning("Class \"" + m_info->name + "\" already registred in this instance");
|
||||||
{
|
{
|
||||||
SetupFinalizer(state);
|
SetupFinalizer(state, classInfoRef);
|
||||||
|
|
||||||
if (m_info->getter || !m_info->parentGetters.empty())
|
if (m_info->getter || !m_info->parentGetters.empty())
|
||||||
SetupGetter(state, GetterProxy);
|
SetupGetter(state, GetterProxy, classInfoRef);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Optimize by assigning the metatable instead of a search function
|
// Optimize by assigning the metatable instead of a search function
|
||||||
|
|
@ -347,11 +349,11 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_info->setter)
|
if (m_info->setter)
|
||||||
SetupSetter(state, SetterProxy);
|
SetupSetter(state, SetterProxy, classInfoRef);
|
||||||
|
|
||||||
// In case a __tostring method is missing, add a default implementation returning the class name
|
// In case a __tostring method is missing, add a default implementation returning the class name
|
||||||
if (m_methods.find("__tostring") == m_methods.end())
|
if (m_methods.find("__tostring") == m_methods.end())
|
||||||
SetupDefaultToString(state);
|
SetupDefaultToString(state, classInfoRef);
|
||||||
|
|
||||||
m_info->methods.reserve(m_methods.size());
|
m_info->methods.reserve(m_methods.size());
|
||||||
for (auto& pair : m_methods)
|
for (auto& pair : m_methods)
|
||||||
|
|
@ -359,16 +361,16 @@ namespace Nz
|
||||||
std::size_t methodIndex = m_info->methods.size();
|
std::size_t methodIndex = m_info->methods.size();
|
||||||
m_info->methods.push_back(pair.second);
|
m_info->methods.push_back(pair.second);
|
||||||
|
|
||||||
SetupMethod(state, MethodProxy, pair.first, methodIndex);
|
SetupMethod(state, MethodProxy, pair.first, methodIndex, classInfoRef);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
state.Pop(); //< Pops the metatable, it won't be collected before it's referenced by the Lua registry.
|
state.Pop(); //< Pops the metatable, it won't be collected before it's referenced by the Lua registry.
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::SetupMethod(LuaState& state, LuaCFunction proxy, const String& name, std::size_t methodIndex)
|
void LuaClass<T>::SetupMethod(LuaState& state, LuaCFunction proxy, const String& name, std::size_t methodIndex, int classInfoRef)
|
||||||
{
|
{
|
||||||
state.PushValue(1); // ClassInfo
|
state.PushReference(classInfoRef);
|
||||||
state.PushInteger(methodIndex);
|
state.PushInteger(methodIndex);
|
||||||
state.PushCFunction(proxy, 2);
|
state.PushCFunction(proxy, 2);
|
||||||
|
|
||||||
|
|
@ -376,9 +378,9 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void LuaClass<T>::SetupSetter(LuaState& state, LuaCFunction proxy)
|
void LuaClass<T>::SetupSetter(LuaState& state, LuaCFunction proxy, int classInfoRef)
|
||||||
{
|
{
|
||||||
state.PushValue(1); // ClassInfo
|
state.PushReference(classInfoRef);
|
||||||
state.PushCFunction(proxy, 1);
|
state.PushCFunction(proxy, 1);
|
||||||
|
|
||||||
state.SetField("__newindex"); // Setter
|
state.SetField("__newindex"); // Setter
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ namespace Nz
|
||||||
public:
|
public:
|
||||||
LuaInstance();
|
LuaInstance();
|
||||||
LuaInstance(const LuaInstance&) = delete;
|
LuaInstance(const LuaInstance&) = delete;
|
||||||
LuaInstance(LuaInstance&& instance) = default;
|
LuaInstance(LuaInstance&& instance);
|
||||||
~LuaInstance();
|
~LuaInstance();
|
||||||
|
|
||||||
inline std::size_t GetMemoryLimit() const;
|
inline std::size_t GetMemoryLimit() const;
|
||||||
|
|
@ -33,7 +33,7 @@ namespace Nz
|
||||||
inline void SetTimeLimit(UInt32 limit);
|
inline void SetTimeLimit(UInt32 limit);
|
||||||
|
|
||||||
LuaInstance& operator=(const LuaInstance&) = delete;
|
LuaInstance& operator=(const LuaInstance&) = delete;
|
||||||
LuaInstance& operator=(LuaInstance&& instance) = default;
|
LuaInstance& operator=(LuaInstance&& instance);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline void SetMemoryUsage(std::size_t memoryUsage);
|
inline void SetMemoryUsage(std::size_t memoryUsage);
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,11 @@ namespace Nz
|
||||||
{
|
{
|
||||||
m_timeLimit = limit;
|
m_timeLimit = limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void LuaInstance::SetMemoryUsage(std::size_t memoryUsage)
|
||||||
|
{
|
||||||
|
m_memoryUsage = memoryUsage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/Lua/DebugOff.hpp>
|
#include <Nazara/Lua/DebugOff.hpp>
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
#define NAZARA_LUASTATE_HPP
|
#define NAZARA_LUASTATE_HPP
|
||||||
|
|
||||||
#include <Nazara/Prerequesites.hpp>
|
#include <Nazara/Prerequesites.hpp>
|
||||||
|
#include <Nazara/Core/MovablePtr.hpp>
|
||||||
#include <Nazara/Core/String.hpp>
|
#include <Nazara/Core/String.hpp>
|
||||||
#include <Nazara/Lua/Config.hpp>
|
#include <Nazara/Lua/Config.hpp>
|
||||||
#include <Nazara/Lua/Enums.hpp>
|
#include <Nazara/Lua/Enums.hpp>
|
||||||
|
|
@ -32,7 +33,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LuaState(const LuaState&) = default;
|
LuaState(const LuaState&) = default;
|
||||||
inline LuaState(LuaState&& instance) noexcept;
|
LuaState(LuaState&& instance) = default;
|
||||||
~LuaState() = default;
|
~LuaState() = default;
|
||||||
|
|
||||||
void ArgCheck(bool condition, unsigned int argNum, const char* error) const;
|
void ArgCheck(bool condition, unsigned int argNum, const char* error) const;
|
||||||
|
|
@ -173,7 +174,7 @@ namespace Nz
|
||||||
void* ToUserdata(int index, const String& tname) const;
|
void* ToUserdata(int index, const String& tname) const;
|
||||||
|
|
||||||
LuaState& operator=(const LuaState&) = default;
|
LuaState& operator=(const LuaState&) = default;
|
||||||
inline LuaState& operator=(LuaState&& instance) noexcept;
|
LuaState& operator=(LuaState&& instance) = default;
|
||||||
|
|
||||||
static int GetIndexOfUpValue(int upValue);
|
static int GetIndexOfUpValue(int upValue);
|
||||||
static LuaInstance& GetInstance(lua_State* internalState);
|
static LuaInstance& GetInstance(lua_State* internalState);
|
||||||
|
|
@ -188,8 +189,8 @@ namespace Nz
|
||||||
|
|
||||||
static int ProxyFunc(lua_State* internalState);
|
static int ProxyFunc(lua_State* internalState);
|
||||||
|
|
||||||
|
MovablePtr<lua_State> m_state;
|
||||||
String m_lastError;
|
String m_lastError;
|
||||||
lua_State* m_state;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,13 +19,6 @@ namespace Nz
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
inline LuaState::LuaState(LuaState&& state) noexcept :
|
|
||||||
m_lastError(state.m_lastError),
|
|
||||||
m_state(state.m_state)
|
|
||||||
{
|
|
||||||
state.m_state = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline lua_State* LuaState::GetInternalState() const
|
inline lua_State* LuaState::GetInternalState() const
|
||||||
{
|
{
|
||||||
return m_state;
|
return m_state;
|
||||||
|
|
@ -776,16 +769,6 @@ namespace Nz
|
||||||
SetMetatable(tname);
|
SetMetatable(tname);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline LuaState& LuaState::operator=(LuaState&& state) noexcept
|
|
||||||
{
|
|
||||||
m_lastError = std::move(state.m_lastError);
|
|
||||||
m_state = state.m_state;
|
|
||||||
|
|
||||||
state.m_state = nullptr;
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
std::enable_if_t<std::is_signed<T>::value, T> LuaState::CheckBounds(int index, long long value) const
|
std::enable_if_t<std::is_signed<T>::value, T> LuaState::CheckBounds(int index, long long value) const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
static_assert(sizeof(T) % sizeof(UInt32) == 0, "Assertion failed");
|
static_assert(sizeof(T) % sizeof(UInt32) == 0, "Assertion failed");
|
||||||
|
|
||||||
// The algorithm for logarithm in base 2 only works with numbers greather than 32 bits
|
// The algorithm for logarithm in base 2 only works with numbers greater than 32 bits
|
||||||
// This code subdivides the biggest number into 32 bits ones
|
// This code subdivides the biggest number into 32 bits ones
|
||||||
for (int i = sizeof(T)-sizeof(UInt32); i >= 0; i -= sizeof(UInt32))
|
for (int i = sizeof(T)-sizeof(UInt32); i >= 0; i -= sizeof(UInt32))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -238,7 +238,7 @@ namespace Nz
|
||||||
String error("Column out of range: (" + String::Number(column) + ") > 3");
|
String error("Column out of range: (" + String::Number(column) + ") > 3");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::out_of_range(error);
|
throw std::out_of_range(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -632,7 +632,7 @@ namespace Nz
|
||||||
String error("Row out of range: (" + String::Number(row) + ") > 3");
|
String error("Row out of range: (" + String::Number(row) + ") > 3");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::out_of_range(error);
|
throw std::out_of_range(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -1347,7 +1347,7 @@ namespace Nz
|
||||||
String error("Index out of range: (" + String::Number(x) + ", " + String::Number(y) +") > (3, 3)");
|
String error("Index out of range: (" + String::Number(x) + ", " + String::Number(y) +") > (3, 3)");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::out_of_range(error);
|
throw std::out_of_range(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -1371,7 +1371,7 @@ namespace Nz
|
||||||
String error("Index out of range: (" + String::Number(x) + ", " + String::Number(y) +") > (3, 3)");
|
String error("Index out of range: (" + String::Number(x) + ", " + String::Number(y) +") > (3, 3)");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::out_of_range(error);
|
throw std::out_of_range(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -304,7 +304,7 @@ namespace Nz
|
||||||
ss << "Index out of range: (" << i << " >= " << BoxCorner_Max << ")";
|
ss << "Index out of range: (" << i << " >= " << BoxCorner_Max << ")";
|
||||||
|
|
||||||
NazaraError(ss);
|
NazaraError(ss);
|
||||||
throw std::out_of_range(ss.ToString());
|
throw std::out_of_range(ss.ToString().ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -329,7 +329,7 @@ namespace Nz
|
||||||
ss << "Index out of range: (" << i << " >= " << BoxCorner_Max << ")";
|
ss << "Index out of range: (" << i << " >= " << BoxCorner_Max << ")";
|
||||||
|
|
||||||
NazaraError(ss);
|
NazaraError(ss);
|
||||||
throw std::out_of_range(ss.ToString());
|
throw std::out_of_range(ss.ToString().ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -579,7 +579,7 @@ namespace Nz
|
||||||
String error("Planes are parallel");
|
String error("Planes are parallel");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -607,7 +607,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -633,7 +633,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -723,7 +723,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -752,7 +752,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -1050,7 +1050,7 @@ Nz::Vector2<T> operator/(T scale, const Nz::Vector2<T>& vec)
|
||||||
Nz::String error("Division by zero");
|
Nz::String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -726,7 +726,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -751,7 +751,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -839,7 +839,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
x /= vec.x;
|
x /= vec.x;
|
||||||
|
|
@ -866,7 +866,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
x /= scale;
|
x /= scale;
|
||||||
|
|
@ -1340,7 +1340,7 @@ Nz::Vector3<T> operator/(T scale, const Nz::Vector3<T>& vec)
|
||||||
Nz::String error("Division by zero");
|
Nz::String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -637,7 +637,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -663,7 +663,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -761,7 +761,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -792,7 +792,7 @@ namespace Nz
|
||||||
String error("Division by zero");
|
String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -1113,7 +1113,7 @@ Nz::Vector4<T> operator/(T scale, const Nz::Vector4<T>& vec)
|
||||||
Nz::String error("Division by zero");
|
Nz::String error("Division by zero");
|
||||||
|
|
||||||
NazaraError(error);
|
NazaraError(error);
|
||||||
throw std::domain_error(error);
|
throw std::domain_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2017 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Engine - Network module"
|
// This file is part of the "Nazara Engine - Network module"
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
|
|
@ -8,6 +8,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
inline ENetPeer::ENetPeer(ENetHost* host, UInt16 peerId) :
|
inline ENetPeer::ENetPeer(ENetHost* host, UInt16 peerId) :
|
||||||
m_host(host),
|
m_host(host),
|
||||||
|
m_state(ENetPeerState::Disconnected),
|
||||||
m_incomingSessionID(0xFF),
|
m_incomingSessionID(0xFF),
|
||||||
m_outgoingSessionID(0xFF),
|
m_outgoingSessionID(0xFF),
|
||||||
m_incomingPeerID(peerId),
|
m_incomingPeerID(peerId),
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,13 @@ struct cpConstraint;
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
class NAZARA_PHYSICS2D_API Constraint2D
|
class Constraint2D;
|
||||||
|
|
||||||
|
using Constraint2DConstRef = ObjectRef<const Constraint2D>;
|
||||||
|
using Constraint2DLibrary = ObjectLibrary<Constraint2D>;
|
||||||
|
using Constraint2DRef = ObjectRef<Constraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API Constraint2D : public RefCounted
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Constraint2D(const Constraint2D&) = delete;
|
Constraint2D(const Constraint2D&) = delete;
|
||||||
|
|
@ -47,16 +53,24 @@ namespace Nz
|
||||||
Constraint2D& operator=(Constraint2D&& rhs);
|
Constraint2D& operator=(Constraint2D&& rhs);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Constraint2D(PhysWorld2D& world, cpConstraint* constraint);
|
Constraint2D(Nz::PhysWorld2D* world, cpConstraint* constraint);
|
||||||
|
|
||||||
MovablePtr<cpConstraint> m_constraint;
|
MovablePtr<cpConstraint> m_constraint;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static Constraint2DLibrary s_library;
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API DampedSpring2D : public Constraint2D
|
class DampedSpringConstraint2D;
|
||||||
|
|
||||||
|
using DampedSpringConstraint2DConstRef = ObjectRef<const DampedSpringConstraint2D>;
|
||||||
|
using DampedSpringConstraint2DRef = ObjectRef<DampedSpringConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API DampedSpringConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DampedSpring2D(PhysWorld2D& world, RigidBody2D& first, const Vector2f& firstAnchor, RigidBody2D& second, const Vector2f& secondAnchor, float restLength, float stiffness, float damping);
|
DampedSpringConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& firstAnchor, const Vector2f& secondAnchor, float restLength, float stiffness, float damping);
|
||||||
~DampedSpring2D() = default;
|
~DampedSpringConstraint2D() = default;
|
||||||
|
|
||||||
float GetDamping() const;
|
float GetDamping() const;
|
||||||
Vector2f GetFirstAnchor() const;
|
Vector2f GetFirstAnchor() const;
|
||||||
|
|
@ -69,13 +83,20 @@ namespace Nz
|
||||||
void SetRestLength(float newLength);
|
void SetRestLength(float newLength);
|
||||||
void SetSecondAnchor(const Vector2f& firstAnchor);
|
void SetSecondAnchor(const Vector2f& firstAnchor);
|
||||||
void SetStiffness(float newStiffness);
|
void SetStiffness(float newStiffness);
|
||||||
|
|
||||||
|
template<typename... Args> static DampedSpringConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API DampedRotarySpring2D : public Constraint2D
|
class DampedRotarySpringConstraint2D;
|
||||||
|
|
||||||
|
using DampedRotarySpringConstraint2DConstRef = ObjectRef<const DampedRotarySpringConstraint2D>;
|
||||||
|
using DampedRotarySpringConstraint2DRef = ObjectRef<DampedRotarySpringConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API DampedRotarySpringConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DampedRotarySpring2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float restAngle, float stiffness, float damping);
|
DampedRotarySpringConstraint2D(RigidBody2D& first, RigidBody2D& second, float restAngle, float stiffness, float damping);
|
||||||
~DampedRotarySpring2D() = default;
|
~DampedRotarySpringConstraint2D() = default;
|
||||||
|
|
||||||
float GetDamping() const;
|
float GetDamping() const;
|
||||||
float GetRestAngle() const;
|
float GetRestAngle() const;
|
||||||
|
|
@ -84,36 +105,57 @@ namespace Nz
|
||||||
void SetDamping(float newDamping);
|
void SetDamping(float newDamping);
|
||||||
void SetRestAngle(float newAngle);
|
void SetRestAngle(float newAngle);
|
||||||
void SetStiffness(float newStiffness);
|
void SetStiffness(float newStiffness);
|
||||||
|
|
||||||
|
template<typename... Args> static DampedRotarySpringConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API GearJoint2D : public Constraint2D
|
class GearConstraint2D;
|
||||||
|
|
||||||
|
using GearConstraint2DConstRef = ObjectRef<const GearConstraint2D>;
|
||||||
|
using GearConstraint2DRef = ObjectRef<GearConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API GearConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GearJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float phase, float ratio);
|
GearConstraint2D(RigidBody2D& first, RigidBody2D& second, float phase, float ratio);
|
||||||
~GearJoint2D() = default;
|
~GearConstraint2D() = default;
|
||||||
|
|
||||||
float GetPhase() const;
|
float GetPhase() const;
|
||||||
float GetRatio() const;
|
float GetRatio() const;
|
||||||
|
|
||||||
void SetPhase(float phase);
|
void SetPhase(float phase);
|
||||||
void SetRatio(float ratio);
|
void SetRatio(float ratio);
|
||||||
|
|
||||||
|
template<typename... Args> static GearConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API MotorJoint2D : public Constraint2D
|
class MotorConstraint2D;
|
||||||
|
|
||||||
|
using MotorConstraint2DConstRef = ObjectRef<const MotorConstraint2D>;
|
||||||
|
using MotorConstraint2DRef = ObjectRef<MotorConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API MotorConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MotorJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float rate);
|
MotorConstraint2D(RigidBody2D& first, RigidBody2D& second, float rate);
|
||||||
~MotorJoint2D() = default;
|
~MotorConstraint2D() = default;
|
||||||
|
|
||||||
float GetRate() const;
|
float GetRate() const;
|
||||||
void SetRate(float rate);
|
void SetRate(float rate);
|
||||||
|
|
||||||
|
template<typename... Args> static MotorConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API PinJoint2D : public Constraint2D
|
class PinConstraint2D;
|
||||||
|
|
||||||
|
using PinConstraint2DConstRef = ObjectRef<const PinConstraint2D>;
|
||||||
|
using PinConstraint2DRef = ObjectRef<PinConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API PinConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PinJoint2D(PhysWorld2D& world, RigidBody2D& first, const Vector2f& firstAnchor, RigidBody2D& second, const Vector2f& secondAnchor);
|
PinConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& firstAnchor, const Vector2f& secondAnchor);
|
||||||
~PinJoint2D() = default;
|
~PinConstraint2D() = default;
|
||||||
|
|
||||||
float GetDistance() const;
|
float GetDistance() const;
|
||||||
Vector2f GetFirstAnchor() const;
|
Vector2f GetFirstAnchor() const;
|
||||||
|
|
@ -122,27 +164,41 @@ namespace Nz
|
||||||
void SetDistance(float newDistance);
|
void SetDistance(float newDistance);
|
||||||
void SetFirstAnchor(const Vector2f& firstAnchor);
|
void SetFirstAnchor(const Vector2f& firstAnchor);
|
||||||
void SetSecondAnchor(const Vector2f& firstAnchor);
|
void SetSecondAnchor(const Vector2f& firstAnchor);
|
||||||
|
|
||||||
|
template<typename... Args> static PinConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API PivotJoint2D : public Constraint2D
|
class PivotConstraint2D;
|
||||||
|
|
||||||
|
using PivotConstraint2DConstRef = ObjectRef<const PivotConstraint2D>;
|
||||||
|
using PivotConstraint2DRef = ObjectRef<PivotConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API PivotConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PivotJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, const Vector2f& anchor);
|
PivotConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& anchor);
|
||||||
PivotJoint2D(PhysWorld2D& world, RigidBody2D& first, const Vector2f& firstAnchor, RigidBody2D& second, const Vector2f& secondAnchor);
|
PivotConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& firstAnchor, const Vector2f& secondAnchor);
|
||||||
~PivotJoint2D() = default;
|
~PivotConstraint2D() = default;
|
||||||
|
|
||||||
Vector2f GetFirstAnchor() const;
|
Vector2f GetFirstAnchor() const;
|
||||||
Vector2f GetSecondAnchor() const;
|
Vector2f GetSecondAnchor() const;
|
||||||
|
|
||||||
void SetFirstAnchor(const Vector2f& firstAnchor);
|
void SetFirstAnchor(const Vector2f& firstAnchor);
|
||||||
void SetSecondAnchor(const Vector2f& firstAnchor);
|
void SetSecondAnchor(const Vector2f& firstAnchor);
|
||||||
|
|
||||||
|
template<typename... Args> static PivotConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API RatchetJoint2D : public Constraint2D
|
class RatchetConstraint2D;
|
||||||
|
|
||||||
|
using RatchetConstraint2DConstRef = ObjectRef<const RatchetConstraint2D>;
|
||||||
|
using RatchetConstraint2DRef = ObjectRef<RatchetConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API RatchetConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RatchetJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float phase, float ratchet);
|
RatchetConstraint2D(RigidBody2D& first, RigidBody2D& second, float phase, float ratchet);
|
||||||
~RatchetJoint2D() = default;
|
~RatchetConstraint2D() = default;
|
||||||
|
|
||||||
float GetAngle() const;
|
float GetAngle() const;
|
||||||
float GetPhase() const;
|
float GetPhase() const;
|
||||||
|
|
@ -151,26 +207,40 @@ namespace Nz
|
||||||
void SetAngle(float angle);
|
void SetAngle(float angle);
|
||||||
void SetPhase(float phase);
|
void SetPhase(float phase);
|
||||||
void SetRatchet(float ratchet);
|
void SetRatchet(float ratchet);
|
||||||
|
|
||||||
|
template<typename... Args> static RatchetConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API RotaryLimitJoint2D : public Constraint2D
|
class RotaryLimitConstraint2D;
|
||||||
|
|
||||||
|
using RotaryLimitConstraint2DConstRef = ObjectRef<const RotaryLimitConstraint2D>;
|
||||||
|
using RotaryLimitConstraint2DRef = ObjectRef<RotaryLimitConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API RotaryLimitConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RotaryLimitJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float minAngle, float maxAngle);
|
RotaryLimitConstraint2D(RigidBody2D& first, RigidBody2D& second, float minAngle, float maxAngle);
|
||||||
~RotaryLimitJoint2D() = default;
|
~RotaryLimitConstraint2D() = default;
|
||||||
|
|
||||||
float GetMaxAngle() const;
|
float GetMaxAngle() const;
|
||||||
float GetMinAngle() const;
|
float GetMinAngle() const;
|
||||||
|
|
||||||
void SetMaxAngle(float maxAngle);
|
void SetMaxAngle(float maxAngle);
|
||||||
void SetMinAngle(float minAngle);
|
void SetMinAngle(float minAngle);
|
||||||
|
|
||||||
|
template<typename... Args> static RotaryLimitConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_PHYSICS2D_API SlideJoint2D : public Constraint2D
|
class SlideConstraint2D;
|
||||||
|
|
||||||
|
using SlideConstraint2DConstRef = ObjectRef<const SlideConstraint2D>;
|
||||||
|
using SlideConstraint2DRef = ObjectRef<SlideConstraint2D>;
|
||||||
|
|
||||||
|
class NAZARA_PHYSICS2D_API SlideConstraint2D : public Constraint2D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SlideJoint2D(PhysWorld2D& world, RigidBody2D& first, const Vector2f& firstAnchor, RigidBody2D& second, const Vector2f& secondAnchor, float min, float max);
|
SlideConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& firstAnchor, const Vector2f& secondAnchor, float min, float max);
|
||||||
~SlideJoint2D() = default;
|
~SlideConstraint2D() = default;
|
||||||
|
|
||||||
Vector2f GetFirstAnchor() const;
|
Vector2f GetFirstAnchor() const;
|
||||||
float GetMaxDistance() const;
|
float GetMaxDistance() const;
|
||||||
|
|
@ -181,6 +251,8 @@ namespace Nz
|
||||||
void SetMaxDistance(float newMaxDistance);
|
void SetMaxDistance(float newMaxDistance);
|
||||||
void SetMinDistance(float newMinDistance);
|
void SetMinDistance(float newMinDistance);
|
||||||
void SetSecondAnchor(const Vector2f& firstAnchor);
|
void SetSecondAnchor(const Vector2f& firstAnchor);
|
||||||
|
|
||||||
|
template<typename... Args> static SlideConstraint2DRef New(Args&&... args);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,86 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
|
template<typename... Args>
|
||||||
|
DampedSpringConstraint2DRef DampedSpringConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<DampedSpringConstraint2D> object(new DampedSpringConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
DampedRotarySpringConstraint2DRef DampedRotarySpringConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<DampedRotarySpringConstraint2D> object(new DampedRotarySpringConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
GearConstraint2DRef GearConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<GearConstraint2D> object(new GearConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
MotorConstraint2DRef MotorConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<MotorConstraint2D> object(new MotorConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
PinConstraint2DRef PinConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<PinConstraint2D> object(new PinConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
PivotConstraint2DRef PivotConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<PivotConstraint2D> object(new PivotConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
RatchetConstraint2DRef RatchetConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<RatchetConstraint2D> object(new RatchetConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
RotaryLimitConstraint2DRef RotaryLimitConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<RotaryLimitConstraint2D> object(new RotaryLimitConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
SlideConstraint2DRef SlideConstraint2D::New(Args&&... args)
|
||||||
|
{
|
||||||
|
std::unique_ptr<SlideConstraint2D> object(new SlideConstraint2D(std::forward<Args>(args)...));
|
||||||
|
object->SetPersistent(false);
|
||||||
|
|
||||||
|
return object.release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/Physics2D/DebugOff.hpp>
|
#include <Nazara/Physics2D/DebugOff.hpp>
|
||||||
|
|
|
||||||
|
|
@ -74,10 +74,11 @@ namespace Nz
|
||||||
static constexpr std::size_t InvalidShapeIndex = std::numeric_limits<std::size_t>::max();
|
static constexpr std::size_t InvalidShapeIndex = std::numeric_limits<std::size_t>::max();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void CopyBodyData(cpBody* body);
|
|
||||||
cpBody* Create(float mass = 1.f, float moment = 1.f);
|
cpBody* Create(float mass = 1.f, float moment = 1.f);
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
|
static void CopyBodyData(cpBody* from, cpBody* to);
|
||||||
|
|
||||||
std::vector<cpShape*> m_shapes;
|
std::vector<cpShape*> m_shapes;
|
||||||
Collider2DRef m_geom;
|
Collider2DRef m_geom;
|
||||||
cpBody* m_handle;
|
cpBody* m_handle;
|
||||||
|
|
|
||||||
|
|
@ -35,32 +35,38 @@ namespace Nz
|
||||||
void AddTorque(const Vector3f& torque, CoordSys coordSys = CoordSys_Global);
|
void AddTorque(const Vector3f& torque, CoordSys coordSys = CoordSys_Global);
|
||||||
|
|
||||||
void EnableAutoSleep(bool autoSleep);
|
void EnableAutoSleep(bool autoSleep);
|
||||||
|
void EnableSimulation(bool simulation);
|
||||||
|
|
||||||
Boxf GetAABB() const;
|
Boxf GetAABB() const;
|
||||||
|
Vector3f GetAngularDamping() const;
|
||||||
Vector3f GetAngularVelocity() const;
|
Vector3f GetAngularVelocity() const;
|
||||||
const Collider3DRef& GetGeom() const;
|
const Collider3DRef& GetGeom() const;
|
||||||
float GetGravityFactor() const;
|
float GetGravityFactor() const;
|
||||||
NewtonBody* GetHandle() const;
|
NewtonBody* GetHandle() const;
|
||||||
|
float GetLinearDamping() const;
|
||||||
|
Vector3f GetLinearVelocity() const;
|
||||||
float GetMass() const;
|
float GetMass() const;
|
||||||
Vector3f GetMassCenter(CoordSys coordSys = CoordSys_Local) const;
|
Vector3f GetMassCenter(CoordSys coordSys = CoordSys_Local) const;
|
||||||
const Matrix4f& GetMatrix() const;
|
const Matrix4f& GetMatrix() const;
|
||||||
Vector3f GetPosition() const;
|
Vector3f GetPosition() const;
|
||||||
Quaternionf GetRotation() const;
|
Quaternionf GetRotation() const;
|
||||||
Vector3f GetVelocity() const;
|
|
||||||
PhysWorld3D* GetWorld() const;
|
PhysWorld3D* GetWorld() const;
|
||||||
|
|
||||||
bool IsAutoSleepEnabled() const;
|
bool IsAutoSleepEnabled() const;
|
||||||
bool IsMoveable() const;
|
bool IsMoveable() const;
|
||||||
|
bool IsSimulationEnabled() const;
|
||||||
bool IsSleeping() const;
|
bool IsSleeping() const;
|
||||||
|
|
||||||
|
void SetAngularDamping(const Nz::Vector3f& angularDamping);
|
||||||
void SetAngularVelocity(const Vector3f& angularVelocity);
|
void SetAngularVelocity(const Vector3f& angularVelocity);
|
||||||
void SetGeom(Collider3DRef geom);
|
void SetGeom(Collider3DRef geom);
|
||||||
void SetGravityFactor(float gravityFactor);
|
void SetGravityFactor(float gravityFactor);
|
||||||
|
void SetLinearDamping(float damping);
|
||||||
|
void SetLinearVelocity(const Vector3f& velocity);
|
||||||
void SetMass(float mass);
|
void SetMass(float mass);
|
||||||
void SetMassCenter(const Vector3f& center);
|
void SetMassCenter(const Vector3f& center);
|
||||||
void SetPosition(const Vector3f& position);
|
void SetPosition(const Vector3f& position);
|
||||||
void SetRotation(const Quaternionf& rotation);
|
void SetRotation(const Quaternionf& rotation);
|
||||||
void SetVelocity(const Vector3f& velocity);
|
|
||||||
|
|
||||||
RigidBody3D& operator=(const RigidBody3D& object);
|
RigidBody3D& operator=(const RigidBody3D& object);
|
||||||
RigidBody3D& operator=(RigidBody3D&& object);
|
RigidBody3D& operator=(RigidBody3D&& object);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
Platform | Build Status | Nightlies
|
Platform | Build Status | Nightlies
|
||||||
------------ | ------------- | -------------
|
------------ | ------------- | -------------
|
||||||
Windows | [](https://ci.appveyor.com/project/DPSLynix/nazaraengine/branch/master) | MSVC14: [x86](https://ci.appveyor.com/api/projects/DPSLynix/NazaraEngine/artifacts/package%2FNazaraEngine.7z?branch=master&job=Environment%3A%20TOOLSET%3Dvs2015%3B%20Configuration%3A%20ReleaseDynamic%3B%20Platform%3A%20Win32) [x86_64](https://ci.appveyor.com/api/projects/DPSLynix/NazaraEngine/artifacts/package%2FNazaraEngine.7z?branch=master&job=Environment%3A%20TOOLSET%3Dvs2015%3B%20Configuration%3A%20ReleaseDynamic%3B%20Platform%3A%20x64)
|
Windows | [](https://ci.appveyor.com/project/DrLynix/nazaraengine/branch/master) | MSVC14: [x86](https://ci.appveyor.com/api/projects/DrLynix/NazaraEngine/artifacts/package%2FNazaraEngine.7z?branch=master&job=Environment%3A%20TOOLSET%3Dvs2015%3B%20Configuration%3A%20ReleaseDynamic%3B%20Platform%3A%20Win32) [x86_64](https://ci.appveyor.com/api/projects/DrLynix/NazaraEngine/artifacts/package%2FNazaraEngine.7z?branch=master&job=Environment%3A%20TOOLSET%3Dvs2015%3B%20Configuration%3A%20ReleaseDynamic%3B%20Platform%3A%20x64)
|
||||||
Linux | [](https://travis-ci.org/DigitalPulseSoftware/NazaraEngine) | No
|
Linux | [](https://travis-ci.org/DigitalPulseSoftware/NazaraEngine) | No
|
||||||
|
|
||||||
# Nazara Engine
|
# Nazara Engine
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
Platforme | Build Status | Nightlies
|
Platforme | Build Status | Nightlies
|
||||||
------------ | ------------- | -------------
|
------------ | ------------- | -------------
|
||||||
Windows | [](https://ci.appveyor.com/project/DPSLynix/nazaraengine/branch/master) | MSVC14: [x86](https://ci.appveyor.com/api/projects/DPSLynix/NazaraEngine/artifacts/package%2FNazaraEngine.7z?branch=master&job=Environment%3A%20TOOLSET%3Dvs2015%3B%20Configuration%3A%20ReleaseDynamic%3B%20Platform%3A%20Win32) [x86_64](https://ci.appveyor.com/api/projects/DPSLynix/NazaraEngine/artifacts/package%2FNazaraEngine.7z?branch=master&job=Environment%3A%20TOOLSET%3Dvs2015%3B%20Configuration%3A%20ReleaseDynamic%3B%20Platform%3A%20x64)
|
Windows | [](https://ci.appveyor.com/project/DrLynix/nazaraengine/branch/master) | MSVC14: [x86](https://ci.appveyor.com/api/projects/DrLynix/NazaraEngine/artifacts/package%2FNazaraEngine.7z?branch=master&job=Environment%3A%20TOOLSET%3Dvs2015%3B%20Configuration%3A%20ReleaseDynamic%3B%20Platform%3A%20Win32) [x86_64](https://ci.appveyor.com/api/projects/DrLynix/NazaraEngine/artifacts/package%2FNazaraEngine.7z?branch=master&job=Environment%3A%20TOOLSET%3Dvs2015%3B%20Configuration%3A%20ReleaseDynamic%3B%20Platform%3A%20x64)
|
||||||
Linux | [](https://travis-ci.org/DigitalPulseSoftware/NazaraEngine) | Non
|
Linux | [](https://travis-ci.org/DigitalPulseSoftware/NazaraEngine) | Non
|
||||||
|
|
||||||
# Nazara Engine
|
# Nazara Engine
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ namespace Nz
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
//FIXME: MinGW seems to dislike thread_local shared_ptr.. (using a std::string is a working hackfix)
|
//FIXME: MinGW seems to dislike thread_local shared_ptr.. (using a std::string is a working hackfix)
|
||||||
thread_local std::string currentPath(DirectoryImpl::GetCurrent());
|
thread_local std::string currentPath(DirectoryImpl::GetCurrent().ToStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -395,7 +395,7 @@ namespace Nz
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#ifdef NAZARA_PLATFORM_WINDOWS
|
#ifdef NAZARA_PLATFORM_WINDOWS
|
||||||
// Unlike to disk (Ex: "C:"), the netwrok path is not considered as a directory (Ex: "\\Laptop")
|
// Unlike to disk (Ex: "C:"), the network path is not considered as a directory (Ex: "\\Laptop")
|
||||||
if (path.Match("\\\\*"))
|
if (path.Match("\\\\*"))
|
||||||
{
|
{
|
||||||
foundPos = path.Find('\\', 2);
|
foundPos = path.Find('\\', 2);
|
||||||
|
|
@ -414,11 +414,14 @@ namespace Nz
|
||||||
if (p.EndsWith(NAZARA_DIRECTORY_SEPARATOR))
|
if (p.EndsWith(NAZARA_DIRECTORY_SEPARATOR))
|
||||||
p = p.SubString(0, -2);
|
p = p.SubString(0, -2);
|
||||||
|
|
||||||
if (!DirectoryImpl::Exists(p) && !DirectoryImpl::Create(p))
|
if (!p.IsEmpty())
|
||||||
return false;
|
{
|
||||||
|
if (!DirectoryImpl::Exists(p) && !DirectoryImpl::Create(p))
|
||||||
|
return false;
|
||||||
|
|
||||||
if (foundPos == String::npos)
|
if (foundPos == String::npos)
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
foundPos = path.Find(NAZARA_DIRECTORY_SEPARATOR, foundPos + 1);
|
foundPos = path.Find(NAZARA_DIRECTORY_SEPARATOR, foundPos + 1);
|
||||||
}
|
}
|
||||||
|
|
@ -523,7 +526,7 @@ namespace Nz
|
||||||
String path = File::AbsolutePath(dirPath);
|
String path = File::AbsolutePath(dirPath);
|
||||||
if (DirectoryImpl::Exists(path))
|
if (DirectoryImpl::Exists(path))
|
||||||
{
|
{
|
||||||
currentPath = path;
|
currentPath = path.ToStdString();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ namespace Nz
|
||||||
|
|
||||||
if (type == ErrorType_AssertFailed || (type != ErrorType_Warning &&
|
if (type == ErrorType_AssertFailed || (type != ErrorType_Warning &&
|
||||||
(s_flags & ErrorFlag_ThrowException) != 0 && (s_flags & ErrorFlag_ThrowExceptionDisabled) == 0))
|
(s_flags & ErrorFlag_ThrowException) != 0 && (s_flags & ErrorFlag_ThrowExceptionDisabled) == 0))
|
||||||
throw std::runtime_error(error);
|
throw std::runtime_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -183,7 +183,7 @@ namespace Nz
|
||||||
|
|
||||||
if (type == ErrorType_AssertFailed || (type != ErrorType_Warning &&
|
if (type == ErrorType_AssertFailed || (type != ErrorType_Warning &&
|
||||||
(s_flags & ErrorFlag_ThrowException) != 0 && (s_flags & ErrorFlag_ThrowExceptionDisabled) == 0))
|
(s_flags & ErrorFlag_ThrowException) != 0 && (s_flags & ErrorFlag_ThrowExceptionDisabled) == 0))
|
||||||
throw std::runtime_error(error);
|
throw std::runtime_error(error.ToStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt32 Error::s_flags = ErrorFlag_None;
|
UInt32 Error::s_flags = ErrorFlag_None;
|
||||||
|
|
|
||||||
|
|
@ -130,15 +130,19 @@ namespace Nz
|
||||||
|
|
||||||
std::size_t MemoryStream::WriteBlock(const void* buffer, std::size_t size)
|
std::size_t MemoryStream::WriteBlock(const void* buffer, std::size_t size)
|
||||||
{
|
{
|
||||||
std::size_t endPos = static_cast<std::size_t>(m_pos + size);
|
if (size > 0)
|
||||||
if (endPos > m_buffer->GetSize())
|
{
|
||||||
m_buffer->Resize(endPos);
|
std::size_t endPos = static_cast<std::size_t>(m_pos + size);
|
||||||
|
if (endPos > m_buffer->GetSize())
|
||||||
|
m_buffer->Resize(endPos);
|
||||||
|
|
||||||
NazaraAssert(buffer, "Invalid buffer");
|
NazaraAssert(buffer, "Invalid buffer");
|
||||||
|
|
||||||
std::memcpy(m_buffer->GetBuffer() + m_pos, buffer, size);
|
std::memcpy(m_buffer->GetBuffer() + m_pos, buffer, size);
|
||||||
|
|
||||||
|
m_pos = endPos;
|
||||||
|
}
|
||||||
|
|
||||||
m_pos = endPos;
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ namespace Nz
|
||||||
|
|
||||||
bool DirectoryImpl::Create(const String& dirPath)
|
bool DirectoryImpl::Create(const String& dirPath)
|
||||||
{
|
{
|
||||||
mode_t permissions = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; // TODO: check permissions, no right to execute but read and write for every others.
|
mode_t permissions = S_IRWXU | S_IRWXG | S_IRWXO; // 777
|
||||||
return mkdir(dirPath.GetConstBuffer(), permissions) != -1;
|
return mkdir(dirPath.GetConstBuffer(), permissions) != -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,11 @@ namespace Nz
|
||||||
flags |= O_TRUNC;
|
flags |= O_TRUNC;
|
||||||
|
|
||||||
m_fileDescriptor = open64(filePath.GetConstBuffer(), flags, permissions);
|
m_fileDescriptor = open64(filePath.GetConstBuffer(), flags, permissions);
|
||||||
|
if (m_fileDescriptor == -1)
|
||||||
|
{
|
||||||
|
NazaraError("Failed to open \"" + filePath + "\" : " + Error::GetLastSystemError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static struct flock lock;
|
static struct flock lock;
|
||||||
|
|
||||||
|
|
@ -116,7 +121,7 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_fileDescriptor != -1;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t FileImpl::Read(void* buffer, std::size_t size)
|
std::size_t FileImpl::Read(void* buffer, std::size_t size)
|
||||||
|
|
|
||||||
|
|
@ -4197,13 +4197,21 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Converts the string to std::string
|
||||||
|
* \return std::string representation
|
||||||
|
*/
|
||||||
|
std::string String::ToStdString() const
|
||||||
|
{
|
||||||
|
return std::string(m_sharedString->string.get(), m_sharedString->size);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Converts the string to upper
|
* \brief Converts the string to upper
|
||||||
* \return Upper string
|
* \return Upper string
|
||||||
*
|
*
|
||||||
* \param flags Flag for the look up
|
* \param flags Flag for the look up
|
||||||
*/
|
*/
|
||||||
|
|
||||||
String String::ToUpper(UInt32 flags) const
|
String String::ToUpper(UInt32 flags) const
|
||||||
{
|
{
|
||||||
if (m_sharedString->size == 0)
|
if (m_sharedString->size == 0)
|
||||||
|
|
@ -4481,16 +4489,6 @@ namespace Nz
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Converts the string to std::string
|
|
||||||
* \return std::string representation
|
|
||||||
*/
|
|
||||||
|
|
||||||
String::operator std::string() const
|
|
||||||
{
|
|
||||||
return std::string(m_sharedString->string.get(), m_sharedString->size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the ith character in the string
|
* \brief Gets the ith character in the string
|
||||||
* \return A reference to the character
|
* \return A reference to the character
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include <Nazara/Core/Error.hpp>
|
#include <Nazara/Core/Error.hpp>
|
||||||
#include <Nazara/Core/HardwareInfo.hpp>
|
#include <Nazara/Core/HardwareInfo.hpp>
|
||||||
#include <Nazara/Core/MovablePtr.hpp>
|
#include <Nazara/Core/MovablePtr.hpp>
|
||||||
|
#include <ostream>
|
||||||
|
|
||||||
#if defined(NAZARA_PLATFORM_WINDOWS)
|
#if defined(NAZARA_PLATFORM_WINDOWS)
|
||||||
#include <Nazara/Core/Win32/ThreadImpl.hpp>
|
#include <Nazara/Core/Win32/ThreadImpl.hpp>
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include <Nazara/Graphics/AbstractViewer.hpp>
|
#include <Nazara/Graphics/AbstractViewer.hpp>
|
||||||
#include <Nazara/Renderer/Renderer.hpp>
|
#include <Nazara/Renderer/Renderer.hpp>
|
||||||
#include <Nazara/Renderer/RenderStates.hpp>
|
#include <Nazara/Renderer/RenderStates.hpp>
|
||||||
|
#include <Nazara/Renderer/RenderTarget.hpp>
|
||||||
#include <Nazara/Renderer/Shader.hpp>
|
#include <Nazara/Renderer/Shader.hpp>
|
||||||
#include <Nazara/Utility/IndexBuffer.hpp>
|
#include <Nazara/Utility/IndexBuffer.hpp>
|
||||||
#include <Nazara/Utility/VertexBuffer.hpp>
|
#include <Nazara/Utility/VertexBuffer.hpp>
|
||||||
|
|
@ -52,6 +53,11 @@ namespace Nz
|
||||||
|
|
||||||
void SkyboxBackground::Draw(const AbstractViewer* viewer) const
|
void SkyboxBackground::Draw(const AbstractViewer* viewer) const
|
||||||
{
|
{
|
||||||
|
const Nz::RenderTarget* target = viewer->GetTarget();
|
||||||
|
Nz::Vector2ui targetSize = target->GetSize();
|
||||||
|
|
||||||
|
Matrix4f projectionMatrix = Nz::Matrix4f::Perspective(45.f, float(targetSize.x) / targetSize.y, viewer->GetZNear(), viewer->GetZFar());
|
||||||
|
|
||||||
Matrix4f skyboxMatrix(viewer->GetViewMatrix());
|
Matrix4f skyboxMatrix(viewer->GetViewMatrix());
|
||||||
skyboxMatrix.SetTranslation(Vector3f::Zero());
|
skyboxMatrix.SetTranslation(Vector3f::Zero());
|
||||||
|
|
||||||
|
|
@ -71,6 +77,7 @@ namespace Nz
|
||||||
world.SetTranslation(offset);
|
world.SetTranslation(offset);
|
||||||
|
|
||||||
Renderer::SetIndexBuffer(s_indexBuffer);
|
Renderer::SetIndexBuffer(s_indexBuffer);
|
||||||
|
Renderer::SetMatrix(MatrixType_Projection, projectionMatrix);
|
||||||
Renderer::SetMatrix(MatrixType_View, skyboxMatrix);
|
Renderer::SetMatrix(MatrixType_View, skyboxMatrix);
|
||||||
Renderer::SetMatrix(MatrixType_World, world);
|
Renderer::SetMatrix(MatrixType_World, world);
|
||||||
Renderer::SetRenderStates(s_renderStates);
|
Renderer::SetRenderStates(s_renderStates);
|
||||||
|
|
@ -81,6 +88,7 @@ namespace Nz
|
||||||
|
|
||||||
Renderer::DrawIndexedPrimitives(PrimitiveMode_TriangleList, 0, 36);
|
Renderer::DrawIndexedPrimitives(PrimitiveMode_TriangleList, 0, 36);
|
||||||
|
|
||||||
|
Renderer::SetMatrix(MatrixType_Projection, viewer->GetProjectionMatrix());
|
||||||
Renderer::SetMatrix(MatrixType_View, viewer->GetViewMatrix());
|
Renderer::SetMatrix(MatrixType_View, viewer->GetViewMatrix());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
String lastError(lua_tostring(internalState, -1));
|
String lastError(lua_tostring(internalState, -1));
|
||||||
|
|
||||||
throw std::runtime_error("Lua panic: " + lastError);
|
throw std::runtime_error("Lua panic: " + lastError.ToStdString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -38,15 +38,45 @@ namespace Nz
|
||||||
luaL_openlibs(m_state);
|
luaL_openlibs(m_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LuaInstance::LuaInstance(LuaInstance&& instance) :
|
||||||
|
LuaState(std::move(instance))
|
||||||
|
{
|
||||||
|
std::swap(m_memoryLimit, instance.m_memoryLimit);
|
||||||
|
std::swap(m_memoryUsage, instance.m_memoryUsage);
|
||||||
|
std::swap(m_timeLimit, instance.m_timeLimit);
|
||||||
|
std::swap(m_clock, instance.m_clock);
|
||||||
|
std::swap(m_level, instance.m_level);
|
||||||
|
|
||||||
|
if (m_state)
|
||||||
|
lua_setallocf(m_state, MemoryAllocator, this);
|
||||||
|
|
||||||
|
if (instance.m_state)
|
||||||
|
lua_setallocf(instance.m_state, MemoryAllocator, &instance);
|
||||||
|
}
|
||||||
|
|
||||||
LuaInstance::~LuaInstance()
|
LuaInstance::~LuaInstance()
|
||||||
{
|
{
|
||||||
if (m_state)
|
if (m_state)
|
||||||
lua_close(m_state);
|
lua_close(m_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void LuaInstance::SetMemoryUsage(std::size_t memoryUsage)
|
LuaInstance& LuaInstance::operator=(LuaInstance&& instance)
|
||||||
{
|
{
|
||||||
m_memoryUsage = memoryUsage;
|
LuaState::operator=(std::move(instance));
|
||||||
|
|
||||||
|
std::swap(m_memoryLimit, instance.m_memoryLimit);
|
||||||
|
std::swap(m_memoryUsage, instance.m_memoryUsage);
|
||||||
|
std::swap(m_timeLimit, instance.m_timeLimit);
|
||||||
|
std::swap(m_clock, instance.m_clock);
|
||||||
|
std::swap(m_level, instance.m_level);
|
||||||
|
|
||||||
|
if (m_state)
|
||||||
|
lua_setallocf(m_state, MemoryAllocator, this);
|
||||||
|
|
||||||
|
if (instance.m_state)
|
||||||
|
lua_setallocf(instance.m_state, MemoryAllocator, &instance);
|
||||||
|
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* LuaInstance::MemoryAllocator(void* ud, void* ptr, std::size_t osize, std::size_t nsize)
|
void* LuaInstance::MemoryAllocator(void* ud, void* ptr, std::size_t osize, std::size_t nsize)
|
||||||
|
|
|
||||||
|
|
@ -894,6 +894,8 @@ namespace Nz
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++currentCommand;
|
||||||
|
|
||||||
if (channel && outgoingCommand->sendAttempts < 1)
|
if (channel && outgoingCommand->sendAttempts < 1)
|
||||||
{
|
{
|
||||||
channel->usedReliableWindows |= 1 << reliableWindow;
|
channel->usedReliableWindows |= 1 << reliableWindow;
|
||||||
|
|
@ -912,8 +914,8 @@ namespace Nz
|
||||||
peer->m_nextTimeout = m_serviceTime + outgoingCommand->roundTripTimeout;
|
peer->m_nextTimeout = m_serviceTime + outgoingCommand->roundTripTimeout;
|
||||||
|
|
||||||
peer->m_sentReliableCommands.emplace_back(std::move(*outgoingCommand));
|
peer->m_sentReliableCommands.emplace_back(std::move(*outgoingCommand));
|
||||||
currentCommand = peer->m_outgoingReliableCommands.erase(outgoingCommand);
|
|
||||||
|
|
||||||
|
peer->m_outgoingReliableCommands.erase(outgoingCommand);
|
||||||
outgoingCommand = peer->m_sentReliableCommands.end();
|
outgoingCommand = peer->m_sentReliableCommands.end();
|
||||||
--outgoingCommand;
|
--outgoingCommand;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -621,7 +621,7 @@ namespace Nz
|
||||||
UInt32 totalLength = NetToHost(command->sendFragment.totalLength);
|
UInt32 totalLength = NetToHost(command->sendFragment.totalLength);
|
||||||
|
|
||||||
if (fragmentCount > ENetConstants::ENetProtocol_MaximumFragmentCount || fragmentNumber >= fragmentCount || totalLength > m_host->m_maximumPacketSize ||
|
if (fragmentCount > ENetConstants::ENetProtocol_MaximumFragmentCount || fragmentNumber >= fragmentCount || totalLength > m_host->m_maximumPacketSize ||
|
||||||
fragmentOffset >= totalLength || fragmentLength > totalLength - fragmentOffset)
|
fragmentOffset >= totalLength || fragmentLength > totalLength - fragmentOffset)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ENetPeer::IncomingCommmand* startCommand = nullptr;
|
ENetPeer::IncomingCommmand* startCommand = nullptr;
|
||||||
|
|
@ -643,7 +643,7 @@ namespace Nz
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((incomingCommand.command.header.command & ENetProtocolCommand_Mask) != ENetProtocolCommand_SendFragment ||
|
if ((incomingCommand.command.header.command & ENetProtocolCommand_Mask) != ENetProtocolCommand_SendFragment ||
|
||||||
totalLength != incomingCommand.packet->data.GetDataSize() || fragmentCount != incomingCommand.fragments.GetSize())
|
totalLength != incomingCommand.packet->data.GetDataSize() || fragmentCount != incomingCommand.fragments.GetSize())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
startCommand = &incomingCommand;
|
startCommand = &incomingCommand;
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,8 @@ namespace Nz
|
||||||
NazaraAssert(!IsRegistered(socket), "Socket is already registered");
|
NazaraAssert(!IsRegistered(socket), "Socket is already registered");
|
||||||
|
|
||||||
epoll_event entry;
|
epoll_event entry;
|
||||||
entry.events = 0;
|
std::memset(&entry, 0, sizeof(epoll_event));
|
||||||
|
|
||||||
entry.data.fd = socket;
|
entry.data.fd = socket;
|
||||||
|
|
||||||
if (eventFlags & SocketPollEvent_Read)
|
if (eventFlags & SocketPollEvent_Read)
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ namespace Nz
|
||||||
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
socklen_t bufferLength = sizeof(sockaddr_in);
|
socklen_t bufferLength = sizeof(sockaddr_in);
|
||||||
|
|
||||||
SocketHandle newClient = accept(handle, reinterpret_cast<sockaddr*>(&nameBuffer), &bufferLength);
|
SocketHandle newClient = accept(handle, reinterpret_cast<sockaddr*>(&nameBuffer), &bufferLength);
|
||||||
|
|
@ -150,7 +152,7 @@ namespace Nz
|
||||||
tv.tv_sec = static_cast<long>(msTimeout / 1000ULL);
|
tv.tv_sec = static_cast<long>(msTimeout / 1000ULL);
|
||||||
tv.tv_usec = static_cast<long>((msTimeout % 1000ULL) * 1000ULL);
|
tv.tv_usec = static_cast<long>((msTimeout % 1000ULL) * 1000ULL);
|
||||||
|
|
||||||
int ret = select(0, nullptr, &localSet, &localSet, (msTimeout > 0) ? &tv : nullptr);
|
int ret = select(handle + 1, nullptr, &localSet, &localSet, (msTimeout > 0) ? &tv : nullptr);
|
||||||
if (ret == SOCKET_ERROR)
|
if (ret == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
int code = GetLastErrorCode(handle, error);
|
int code = GetLastErrorCode(handle, error);
|
||||||
|
|
@ -376,7 +378,9 @@ namespace Nz
|
||||||
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
socklen_t bufferLength = sizeof(sockaddr_in);
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
|
socklen_t bufferLength = sizeof(nameBuffer.size());
|
||||||
|
|
||||||
if (getpeername(handle, reinterpret_cast<sockaddr*>(nameBuffer.data()), &bufferLength) == SOCKET_ERROR)
|
if (getpeername(handle, reinterpret_cast<sockaddr*>(nameBuffer.data()), &bufferLength) == SOCKET_ERROR)
|
||||||
{
|
{
|
||||||
|
|
@ -416,6 +420,8 @@ namespace Nz
|
||||||
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
socklen_t bufferLength = sizeof(sockaddr_in);
|
socklen_t bufferLength = sizeof(sockaddr_in);
|
||||||
|
|
||||||
if (getsockname(handle, reinterpret_cast<sockaddr*>(nameBuffer.data()), &bufferLength) == SOCKET_ERROR)
|
if (getsockname(handle, reinterpret_cast<sockaddr*>(nameBuffer.data()), &bufferLength) == SOCKET_ERROR)
|
||||||
|
|
@ -509,6 +515,8 @@ namespace Nz
|
||||||
NazaraAssert(buffer && length > 0, "Invalid buffer");
|
NazaraAssert(buffer && length > 0, "Invalid buffer");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
socklen_t bufferLength = static_cast<socklen_t>(nameBuffer.size());
|
socklen_t bufferLength = static_cast<socklen_t>(nameBuffer.size());
|
||||||
|
|
||||||
IpAddress senderIp;
|
IpAddress senderIp;
|
||||||
|
|
@ -580,6 +588,8 @@ namespace Nz
|
||||||
msgHdr.msg_iovlen = static_cast<int>(bufferCount);
|
msgHdr.msg_iovlen = static_cast<int>(bufferCount);
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
if (from)
|
if (from)
|
||||||
{
|
{
|
||||||
msgHdr.msg_name = nameBuffer.data();
|
msgHdr.msg_name = nameBuffer.data();
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ namespace Nz
|
||||||
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
int bufferLength = static_cast<int>(nameBuffer.size());
|
int bufferLength = static_cast<int>(nameBuffer.size());
|
||||||
|
|
||||||
SocketHandle newClient = accept(handle, reinterpret_cast<sockaddr*>(&nameBuffer), &bufferLength);
|
SocketHandle newClient = accept(handle, reinterpret_cast<sockaddr*>(&nameBuffer), &bufferLength);
|
||||||
|
|
@ -392,6 +394,8 @@ namespace Nz
|
||||||
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
int bufferLength = static_cast<int>(nameBuffer.size());
|
int bufferLength = static_cast<int>(nameBuffer.size());
|
||||||
|
|
||||||
if (getpeername(handle, reinterpret_cast<sockaddr*>(nameBuffer.data()), &bufferLength) == SOCKET_ERROR)
|
if (getpeername(handle, reinterpret_cast<sockaddr*>(nameBuffer.data()), &bufferLength) == SOCKET_ERROR)
|
||||||
|
|
@ -413,6 +417,8 @@ namespace Nz
|
||||||
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
int bufferLength = static_cast<int>(nameBuffer.size());
|
int bufferLength = static_cast<int>(nameBuffer.size());
|
||||||
|
|
||||||
if (getsockname(handle, reinterpret_cast<sockaddr*>(nameBuffer.data()), &bufferLength) == SOCKET_ERROR)
|
if (getsockname(handle, reinterpret_cast<sockaddr*>(nameBuffer.data()), &bufferLength) == SOCKET_ERROR)
|
||||||
|
|
@ -537,6 +543,8 @@ namespace Nz
|
||||||
NazaraAssert(buffer && length > 0, "Invalid buffer");
|
NazaraAssert(buffer && length > 0, "Invalid buffer");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
int bufferLength = static_cast<int>(nameBuffer.size());
|
int bufferLength = static_cast<int>(nameBuffer.size());
|
||||||
|
|
||||||
IpAddress senderIp;
|
IpAddress senderIp;
|
||||||
|
|
@ -592,6 +600,8 @@ namespace Nz
|
||||||
NazaraAssert(buffers && bufferCount > 0, "Invalid buffers");
|
NazaraAssert(buffers && bufferCount > 0, "Invalid buffers");
|
||||||
|
|
||||||
IpAddressImpl::SockAddrBuffer nameBuffer;
|
IpAddressImpl::SockAddrBuffer nameBuffer;
|
||||||
|
std::fill(nameBuffer.begin(), nameBuffer.end(), 0);
|
||||||
|
|
||||||
int bufferLength = static_cast<int>(nameBuffer.size());
|
int bufferLength = static_cast<int>(nameBuffer.size());
|
||||||
|
|
||||||
IpAddress senderIp;
|
IpAddress senderIp;
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,11 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
Constraint2D::Constraint2D(PhysWorld2D& world, cpConstraint* constraint) :
|
Constraint2D::Constraint2D(Nz::PhysWorld2D* world, cpConstraint* constraint) :
|
||||||
m_constraint(constraint)
|
m_constraint(constraint)
|
||||||
{
|
{
|
||||||
cpConstraintSetUserData(m_constraint, this);
|
cpConstraintSetUserData(m_constraint, this);
|
||||||
cpSpaceAddConstraint(world.GetHandle(), m_constraint);
|
cpSpaceAddConstraint(world->GetHandle(), m_constraint);
|
||||||
}
|
}
|
||||||
|
|
||||||
Constraint2D::Constraint2D(Constraint2D&& rhs) :
|
Constraint2D::Constraint2D(Constraint2D&& rhs) :
|
||||||
|
|
@ -105,320 +105,319 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DampedSpring2D::DampedSpring2D(PhysWorld2D& world, RigidBody2D& first, const Vector2f& firstAnchor, RigidBody2D& second, const Vector2f& secondAnchor, float restLength, float stiffness, float damping) :
|
DampedSpringConstraint2D::DampedSpringConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& firstAnchor, const Vector2f& secondAnchor, float restLength, float stiffness, float damping) :
|
||||||
Constraint2D(world, cpDampedSpringNew(first.GetHandle(), second.GetHandle(), cpv(firstAnchor.x, firstAnchor.y), cpv(secondAnchor.x, secondAnchor.y), restLength, stiffness, damping))
|
Constraint2D(first.GetWorld(), cpDampedSpringNew(first.GetHandle(), second.GetHandle(), cpv(firstAnchor.x, firstAnchor.y), cpv(secondAnchor.x, secondAnchor.y), restLength, stiffness, damping))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
float DampedSpring2D::GetDamping() const
|
float DampedSpringConstraint2D::GetDamping() const
|
||||||
{
|
{
|
||||||
return float(cpDampedSpringGetDamping(m_constraint));
|
return float(cpDampedSpringGetDamping(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2f DampedSpring2D::GetFirstAnchor() const
|
Vector2f DampedSpringConstraint2D::GetFirstAnchor() const
|
||||||
{
|
{
|
||||||
cpVect anchor = cpDampedSpringGetAnchorA(m_constraint);
|
cpVect anchor = cpDampedSpringGetAnchorA(m_constraint);
|
||||||
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
float DampedSpring2D::GetRestLength() const
|
float DampedSpringConstraint2D::GetRestLength() const
|
||||||
{
|
{
|
||||||
return float(cpDampedSpringGetRestLength(m_constraint));
|
return float(cpDampedSpringGetRestLength(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2f DampedSpring2D::GetSecondAnchor() const
|
Vector2f DampedSpringConstraint2D::GetSecondAnchor() const
|
||||||
{
|
{
|
||||||
cpVect anchor = cpDampedSpringGetAnchorB(m_constraint);
|
cpVect anchor = cpDampedSpringGetAnchorB(m_constraint);
|
||||||
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
float DampedSpring2D::GetStiffness() const
|
float DampedSpringConstraint2D::GetStiffness() const
|
||||||
{
|
{
|
||||||
return float(cpDampedSpringGetStiffness(m_constraint));
|
return float(cpDampedSpringGetStiffness(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DampedSpring2D::SetDamping(float newDamping)
|
void DampedSpringConstraint2D::SetDamping(float newDamping)
|
||||||
{
|
{
|
||||||
cpDampedSpringSetDamping(m_constraint, newDamping);
|
cpDampedSpringSetDamping(m_constraint, newDamping);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DampedSpring2D::SetFirstAnchor(const Vector2f& firstAnchor)
|
void DampedSpringConstraint2D::SetFirstAnchor(const Vector2f& firstAnchor)
|
||||||
{
|
{
|
||||||
cpDampedSpringSetAnchorA(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
cpDampedSpringSetAnchorA(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DampedSpring2D::SetRestLength(float newLength)
|
void DampedSpringConstraint2D::SetRestLength(float newLength)
|
||||||
{
|
{
|
||||||
cpDampedSpringSetRestLength(m_constraint, newLength);
|
cpDampedSpringSetRestLength(m_constraint, newLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DampedSpring2D::SetSecondAnchor(const Vector2f& firstAnchor)
|
void DampedSpringConstraint2D::SetSecondAnchor(const Vector2f& firstAnchor)
|
||||||
{
|
{
|
||||||
cpDampedSpringSetAnchorB(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
cpDampedSpringSetAnchorB(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DampedSpring2D::SetStiffness(float newStiffness)
|
void DampedSpringConstraint2D::SetStiffness(float newStiffness)
|
||||||
{
|
{
|
||||||
cpDampedSpringSetStiffness(m_constraint, newStiffness);
|
cpDampedSpringSetStiffness(m_constraint, newStiffness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DampedRotarySpring2D::DampedRotarySpring2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float restAngle, float stiffness, float damping) :
|
DampedRotarySpringConstraint2D::DampedRotarySpringConstraint2D(RigidBody2D& first, RigidBody2D& second, float restAngle, float stiffness, float damping) :
|
||||||
Constraint2D(world, cpDampedRotarySpringNew(first.GetHandle(), second.GetHandle(), restAngle, stiffness, damping))
|
Constraint2D(first.GetWorld(), cpDampedRotarySpringNew(first.GetHandle(), second.GetHandle(), restAngle, stiffness, damping))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
float DampedRotarySpring2D::GetDamping() const
|
float DampedRotarySpringConstraint2D::GetDamping() const
|
||||||
{
|
{
|
||||||
return float(cpDampedRotarySpringGetDamping(m_constraint));
|
return float(cpDampedRotarySpringGetDamping(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
float DampedRotarySpring2D::GetRestAngle() const
|
float DampedRotarySpringConstraint2D::GetRestAngle() const
|
||||||
{
|
{
|
||||||
return float(cpDampedRotarySpringGetRestAngle(m_constraint));
|
return float(cpDampedRotarySpringGetRestAngle(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
float DampedRotarySpring2D::GetStiffness() const
|
float DampedRotarySpringConstraint2D::GetStiffness() const
|
||||||
{
|
{
|
||||||
return float(cpDampedRotarySpringGetStiffness(m_constraint));
|
return float(cpDampedRotarySpringGetStiffness(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DampedRotarySpring2D::SetDamping(float newDamping)
|
void DampedRotarySpringConstraint2D::SetDamping(float newDamping)
|
||||||
{
|
{
|
||||||
cpDampedSpringSetDamping(m_constraint, newDamping);
|
cpDampedSpringSetDamping(m_constraint, newDamping);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DampedRotarySpring2D::SetRestAngle(float newAngle)
|
void DampedRotarySpringConstraint2D::SetRestAngle(float newAngle)
|
||||||
{
|
{
|
||||||
cpDampedRotarySpringSetRestAngle(m_constraint, newAngle);
|
cpDampedRotarySpringSetRestAngle(m_constraint, newAngle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DampedRotarySpring2D::SetStiffness(float newStiffness)
|
void DampedRotarySpringConstraint2D::SetStiffness(float newStiffness)
|
||||||
{
|
{
|
||||||
cpDampedRotarySpringSetStiffness(m_constraint, newStiffness);
|
cpDampedRotarySpringSetStiffness(m_constraint, newStiffness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
GearJoint2D::GearJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float phase, float ratio) :
|
GearConstraint2D::GearConstraint2D(RigidBody2D& first, RigidBody2D& second, float phase, float ratio) :
|
||||||
Constraint2D(world, cpGearJointNew(first.GetHandle(), second.GetHandle(), phase, ratio))
|
Constraint2D(first.GetWorld(), cpGearJointNew(first.GetHandle(), second.GetHandle(), phase, ratio))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
float GearJoint2D::GetPhase() const
|
float GearConstraint2D::GetPhase() const
|
||||||
{
|
{
|
||||||
return float(cpGearJointGetPhase(m_constraint));
|
return float(cpGearJointGetPhase(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
float GearJoint2D::GetRatio() const
|
float GearConstraint2D::GetRatio() const
|
||||||
{
|
{
|
||||||
return float(cpGearJointGetRatio(m_constraint));
|
return float(cpGearJointGetRatio(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GearJoint2D::SetPhase(float phase)
|
void GearConstraint2D::SetPhase(float phase)
|
||||||
{
|
{
|
||||||
cpGearJointSetPhase(m_constraint, phase);
|
cpGearJointSetPhase(m_constraint, phase);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GearJoint2D::SetRatio(float ratio)
|
void GearConstraint2D::SetRatio(float ratio)
|
||||||
{
|
{
|
||||||
cpGearJointSetRatio(m_constraint, ratio);
|
cpGearJointSetRatio(m_constraint, ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MotorJoint2D::MotorJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float rate) :
|
MotorConstraint2D::MotorConstraint2D(RigidBody2D& first, RigidBody2D& second, float rate) :
|
||||||
Constraint2D(world, cpSimpleMotorNew(first.GetHandle(), second.GetHandle(), rate))
|
Constraint2D(first.GetWorld(), cpSimpleMotorNew(first.GetHandle(), second.GetHandle(), rate))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
float MotorJoint2D::GetRate() const
|
float MotorConstraint2D::GetRate() const
|
||||||
{
|
{
|
||||||
return float(cpSimpleMotorGetRate(m_constraint));
|
return float(cpSimpleMotorGetRate(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MotorJoint2D::SetRate(float rate)
|
void MotorConstraint2D::SetRate(float rate)
|
||||||
{
|
{
|
||||||
cpSimpleMotorSetRate(m_constraint, rate);
|
cpSimpleMotorSetRate(m_constraint, rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PinJoint2D::PinJoint2D(PhysWorld2D& world, RigidBody2D& first, const Vector2f& firstAnchor, RigidBody2D& second, const Vector2f& secondAnchor) :
|
PinConstraint2D::PinConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& firstAnchor, const Vector2f& secondAnchor) :
|
||||||
Constraint2D(world, cpPinJointNew(first.GetHandle(), second.GetHandle(), cpv(firstAnchor.x, firstAnchor.y), cpv(secondAnchor.x, secondAnchor.y)))
|
Constraint2D(first.GetWorld(), cpPinJointNew(first.GetHandle(), second.GetHandle(), cpv(firstAnchor.x, firstAnchor.y), cpv(secondAnchor.x, secondAnchor.y)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
float PinJoint2D::GetDistance() const
|
float PinConstraint2D::GetDistance() const
|
||||||
{
|
{
|
||||||
return float(cpPinJointGetDist(m_constraint));
|
return float(cpPinJointGetDist(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2f PinJoint2D::GetFirstAnchor() const
|
Vector2f PinConstraint2D::GetFirstAnchor() const
|
||||||
{
|
{
|
||||||
cpVect anchor = cpPinJointGetAnchorA(m_constraint);
|
cpVect anchor = cpPinJointGetAnchorA(m_constraint);
|
||||||
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2f PinJoint2D::GetSecondAnchor() const
|
Vector2f PinConstraint2D::GetSecondAnchor() const
|
||||||
{
|
{
|
||||||
cpVect anchor = cpPinJointGetAnchorB(m_constraint);
|
cpVect anchor = cpPinJointGetAnchorB(m_constraint);
|
||||||
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PinJoint2D::SetDistance(float newDistance)
|
void PinConstraint2D::SetDistance(float newDistance)
|
||||||
{
|
{
|
||||||
cpPinJointSetDist(m_constraint, newDistance);
|
cpPinJointSetDist(m_constraint, newDistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PinJoint2D::SetFirstAnchor(const Vector2f& firstAnchor)
|
void PinConstraint2D::SetFirstAnchor(const Vector2f& firstAnchor)
|
||||||
{
|
{
|
||||||
cpPinJointSetAnchorA(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
cpPinJointSetAnchorA(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PinJoint2D::SetSecondAnchor(const Vector2f& firstAnchor)
|
void PinConstraint2D::SetSecondAnchor(const Vector2f& firstAnchor)
|
||||||
{
|
{
|
||||||
cpPinJointSetAnchorB(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
cpPinJointSetAnchorB(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PivotJoint2D::PivotJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, const Vector2f& anchor) :
|
PivotConstraint2D::PivotConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& anchor) :
|
||||||
Constraint2D(world, cpPivotJointNew(first.GetHandle(), second.GetHandle(), cpv(anchor.x, anchor.y)))
|
Constraint2D(first.GetWorld(), cpPivotJointNew(first.GetHandle(), second.GetHandle(), cpv(anchor.x, anchor.y)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
PivotJoint2D::PivotJoint2D(PhysWorld2D& world, RigidBody2D& first, const Vector2f& firstAnchor, RigidBody2D& second, const Vector2f& secondAnchor) :
|
PivotConstraint2D::PivotConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& firstAnchor, const Vector2f& secondAnchor) :
|
||||||
Constraint2D(world, cpPivotJointNew2(first.GetHandle(), second.GetHandle(), cpv(firstAnchor.x, firstAnchor.y), cpv(secondAnchor.x, secondAnchor.y)))
|
Constraint2D(first.GetWorld(), cpPivotJointNew2(first.GetHandle(), second.GetHandle(), cpv(firstAnchor.x, firstAnchor.y), cpv(secondAnchor.x, secondAnchor.y)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2f PivotJoint2D::GetFirstAnchor() const
|
Vector2f PivotConstraint2D::GetFirstAnchor() const
|
||||||
{
|
{
|
||||||
cpVect anchor = cpPivotJointGetAnchorA(m_constraint);
|
cpVect anchor = cpPivotJointGetAnchorA(m_constraint);
|
||||||
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2f PivotJoint2D::GetSecondAnchor() const
|
Vector2f PivotConstraint2D::GetSecondAnchor() const
|
||||||
{
|
{
|
||||||
cpVect anchor = cpPivotJointGetAnchorB(m_constraint);
|
cpVect anchor = cpPivotJointGetAnchorB(m_constraint);
|
||||||
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PivotJoint2D::SetFirstAnchor(const Vector2f& firstAnchor)
|
void PivotConstraint2D::SetFirstAnchor(const Vector2f& firstAnchor)
|
||||||
{
|
{
|
||||||
cpPivotJointSetAnchorA(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
cpPivotJointSetAnchorA(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PivotJoint2D::SetSecondAnchor(const Vector2f& firstAnchor)
|
void PivotConstraint2D::SetSecondAnchor(const Vector2f& firstAnchor)
|
||||||
{
|
{
|
||||||
cpPivotJointSetAnchorB(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
cpPivotJointSetAnchorB(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RatchetJoint2D::RatchetJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float phase, float ratchet) :
|
RatchetConstraint2D::RatchetConstraint2D(RigidBody2D& first, RigidBody2D& second, float phase, float ratchet) :
|
||||||
Constraint2D(world, cpRatchetJointNew(first.GetHandle(), second.GetHandle(), phase, ratchet))
|
Constraint2D(first.GetWorld(), cpRatchetJointNew(first.GetHandle(), second.GetHandle(), phase, ratchet))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
float RatchetJoint2D::GetAngle() const
|
float RatchetConstraint2D::GetAngle() const
|
||||||
{
|
{
|
||||||
return float(cpRatchetJointGetAngle(m_constraint));
|
return float(cpRatchetJointGetAngle(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
float RatchetJoint2D::GetPhase() const
|
float RatchetConstraint2D::GetPhase() const
|
||||||
{
|
{
|
||||||
return float(cpRatchetJointGetPhase(m_constraint));
|
return float(cpRatchetJointGetPhase(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
float RatchetJoint2D::GetRatchet() const
|
float RatchetConstraint2D::GetRatchet() const
|
||||||
{
|
{
|
||||||
return float(cpRatchetJointGetRatchet(m_constraint));
|
return float(cpRatchetJointGetRatchet(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RatchetJoint2D::SetAngle(float angle)
|
void RatchetConstraint2D::SetAngle(float angle)
|
||||||
{
|
{
|
||||||
cpRatchetJointSetAngle(m_constraint, angle);
|
cpRatchetJointSetAngle(m_constraint, angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RatchetJoint2D::SetPhase(float phase)
|
void RatchetConstraint2D::SetPhase(float phase)
|
||||||
{
|
{
|
||||||
cpRatchetJointSetPhase(m_constraint, phase);
|
cpRatchetJointSetPhase(m_constraint, phase);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RatchetJoint2D::SetRatchet(float ratchet)
|
void RatchetConstraint2D::SetRatchet(float ratchet)
|
||||||
{
|
{
|
||||||
cpRatchetJointSetRatchet(m_constraint, ratchet);
|
cpRatchetJointSetRatchet(m_constraint, ratchet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
RotaryLimitJoint2D::RotaryLimitJoint2D(PhysWorld2D& world, RigidBody2D& first, RigidBody2D& second, float minAngle, float maxAngle) :
|
RotaryLimitConstraint2D::RotaryLimitConstraint2D(RigidBody2D& first, RigidBody2D& second, float minAngle, float maxAngle) :
|
||||||
Constraint2D(world, cpRotaryLimitJointNew(first.GetHandle(), second.GetHandle(), minAngle, maxAngle))
|
Constraint2D(first.GetWorld(), cpRotaryLimitJointNew(first.GetHandle(), second.GetHandle(), minAngle, maxAngle))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
float RotaryLimitJoint2D::GetMaxAngle() const
|
float RotaryLimitConstraint2D::GetMaxAngle() const
|
||||||
{
|
{
|
||||||
return float(cpRotaryLimitJointGetMax(m_constraint));
|
return float(cpRotaryLimitJointGetMax(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
float RotaryLimitJoint2D::GetMinAngle() const
|
float RotaryLimitConstraint2D::GetMinAngle() const
|
||||||
{
|
{
|
||||||
return float(cpRotaryLimitJointGetMax(m_constraint));
|
return float(cpRotaryLimitJointGetMax(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RotaryLimitJoint2D::SetMaxAngle(float maxAngle)
|
void RotaryLimitConstraint2D::SetMaxAngle(float maxAngle)
|
||||||
{
|
{
|
||||||
cpRotaryLimitJointSetMax(m_constraint, maxAngle);
|
cpRotaryLimitJointSetMax(m_constraint, maxAngle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RotaryLimitJoint2D::SetMinAngle(float minAngle)
|
void RotaryLimitConstraint2D::SetMinAngle(float minAngle)
|
||||||
{
|
{
|
||||||
cpRotaryLimitJointSetMin(m_constraint, minAngle);
|
cpRotaryLimitJointSetMin(m_constraint, minAngle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SlideJoint2D::SlideJoint2D(PhysWorld2D& world, RigidBody2D& first, const Vector2f& firstAnchor, RigidBody2D& second, const Vector2f& secondAnchor, float min, float max) :
|
SlideConstraint2D::SlideConstraint2D(RigidBody2D& first, RigidBody2D& second, const Vector2f& firstAnchor, const Vector2f& secondAnchor, float min, float max) :
|
||||||
Constraint2D(world, cpSlideJointNew(first.GetHandle(), second.GetHandle(), cpv(firstAnchor.x, firstAnchor.y), cpv(secondAnchor.x, secondAnchor.y), min, max))
|
Constraint2D(first.GetWorld(), cpSlideJointNew(first.GetHandle(), second.GetHandle(), cpv(firstAnchor.x, firstAnchor.y), cpv(secondAnchor.x, secondAnchor.y), min, max))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2f SlideJoint2D::GetFirstAnchor() const
|
Vector2f SlideConstraint2D::GetFirstAnchor() const
|
||||||
{
|
{
|
||||||
cpVect anchor = cpSlideJointGetAnchorA(m_constraint);
|
cpVect anchor = cpSlideJointGetAnchorA(m_constraint);
|
||||||
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
float SlideJoint2D::GetMaxDistance() const
|
float SlideConstraint2D::GetMaxDistance() const
|
||||||
{
|
{
|
||||||
return float(cpSlideJointGetMax(m_constraint));
|
return float(cpSlideJointGetMax(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
float SlideJoint2D::GetMinDistance() const
|
float SlideConstraint2D::GetMinDistance() const
|
||||||
{
|
{
|
||||||
return float(cpSlideJointGetMin(m_constraint));
|
return float(cpSlideJointGetMin(m_constraint));
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector2f SlideJoint2D::GetSecondAnchor() const
|
Vector2f SlideConstraint2D::GetSecondAnchor() const
|
||||||
{
|
{
|
||||||
cpVect anchor = cpSlideJointGetAnchorB(m_constraint);
|
cpVect anchor = cpSlideJointGetAnchorB(m_constraint);
|
||||||
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
return Vector2f(static_cast<float>(anchor.x), static_cast<float>(anchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SlideJoint2D::SetFirstAnchor(const Vector2f& firstAnchor)
|
void SlideConstraint2D::SetFirstAnchor(const Vector2f& firstAnchor)
|
||||||
{
|
{
|
||||||
cpSlideJointSetAnchorA(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
cpSlideJointSetAnchorA(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SlideJoint2D::SetMaxDistance(float newMaxDistance)
|
void SlideConstraint2D::SetMaxDistance(float newMaxDistance)
|
||||||
{
|
{
|
||||||
cpSlideJointSetMax(m_constraint, newMaxDistance);
|
cpSlideJointSetMax(m_constraint, newMaxDistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SlideJoint2D::SetMinDistance(float newMinDistance)
|
void SlideConstraint2D::SetMinDistance(float newMinDistance)
|
||||||
{
|
{
|
||||||
cpSlideJointSetMin(m_constraint, newMinDistance);
|
cpSlideJointSetMin(m_constraint, newMinDistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SlideJoint2D::SetSecondAnchor(const Vector2f& firstAnchor)
|
void SlideConstraint2D::SetSecondAnchor(const Vector2f& firstAnchor)
|
||||||
{
|
{
|
||||||
cpSlideJointSetAnchorB(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
cpSlideJointSetAnchorB(m_constraint, cpv(firstAnchor.x, firstAnchor.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ namespace Nz
|
||||||
m_handle = Create(m_mass, object.GetMomentOfInertia());
|
m_handle = Create(m_mass, object.GetMomentOfInertia());
|
||||||
SetGeom(object.GetGeom(), false);
|
SetGeom(object.GetGeom(), false);
|
||||||
|
|
||||||
CopyBodyData(object.GetHandle());
|
CopyBodyData(object.GetHandle(), m_handle);
|
||||||
|
|
||||||
for (std::size_t i = 0; i < m_shapes.size(); ++i)
|
for (std::size_t i = 0; i < m_shapes.size(); ++i)
|
||||||
m_shapes[i]->bb = cpShapeCacheBB(object.m_shapes[i]);
|
m_shapes[i]->bb = cpShapeCacheBB(object.m_shapes[i]);
|
||||||
|
|
@ -243,7 +243,7 @@ namespace Nz
|
||||||
|
|
||||||
cpBody* newHandle = Create(static_cast<float>(mass), static_cast<float>(moment));
|
cpBody* newHandle = Create(static_cast<float>(mass), static_cast<float>(moment));
|
||||||
|
|
||||||
CopyBodyData(m_handle);
|
CopyBodyData(m_handle, newHandle);
|
||||||
Destroy();
|
Destroy();
|
||||||
|
|
||||||
m_handle = newHandle;
|
m_handle = newHandle;
|
||||||
|
|
@ -403,25 +403,20 @@ namespace Nz
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RigidBody2D::CopyBodyData(cpBody* body)
|
|
||||||
{
|
|
||||||
cpBodySetAngle(m_handle, cpBodyGetAngle(body));
|
|
||||||
cpBodySetAngularVelocity(m_handle, cpBodyGetAngularVelocity(body));
|
|
||||||
cpBodySetCenterOfGravity(m_handle, cpBodyGetCenterOfGravity(body));
|
|
||||||
cpBodySetForce(m_handle, cpBodyGetForce(body));
|
|
||||||
cpBodySetPosition(m_handle, cpBodyGetPosition(body));
|
|
||||||
cpBodySetTorque(m_handle, cpBodyGetTorque(body));
|
|
||||||
cpBodySetVelocity(m_handle, cpBodyGetVelocity(body));
|
|
||||||
}
|
|
||||||
|
|
||||||
cpBody* RigidBody2D::Create(float mass, float moment)
|
cpBody* RigidBody2D::Create(float mass, float moment)
|
||||||
{
|
{
|
||||||
cpBody* handle = cpBodyNew(mass, moment);
|
cpBody* handle;
|
||||||
|
if (IsKinematic())
|
||||||
|
{
|
||||||
|
if (IsStatic())
|
||||||
|
handle = cpBodyNewStatic();
|
||||||
|
else
|
||||||
|
handle = cpBodyNewKinematic();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
handle = cpBodyNew(mass, moment);
|
||||||
|
|
||||||
cpBodySetUserData(handle, this);
|
cpBodySetUserData(handle, this);
|
||||||
|
|
||||||
if (mass <= 0.f)
|
|
||||||
cpBodySetType(handle, CP_BODY_TYPE_KINEMATIC);
|
|
||||||
|
|
||||||
cpSpaceAddBody(m_world->GetHandle(), handle);
|
cpSpaceAddBody(m_world->GetHandle(), handle);
|
||||||
|
|
||||||
return handle;
|
return handle;
|
||||||
|
|
@ -443,4 +438,16 @@ namespace Nz
|
||||||
}
|
}
|
||||||
m_shapes.clear();
|
m_shapes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RigidBody2D::CopyBodyData(cpBody* from, cpBody* to)
|
||||||
|
{
|
||||||
|
cpBodySetAngle(to, cpBodyGetAngle(from));
|
||||||
|
cpBodySetAngularVelocity(to, cpBodyGetAngularVelocity(from));
|
||||||
|
cpBodySetCenterOfGravity(to, cpBodyGetCenterOfGravity(from));
|
||||||
|
cpBodySetForce(to, cpBodyGetForce(from));
|
||||||
|
cpBodySetPosition(to, cpBodyGetPosition(from));
|
||||||
|
cpBodySetTorque(to, cpBodyGetTorque(from));
|
||||||
|
cpBodySetVelocity(to, cpBodyGetVelocity(from));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include <Nazara/Physics3D/PhysWorld3D.hpp>
|
#include <Nazara/Physics3D/PhysWorld3D.hpp>
|
||||||
#include <Newton/Newton.h>
|
#include <Newton/Newton.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <cmath>
|
||||||
#include <Nazara/Physics3D/Debug.hpp>
|
#include <Nazara/Physics3D/Debug.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
|
|
@ -31,6 +32,7 @@ namespace Nz
|
||||||
|
|
||||||
m_body = NewtonCreateDynamicBody(m_world->GetHandle(), m_geom->GetHandle(m_world), m_matrix);
|
m_body = NewtonCreateDynamicBody(m_world->GetHandle(), m_geom->GetHandle(m_world), m_matrix);
|
||||||
NewtonBodySetUserData(m_body, this);
|
NewtonBodySetUserData(m_body, this);
|
||||||
|
NewtonBodySetTransformCallback(m_body, &TransformCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
RigidBody3D::RigidBody3D(const RigidBody3D& object) :
|
RigidBody3D::RigidBody3D(const RigidBody3D& object) :
|
||||||
|
|
@ -47,7 +49,16 @@ namespace Nz
|
||||||
|
|
||||||
m_body = NewtonCreateDynamicBody(m_world->GetHandle(), m_geom->GetHandle(m_world), m_matrix);
|
m_body = NewtonCreateDynamicBody(m_world->GetHandle(), m_geom->GetHandle(m_world), m_matrix);
|
||||||
NewtonBodySetUserData(m_body, this);
|
NewtonBodySetUserData(m_body, this);
|
||||||
|
NewtonBodySetTransformCallback(m_body, &TransformCallback);
|
||||||
|
|
||||||
SetMass(object.m_mass);
|
SetMass(object.m_mass);
|
||||||
|
SetAngularDamping(object.GetAngularDamping());
|
||||||
|
SetAngularVelocity(object.GetAngularVelocity());
|
||||||
|
SetLinearDamping(object.GetLinearDamping());
|
||||||
|
SetLinearVelocity(object.GetLinearVelocity());
|
||||||
|
SetMassCenter(object.GetMassCenter());
|
||||||
|
SetPosition(object.GetPosition());
|
||||||
|
SetRotation(object.GetRotation());
|
||||||
}
|
}
|
||||||
|
|
||||||
RigidBody3D::RigidBody3D(RigidBody3D&& object) :
|
RigidBody3D::RigidBody3D(RigidBody3D&& object) :
|
||||||
|
|
@ -125,6 +136,11 @@ namespace Nz
|
||||||
NewtonBodySetAutoSleep(m_body, autoSleep);
|
NewtonBodySetAutoSleep(m_body, autoSleep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RigidBody3D::EnableSimulation(bool simulation)
|
||||||
|
{
|
||||||
|
NewtonBodySetSimulationState(m_body, simulation);
|
||||||
|
}
|
||||||
|
|
||||||
Boxf RigidBody3D::GetAABB() const
|
Boxf RigidBody3D::GetAABB() const
|
||||||
{
|
{
|
||||||
Vector3f min, max;
|
Vector3f min, max;
|
||||||
|
|
@ -133,6 +149,14 @@ namespace Nz
|
||||||
return Boxf(min, max);
|
return Boxf(min, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector3f RigidBody3D::GetAngularDamping() const
|
||||||
|
{
|
||||||
|
Vector3f angularDamping;
|
||||||
|
NewtonBodyGetAngularDamping(m_body, angularDamping);
|
||||||
|
|
||||||
|
return angularDamping;
|
||||||
|
}
|
||||||
|
|
||||||
Vector3f RigidBody3D::GetAngularVelocity() const
|
Vector3f RigidBody3D::GetAngularVelocity() const
|
||||||
{
|
{
|
||||||
Vector3f angularVelocity;
|
Vector3f angularVelocity;
|
||||||
|
|
@ -156,6 +180,19 @@ namespace Nz
|
||||||
return m_body;
|
return m_body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float RigidBody3D::GetLinearDamping() const
|
||||||
|
{
|
||||||
|
return NewtonBodyGetLinearDamping(m_body);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3f RigidBody3D::GetLinearVelocity() const
|
||||||
|
{
|
||||||
|
Vector3f velocity;
|
||||||
|
NewtonBodyGetVelocity(m_body, velocity);
|
||||||
|
|
||||||
|
return velocity;
|
||||||
|
}
|
||||||
|
|
||||||
float RigidBody3D::GetMass() const
|
float RigidBody3D::GetMass() const
|
||||||
{
|
{
|
||||||
return m_mass;
|
return m_mass;
|
||||||
|
|
@ -194,14 +231,6 @@ namespace Nz
|
||||||
return m_matrix.GetRotation();
|
return m_matrix.GetRotation();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3f RigidBody3D::GetVelocity() const
|
|
||||||
{
|
|
||||||
Vector3f velocity;
|
|
||||||
NewtonBodyGetVelocity(m_body, velocity);
|
|
||||||
|
|
||||||
return velocity;
|
|
||||||
}
|
|
||||||
|
|
||||||
PhysWorld3D* RigidBody3D::GetWorld() const
|
PhysWorld3D* RigidBody3D::GetWorld() const
|
||||||
{
|
{
|
||||||
return m_world;
|
return m_world;
|
||||||
|
|
@ -217,11 +246,21 @@ namespace Nz
|
||||||
return m_mass > 0.f;
|
return m_mass > 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RigidBody3D::IsSimulationEnabled() const
|
||||||
|
{
|
||||||
|
return NewtonBodyGetSimulationState(m_body) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool RigidBody3D::IsSleeping() const
|
bool RigidBody3D::IsSleeping() const
|
||||||
{
|
{
|
||||||
return NewtonBodyGetSleepState(m_body) != 0;
|
return NewtonBodyGetSleepState(m_body) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RigidBody3D::SetAngularDamping(const Nz::Vector3f& angularDamping)
|
||||||
|
{
|
||||||
|
NewtonBodySetAngularDamping(m_body, angularDamping);
|
||||||
|
}
|
||||||
|
|
||||||
void RigidBody3D::SetAngularVelocity(const Vector3f& angularVelocity)
|
void RigidBody3D::SetAngularVelocity(const Vector3f& angularVelocity)
|
||||||
{
|
{
|
||||||
NewtonBodySetOmega(m_body, angularVelocity);
|
NewtonBodySetOmega(m_body, angularVelocity);
|
||||||
|
|
@ -245,18 +284,39 @@ namespace Nz
|
||||||
m_gravityFactor = gravityFactor;
|
m_gravityFactor = gravityFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RigidBody3D::SetLinearDamping(float damping)
|
||||||
|
{
|
||||||
|
NewtonBodySetLinearDamping(m_body, damping);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RigidBody3D::SetLinearVelocity(const Vector3f& velocity)
|
||||||
|
{
|
||||||
|
NewtonBodySetVelocity(m_body, velocity);
|
||||||
|
}
|
||||||
|
|
||||||
void RigidBody3D::SetMass(float mass)
|
void RigidBody3D::SetMass(float mass)
|
||||||
{
|
{
|
||||||
|
NazaraAssert(mass >= 0.f, "Mass must be positive and finite");
|
||||||
|
NazaraAssert(std::isfinite(mass), "Mass must be positive and finite");
|
||||||
|
|
||||||
if (m_mass > 0.f)
|
if (m_mass > 0.f)
|
||||||
{
|
{
|
||||||
// If we already have a mass, we already have an inertial matrix as well, just rescale it
|
if (mass > 0.f)
|
||||||
float Ix, Iy, Iz;
|
{
|
||||||
NewtonBodyGetMassMatrix(m_body, &m_mass, &Ix, &Iy, &Iz);
|
// If we already have a mass, we already have an inertial matrix as well, just rescale it
|
||||||
|
float Ix, Iy, Iz;
|
||||||
|
NewtonBodyGetMassMatrix(m_body, &m_mass, &Ix, &Iy, &Iz);
|
||||||
|
|
||||||
float scale = mass/m_mass;
|
float scale = mass / m_mass;
|
||||||
NewtonBodySetMassMatrix(m_body, mass, Ix*scale, Iy*scale, Iz*scale);
|
NewtonBodySetMassMatrix(m_body, mass, Ix*scale, Iy*scale, Iz*scale);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NewtonBodySetMassMatrix(m_body, 0.f, 0.f, 0.f, 0.f);
|
||||||
|
NewtonBodySetForceAndTorqueCallback(m_body, nullptr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (mass > 0.f)
|
else
|
||||||
{
|
{
|
||||||
Vector3f inertia, origin;
|
Vector3f inertia, origin;
|
||||||
m_geom->ComputeInertialMatrix(&inertia, &origin);
|
m_geom->ComputeInertialMatrix(&inertia, &origin);
|
||||||
|
|
@ -264,7 +324,6 @@ namespace Nz
|
||||||
NewtonBodySetCentreOfMass(m_body, &origin.x);
|
NewtonBodySetCentreOfMass(m_body, &origin.x);
|
||||||
NewtonBodySetMassMatrix(m_body, mass, inertia.x*mass, inertia.y*mass, inertia.z*mass);
|
NewtonBodySetMassMatrix(m_body, mass, inertia.x*mass, inertia.y*mass, inertia.z*mass);
|
||||||
NewtonBodySetForceAndTorqueCallback(m_body, &ForceAndTorqueCallback);
|
NewtonBodySetForceAndTorqueCallback(m_body, &ForceAndTorqueCallback);
|
||||||
NewtonBodySetTransformCallback(m_body, &TransformCallback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_mass = mass;
|
m_mass = mass;
|
||||||
|
|
@ -290,11 +349,6 @@ namespace Nz
|
||||||
UpdateBody();
|
UpdateBody();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RigidBody3D::SetVelocity(const Vector3f& velocity)
|
|
||||||
{
|
|
||||||
NewtonBodySetVelocity(m_body, velocity);
|
|
||||||
}
|
|
||||||
|
|
||||||
RigidBody3D& RigidBody3D::operator=(const RigidBody3D& object)
|
RigidBody3D& RigidBody3D::operator=(const RigidBody3D& object)
|
||||||
{
|
{
|
||||||
RigidBody3D physObj(object);
|
RigidBody3D physObj(object);
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ namespace Nz
|
||||||
if (varPtr->type != type)
|
if (varPtr->type != type)
|
||||||
{
|
{
|
||||||
//TODO: AstParseError
|
//TODO: AstParseError
|
||||||
throw std::runtime_error("Function uses parameter \"" + name + "\" with a different type than specified in the function arguments");
|
throw std::runtime_error("Function uses parameter \"" + name.ToStdString() + "\" with a different type than specified in the function arguments");
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -98,7 +98,7 @@ namespace Nz
|
||||||
|
|
||||||
if (!found)
|
if (!found)
|
||||||
//TODO: AstParseError
|
//TODO: AstParseError
|
||||||
throw std::runtime_error("Function has no parameter \"" + name + "\"");
|
throw std::runtime_error("Function has no parameter \"" + name.ToStdString() + "\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -227,35 +227,41 @@ namespace Nz
|
||||||
|
|
||||||
if (p < 0)
|
if (p < 0)
|
||||||
{
|
{
|
||||||
p += static_cast<int>(m_positions.size() - 1);
|
p += static_cast<int>(m_positions.size());
|
||||||
if (p < 0)
|
if (p < 0)
|
||||||
{
|
{
|
||||||
Error("Vertex index out of range (" + String::Number(p) + " < 0");
|
Error("Vertex index out of range (" + String::Number(p) + " < 0");
|
||||||
error = true;
|
error = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++p;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
{
|
{
|
||||||
n += static_cast<int>(m_normals.size() - 1);
|
n += static_cast<int>(m_normals.size());
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
{
|
{
|
||||||
Error("Normal index out of range (" + String::Number(n) + " < 0");
|
Error("Normal index out of range (" + String::Number(n) + " < 0");
|
||||||
error = true;
|
error = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++n;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (t < 0)
|
if (t < 0)
|
||||||
{
|
{
|
||||||
t += static_cast<int>(m_texCoords.size() - 1);
|
t += static_cast<int>(m_texCoords.size());
|
||||||
if (t < 0)
|
if (t < 0)
|
||||||
{
|
{
|
||||||
Error("Texture coordinates index out of range (" + String::Number(t) + " < 0");
|
Error("Texture coordinates index out of range (" + String::Number(t) + " < 0");
|
||||||
error = true;
|
error = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++t;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (static_cast<std::size_t>(p) > m_positions.size())
|
if (static_cast<std::size_t>(p) > m_positions.size())
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,38 @@ namespace Nz
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SaveJPEG(const Image& image, const ImageParams& parameters, Stream& stream)
|
||||||
|
{
|
||||||
|
Image tempImage(image); //< We're using COW here to prevent Image copy unless required
|
||||||
|
|
||||||
|
int componentCount = ConvertToIntegerFormat(tempImage);
|
||||||
|
if (componentCount == 0)
|
||||||
|
{
|
||||||
|
NazaraError("Failed to convert image to suitable format");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long imageQuality;
|
||||||
|
if (parameters.custom.GetIntegerParameter("NativeJPEGSaver_Quality", &imageQuality))
|
||||||
|
{
|
||||||
|
if (imageQuality <= 0 || imageQuality > 100)
|
||||||
|
{
|
||||||
|
NazaraError("NativeJPEGSaver_Quality value (" + Nz::String::Number(imageQuality) + ") does not fit in bounds ]0, 100], clamping...");
|
||||||
|
imageQuality = Nz::Clamp(imageQuality, 1LL, 100LL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
imageQuality = 100;
|
||||||
|
|
||||||
|
if (!stbi_write_jpg_to_func(&WriteToStream, &stream, tempImage.GetWidth(), tempImage.GetHeight(), componentCount, tempImage.GetConstPixels(), int(imageQuality)))
|
||||||
|
{
|
||||||
|
NazaraError("Failed to write JPEG to stream");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool SaveHDR(const Image& image, const ImageParams& parameters, Stream& stream)
|
bool SaveHDR(const Image& image, const ImageParams& parameters, Stream& stream)
|
||||||
{
|
{
|
||||||
NazaraUnused(parameters);
|
NazaraUnused(parameters);
|
||||||
|
|
@ -232,10 +264,12 @@ namespace Nz
|
||||||
{
|
{
|
||||||
void RegisterSTBSaver()
|
void RegisterSTBSaver()
|
||||||
{
|
{
|
||||||
s_formatHandlers["bmp"] = &SaveBMP;
|
s_formatHandlers["bmp"] = &SaveBMP;
|
||||||
s_formatHandlers["hdr"] = &SaveHDR;
|
s_formatHandlers["hdr"] = &SaveHDR;
|
||||||
s_formatHandlers["png"] = &SavePNG;
|
s_formatHandlers["jpg"] = &SaveJPEG;
|
||||||
s_formatHandlers["tga"] = &SaveTGA;
|
s_formatHandlers["jpeg"] = &SaveJPEG;
|
||||||
|
s_formatHandlers["png"] = &SavePNG;
|
||||||
|
s_formatHandlers["tga"] = &SaveTGA;
|
||||||
|
|
||||||
ImageSaver::RegisterSaver(FormatQuerier, SaveToStream);
|
ImageSaver::RegisterSaver(FormatQuerier, SaveToStream);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#include <Nazara/Core/Color.hpp>
|
#include <Nazara/Core/Color.hpp>
|
||||||
#include <Catch/catch.hpp>
|
#include <Catch/catch.hpp>
|
||||||
|
|
||||||
const float epsilon = 0.01f;
|
const float epsilon = 1.f;
|
||||||
|
|
||||||
void CompareColor(const Nz::Color& lhs, const Nz::Color& rhs)
|
void CompareColor(const Nz::Color& lhs, const Nz::Color& rhs)
|
||||||
{
|
{
|
||||||
|
|
@ -16,46 +16,46 @@ void CompareCMY(const Nz::Color& color, float cyan, float magenta, float yellow)
|
||||||
{
|
{
|
||||||
float retrievedCyan = 0.f, retrievedMagenta = 0.f, retrievedYellow = 0.f;
|
float retrievedCyan = 0.f, retrievedMagenta = 0.f, retrievedYellow = 0.f;
|
||||||
Nz::Color::ToCMY(color, &retrievedCyan, &retrievedMagenta, &retrievedYellow);
|
Nz::Color::ToCMY(color, &retrievedCyan, &retrievedMagenta, &retrievedYellow);
|
||||||
CHECK(retrievedCyan == Approx(cyan).epsilon(epsilon));
|
CHECK(retrievedCyan == Approx(cyan).margin(epsilon));
|
||||||
CHECK(retrievedMagenta == Approx(magenta).epsilon(epsilon));
|
CHECK(retrievedMagenta == Approx(magenta).margin(epsilon));
|
||||||
CHECK(retrievedYellow == Approx(yellow).epsilon(epsilon));
|
CHECK(retrievedYellow == Approx(yellow).margin(epsilon));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompareCMYK(const Nz::Color& color, float cyan, float magenta, float yellow, float black)
|
void CompareCMYK(const Nz::Color& color, float cyan, float magenta, float yellow, float black)
|
||||||
{
|
{
|
||||||
float retrievedCyan = 0.f, retrievedMagenta = 0.f, retrievedYellow = 0.f, retrievedBlack = 0.f;
|
float retrievedCyan = 0.f, retrievedMagenta = 0.f, retrievedYellow = 0.f, retrievedBlack = 0.f;
|
||||||
Nz::Color::ToCMYK(color, &retrievedCyan, &retrievedMagenta, &retrievedYellow, &retrievedBlack);
|
Nz::Color::ToCMYK(color, &retrievedCyan, &retrievedMagenta, &retrievedYellow, &retrievedBlack);
|
||||||
CHECK(retrievedCyan == Approx(cyan).epsilon(epsilon));
|
CHECK(retrievedCyan == Approx(cyan).margin(epsilon));
|
||||||
CHECK(retrievedMagenta == Approx(magenta).epsilon(epsilon));
|
CHECK(retrievedMagenta == Approx(magenta).margin(epsilon));
|
||||||
CHECK(retrievedYellow == Approx(yellow).epsilon(epsilon));
|
CHECK(retrievedYellow == Approx(yellow).margin(epsilon));
|
||||||
CHECK(retrievedBlack == Approx(black).epsilon(epsilon));
|
CHECK(retrievedBlack == Approx(black).margin(epsilon));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompareHSL(const Nz::Color& color, float hue, float saturation, float luminosity)
|
void CompareHSL(const Nz::Color& color, float hue, float saturation, float luminosity)
|
||||||
{
|
{
|
||||||
float retrievedHue = 0.f, retrievedSaturation = 0.f, retrievedLuminosity = 0.f;
|
float retrievedHue = 0.f, retrievedSaturation = 0.f, retrievedLuminosity = 0.f;
|
||||||
Nz::Color::ToHSL(color, &retrievedHue, &retrievedSaturation, &retrievedLuminosity);
|
Nz::Color::ToHSL(color, &retrievedHue, &retrievedSaturation, &retrievedLuminosity);
|
||||||
CHECK(retrievedHue == Approx(hue).epsilon(epsilon));
|
CHECK(retrievedHue == Approx(hue).margin(epsilon));
|
||||||
CHECK(retrievedSaturation == Approx(saturation).epsilon(epsilon));
|
CHECK(retrievedSaturation == Approx(saturation).margin(epsilon));
|
||||||
CHECK(retrievedLuminosity == Approx(luminosity).epsilon(epsilon));
|
CHECK(retrievedLuminosity == Approx(luminosity).margin(epsilon));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompareHSV(const Nz::Color& color, float hue, float saturation, float value)
|
void CompareHSV(const Nz::Color& color, float hue, float saturation, float value)
|
||||||
{
|
{
|
||||||
float retrievedHue = 0.f, retrievedSaturation = 0.f, retrievedValue = 0.f;
|
float retrievedHue = 0.f, retrievedSaturation = 0.f, retrievedValue = 0.f;
|
||||||
Nz::Color::ToHSV(color, &retrievedHue, &retrievedSaturation, &retrievedValue);
|
Nz::Color::ToHSV(color, &retrievedHue, &retrievedSaturation, &retrievedValue);
|
||||||
CHECK(retrievedHue == Approx(hue).epsilon(epsilon));
|
CHECK(retrievedHue == Approx(hue).margin(epsilon));
|
||||||
CHECK(retrievedSaturation == Approx(saturation).epsilon(epsilon));
|
CHECK(retrievedSaturation == Approx(saturation).margin(epsilon));
|
||||||
CHECK(retrievedValue == Approx(value).epsilon(epsilon));
|
CHECK(retrievedValue == Approx(value).margin(epsilon));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompareXYZ(const Nz::Color& color, float x, float y, float z)
|
void CompareXYZ(const Nz::Color& color, float x, float y, float z)
|
||||||
{
|
{
|
||||||
Nz::Vector3f retrievedValues = Nz::Vector3f::Zero();
|
Nz::Vector3f retrievedValues = Nz::Vector3f::Zero();
|
||||||
Nz::Color::ToXYZ(color, &retrievedValues);
|
Nz::Color::ToXYZ(color, &retrievedValues);
|
||||||
CHECK(retrievedValues.x == Approx(x).epsilon(epsilon));
|
CHECK(retrievedValues.x == Approx(x).margin(epsilon));
|
||||||
CHECK(retrievedValues.y == Approx(y).epsilon(epsilon));
|
CHECK(retrievedValues.y == Approx(y).margin(epsilon));
|
||||||
CHECK(retrievedValues.z == Approx(z).epsilon(epsilon));
|
CHECK(retrievedValues.z == Approx(z).margin(epsilon));
|
||||||
}
|
}
|
||||||
|
|
||||||
SCENARIO("Color", "[CORE][COLOR]")
|
SCENARIO("Color", "[CORE][COLOR]")
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ SCENARIO("EulerAngles", "[MATH][EULERANGLES]")
|
||||||
REQUIRE(tmp.roll == Approx(0.f));
|
REQUIRE(tmp.roll == Approx(0.f));
|
||||||
tmp = Nz::Quaternionf(euler30.ToQuaternion()).ToEulerAngles();
|
tmp = Nz::Quaternionf(euler30.ToQuaternion()).ToEulerAngles();
|
||||||
REQUIRE(tmp.pitch == Approx(30.f));
|
REQUIRE(tmp.pitch == Approx(30.f));
|
||||||
REQUIRE(tmp.yaw == Approx(0.f));
|
REQUIRE(tmp.yaw == Approx(0.f).margin(0.0001f));
|
||||||
REQUIRE(tmp.roll == Approx(30.f));
|
REQUIRE(tmp.roll == Approx(30.f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,8 +83,8 @@ SCENARIO("Matrix4", "[MATH][MATRIX4]")
|
||||||
THEN("We get the identity")
|
THEN("We get the identity")
|
||||||
{
|
{
|
||||||
Nz::Matrix4f tmp = matrix1 * invMatrix1;
|
Nz::Matrix4f tmp = matrix1 * invMatrix1;
|
||||||
CHECK(tmp.m32 == Approx(0.f));
|
CHECK(tmp.m32 == Approx(0.f).margin(0.0001f));
|
||||||
CHECK(tmp.m42 == Approx(0.f));
|
CHECK(tmp.m42 == Approx(0.f).margin(0.0001f));
|
||||||
tmp.m32 = 0.f;
|
tmp.m32 = 0.f;
|
||||||
tmp.m42 = 0.f;
|
tmp.m42 = 0.f;
|
||||||
CHECK(tmp == Nz::Matrix4f::Identity());
|
CHECK(tmp == Nz::Matrix4f::Identity());
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ SCENARIO("PhysWorld2D", "[PHYSICS2D][PHYSWORLD2D]")
|
||||||
{
|
{
|
||||||
const Nz::PhysWorld2D::RaycastHit& result = results[i];
|
const Nz::PhysWorld2D::RaycastHit& result = results[i];
|
||||||
CHECK(result.nearestBody == &bodies[i]);
|
CHECK(result.nearestBody == &bodies[i]);
|
||||||
CHECK(result.fraction == Approx(i / 4.f).epsilon(0.1f));
|
CHECK(result.fraction == Approx(i / 4.f).margin(0.1f));
|
||||||
CHECK(result.hitPos == Nz::Vector2f(0.f, i * 10.f));
|
CHECK(result.hitPos == Nz::Vector2f(0.f, i * 10.f));
|
||||||
CHECK(result.hitNormal == -Nz::Vector2f::UnitY());
|
CHECK(result.hitNormal == -Nz::Vector2f::UnitY());
|
||||||
}
|
}
|
||||||
|
|
@ -171,13 +171,13 @@ SCENARIO("PhysWorld2D", "[PHYSICS2D][PHYSWORLD2D]")
|
||||||
world.Step(0.1f);
|
world.Step(0.1f);
|
||||||
CHECK(statusTriggerCollision == 11);
|
CHECK(statusTriggerCollision == 11);
|
||||||
|
|
||||||
CHECK(character.GetPosition().x == Approx(3.1f).epsilon(0.01f));
|
CHECK(character.GetPosition().x == Approx(3.1f).margin(0.01f));
|
||||||
|
|
||||||
for (int i = 0; i != 9; ++i)
|
for (int i = 0; i != 9; ++i)
|
||||||
world.Step(0.1f);
|
world.Step(0.1f);
|
||||||
CHECK(character.GetPosition().x == Approx(4.f).epsilon(0.01f));
|
CHECK(character.GetPosition().x == Approx(4.f).margin(0.01f));
|
||||||
world.Step(0.1f);
|
world.Step(0.1f);
|
||||||
CHECK(character.GetPosition().x == Approx(4.f).epsilon(0.01f));
|
CHECK(character.GetPosition().x == Approx(4.f).margin(0.01f));
|
||||||
CHECK(statusWallCollision == 1); // It should be close to the wall
|
CHECK(statusWallCollision == 1); // It should be close to the wall
|
||||||
|
|
||||||
character.SetVelocity(Nz::Vector2f(-2.f, 0.f));
|
character.SetVelocity(Nz::Vector2f(-2.f, 0.f));
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
Nz::RigidBody2D CreateBody(Nz::PhysWorld2D& world);
|
Nz::RigidBody2D CreateBody(Nz::PhysWorld2D& world);
|
||||||
void EQUALITY(const Nz::RigidBody2D& left, const Nz::RigidBody2D& right);
|
void EQUALITY(const Nz::RigidBody2D& left, const Nz::RigidBody2D& right);
|
||||||
|
void EQUALITY(const Nz::Rectf& left, const Nz::Rectf& right);
|
||||||
|
|
||||||
SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||||
{
|
{
|
||||||
|
|
@ -65,16 +66,15 @@ SCENARIO("RigidBody2D", "[PHYSICS2D][RIGIDBODY2D]")
|
||||||
WHEN("We set a new geometry")
|
WHEN("We set a new geometry")
|
||||||
{
|
{
|
||||||
float radius = 5.f;
|
float radius = 5.f;
|
||||||
Nz::Vector2f positionCircle(0.f, 0.f);
|
body.SetGeom(Nz::CircleCollider2D::New(radius));
|
||||||
Nz::Collider2DRef circle = Nz::CircleCollider2D::New(radius, position);
|
|
||||||
body.SetGeom(circle);
|
|
||||||
|
|
||||||
world.Step(1.f);
|
world.Step(1.f);
|
||||||
|
|
||||||
THEN("The aabb should be updated")
|
THEN("The aabb should be updated")
|
||||||
{
|
{
|
||||||
|
position = body.GetPosition();
|
||||||
Nz::Rectf circleAABB(position.x - radius, position.y - radius, 2.f * radius, 2.f* radius);
|
Nz::Rectf circleAABB(position.x - radius, position.y - radius, 2.f * radius, 2.f* radius);
|
||||||
REQUIRE(body.GetAABB() == circleAABB);
|
EQUALITY(body.GetAABB(), circleAABB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -316,3 +316,11 @@ void EQUALITY(const Nz::RigidBody2D& left, const Nz::RigidBody2D& right)
|
||||||
CHECK(left.GetUserdata() == right.GetUserdata());
|
CHECK(left.GetUserdata() == right.GetUserdata());
|
||||||
CHECK(left.GetVelocity() == right.GetVelocity());
|
CHECK(left.GetVelocity() == right.GetVelocity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EQUALITY(const Nz::Rectf& left, const Nz::Rectf& right)
|
||||||
|
{
|
||||||
|
CHECK(left.x == Approx(right.x));
|
||||||
|
CHECK(left.y == Approx(right.y));
|
||||||
|
CHECK(left.width == Approx(right.width));
|
||||||
|
CHECK(left.height == Approx(right.height));
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,26 +11,97 @@ SCENARIO("EntityOwner", "[NDK][ENTITYOWNER]")
|
||||||
|
|
||||||
WHEN("We set the ownership of the entity to our owner")
|
WHEN("We set the ownership of the entity to our owner")
|
||||||
{
|
{
|
||||||
Ndk::EntityOwner entityOwner(entity);
|
|
||||||
|
|
||||||
THEN("Entity is still valid")
|
THEN("Entity is still valid")
|
||||||
{
|
{
|
||||||
|
REQUIRE(entity.IsValid());
|
||||||
|
|
||||||
|
Ndk::EntityOwner entityOwner(entity);
|
||||||
|
|
||||||
|
world.Update();
|
||||||
CHECK(entity.IsValid());
|
CHECK(entity.IsValid());
|
||||||
}
|
}
|
||||||
|
|
||||||
THEN("Resetting or getting out of scope is no more valid")
|
THEN("Moving an entity owner by constructor works")
|
||||||
{
|
{
|
||||||
|
REQUIRE(entity.IsValid());
|
||||||
|
|
||||||
|
Ndk::EntityOwner entityOwner(entity);
|
||||||
|
Ndk::EntityOwner entityOwner2(std::move(entityOwner));
|
||||||
entityOwner.Reset();
|
entityOwner.Reset();
|
||||||
world.Update(1.f);
|
|
||||||
|
world.Update();
|
||||||
|
CHECK(entity.IsValid());
|
||||||
|
|
||||||
|
entityOwner2.Reset();
|
||||||
|
|
||||||
|
world.Update();
|
||||||
CHECK(!entity.IsValid());
|
CHECK(!entity.IsValid());
|
||||||
}
|
}
|
||||||
|
|
||||||
THEN("Moving an entity owner works")
|
THEN("Moving an entity owner by operator= works")
|
||||||
{
|
{
|
||||||
Ndk::EntityOwner entityOwner2(std::move(entityOwner));
|
REQUIRE(entity.IsValid());
|
||||||
|
|
||||||
|
Ndk::EntityOwner entityOwner(entity);
|
||||||
|
Ndk::EntityOwner entityOwner2;
|
||||||
|
entityOwner2 = std::move(entityOwner);
|
||||||
|
entityOwner.Reset();
|
||||||
|
|
||||||
|
world.Update();
|
||||||
|
CHECK(entity.IsValid());
|
||||||
|
|
||||||
entityOwner2.Reset();
|
entityOwner2.Reset();
|
||||||
world.Update(1.f);
|
|
||||||
REQUIRE(!entity.IsValid());
|
world.Update();
|
||||||
|
CHECK(!entity.IsValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
THEN("Destroying an entity owner destroys its entity")
|
||||||
|
{
|
||||||
|
REQUIRE(entity.IsValid());
|
||||||
|
|
||||||
|
{
|
||||||
|
Ndk::EntityOwner entityOwner(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
world.Update();
|
||||||
|
CHECK(!entity.IsValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
THEN("Resetting an entity owner destroys its entity")
|
||||||
|
{
|
||||||
|
REQUIRE(entity.IsValid());
|
||||||
|
|
||||||
|
Ndk::EntityOwner entityOwner(entity);
|
||||||
|
entityOwner.Reset();
|
||||||
|
|
||||||
|
world.Update();
|
||||||
|
CHECK(!entity.IsValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
THEN("Assigning another entity destroys the first entity")
|
||||||
|
{
|
||||||
|
REQUIRE(entity.IsValid());
|
||||||
|
|
||||||
|
Ndk::EntityOwner entityOwner(entity);
|
||||||
|
entityOwner = world.CreateEntity();
|
||||||
|
|
||||||
|
world.Update();
|
||||||
|
CHECK(!entity.IsValid());
|
||||||
|
}
|
||||||
|
|
||||||
|
THEN("Moving another entity destroys the first entity")
|
||||||
|
{
|
||||||
|
REQUIRE(entity.IsValid());
|
||||||
|
|
||||||
|
Ndk::EntityOwner entityOwner(entity);
|
||||||
|
Ndk::EntityHandle entity2 = world.CreateEntity();
|
||||||
|
|
||||||
|
entityOwner = std::move(entity2);
|
||||||
|
|
||||||
|
world.Update();
|
||||||
|
CHECK(!entity.IsValid());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
LIBRARY.Name = "chipmunk"
|
||||||
|
|
||||||
|
LIBRARY.Defines = {"CP_USE_CGTYPES=0", "TARGET_OS_IPHONE=0", "TARGET_OS_MAC=0"}
|
||||||
|
|
||||||
|
LIBRARY.Language = "C++"
|
||||||
|
|
||||||
|
LIBRARY.Files = {
|
||||||
|
"../thirdparty/include/chipmunk/*.h",
|
||||||
|
"../thirdparty/src/chipmunk/*.h",
|
||||||
|
"../thirdparty/src/chipmunk/*.c",
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
LIBRARY.Name = "lua"
|
||||||
|
|
||||||
|
LIBRARY.Language = "C++" -- Compile as C++ to make Lua use exceptions instead of SJLJ
|
||||||
|
|
||||||
|
LIBRARY.Files = {
|
||||||
|
"../thirdparty/include/Lua/*.h",
|
||||||
|
"../thirdparty/include/Lua/*.hpp",
|
||||||
|
"../thirdparty/src/Lua/*.h",
|
||||||
|
"../thirdparty/src/Lua/*.cpp"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
Changement:
|
||||||
|
----------------------------Erreurs via exceptions-----------------------------
|
||||||
|
Remplacement de l'extension de tous les fichiers .c en .cpp
|
||||||
|
|
||||||
|
---------------------------------Compatibilité---------------------------------
|
||||||
|
-Dans tous les fichiers:
|
||||||
|
Remplacement des lignes:
|
||||||
|
#include "lauxlib.h"
|
||||||
|
#include "lua.h"
|
||||||
|
#include "luaconf.h"
|
||||||
|
#include "lualib.h"
|
||||||
|
|
||||||
|
Par les lignes:
|
||||||
|
#include <Lua/lauxlib.h>
|
||||||
|
#include <Lua/lua.h>
|
||||||
|
#include <Lua/luaconf.h>
|
||||||
|
#include <Lua/lualib.h>
|
||||||
|
|
||||||
|
---------------------Support des commentaires longs du C++----------------------
|
||||||
|
-Fichier llex.cpp (Aux alentours de la ligne 468)
|
||||||
|
static int llex (LexState *ls, SemInfo *seminfo) {
|
||||||
|
+#if defined(LUA_CPPCOMT_LONG)
|
||||||
|
+ int last;
|
||||||
|
+#endif
|
||||||
|
luaZ_resetbuffer(ls->buff);
|
||||||
|
for (;;) {
|
||||||
|
-Fichier llex.cpp (Aux alentours de la ligne 530):
|
||||||
|
case '/': {
|
||||||
|
next(ls);
|
||||||
|
if (check_next1(ls, '/')) return TK_IDIV;
|
||||||
|
+#if defined(LUA_CPPCOMT_LONG)
|
||||||
|
+ /* bn 01/2012: added C++-style comments */
|
||||||
|
+ /* Lynix 02/2015: Fixed it for Lua 5.3.0 */
|
||||||
|
+ else if (check_next1('*')) {
|
||||||
|
+ last = 0;
|
||||||
|
+ while (ls->current != EOZ) {
|
||||||
|
+ if (last == '*' && ls->current == '/') break;
|
||||||
|
+ last = ls->current;
|
||||||
|
+ next(ls); /* skip until closing marker (or end of file) */
|
||||||
|
+ }
|
||||||
|
+ if (ls->current == EOZ)
|
||||||
|
+ lexerror(ls, "unfinished long comment", TK_EOS);
|
||||||
|
+ else next(ls);
|
||||||
|
+ }
|
||||||
|
+#endif /* LUA_CPPCOMT_LONG */
|
||||||
|
else return '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
-Fichier llex.h (Aux alentours de la ligne 20):
|
||||||
|
|
||||||
|
+/* bn 01/2012: added C++-style comments */
|
||||||
|
+#define LUA_CPPCOMT_LONG
|
||||||
|
+/* end changes */
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* WARNING: if you change the order of this enumeration,
|
||||||
|
* grep "ORDER RESERVED"
|
||||||
|
|
||||||
|
---------------------Support de la négation du C/C++ (!=)----------------------
|
||||||
|
-Fichier llex.h (Aux alentours de la ligne 15):
|
||||||
|
+#define LUA_CPPNEG
|
||||||
|
|
||||||
|
/*
|
||||||
|
* WARNING: if you change the order of this enumeration,
|
||||||
|
* grep "ORDER RESERVED"
|
||||||
|
-Fichier llex.h (Aux alentours de la ligne 37)
|
||||||
|
TK_SHL, TK_SHR,
|
||||||
|
TK_DBCOLON, TK_EOS,
|
||||||
|
+#ifdef LUA_CPPNEG
|
||||||
|
+ TK_CNE,
|
||||||
|
+#endif
|
||||||
|
TK_FLT, TK_INT, TK_NAME, TK_STRING
|
||||||
|
|
||||||
|
-Fichier llex.cpp (Aux alentours de la ligne 44)
|
||||||
|
"//", "..", "...", "==", ">=", "<=", "~=",
|
||||||
|
"<<", ">>", "::", "<eof>",
|
||||||
|
+#ifdef LUA_CPPNEG
|
||||||
|
+ "!=",
|
||||||
|
+#endif
|
||||||
|
"<number>", "<integer>", "<name>", "<string>"
|
||||||
|
-Fichier llex.cpp (Aux alentours de la ligne 556)
|
||||||
|
if (check_next1(ls, '/')) return TK_IDIV;
|
||||||
|
else return '/';
|
||||||
|
}
|
||||||
|
+#ifdef LUA_CPPNEG
|
||||||
|
+ case '!': {
|
||||||
|
+ next(ls);
|
||||||
|
+ if (check_next1(ls, '=')) return TK_NE;
|
||||||
|
+ else return '!';
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
case '~': {
|
||||||
|
next(ls);
|
||||||
|
if (check_next1(ls, '=')) return TK_NE;
|
||||||
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
LIBRARY.Name = "stb_image"
|
||||||
|
|
||||||
|
LIBRARY.Defines = {
|
||||||
|
"STBI_NO_STDIO"
|
||||||
|
}
|
||||||
|
|
||||||
|
LIBRARY.Language = "C++" -- Compile as C++ because C99 isn't widely supported
|
||||||
|
|
||||||
|
LIBRARY.Files = {
|
||||||
|
"../thirdparty/include/stb/*.h",
|
||||||
|
"../thirdparty/src/stb/*.cpp"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,656 @@
|
||||||
|
#ifndef AL_AL_H
|
||||||
|
#define AL_AL_H
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_API
|
||||||
|
#if defined(AL_LIBTYPE_STATIC)
|
||||||
|
#define AL_API
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
#define AL_API __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
#define AL_API extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define AL_APIENTRY __cdecl
|
||||||
|
#else
|
||||||
|
#define AL_APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/** Deprecated macro. */
|
||||||
|
#define OPENAL
|
||||||
|
#define ALAPI AL_API
|
||||||
|
#define ALAPIENTRY AL_APIENTRY
|
||||||
|
#define AL_INVALID (-1)
|
||||||
|
#define AL_ILLEGAL_ENUM AL_INVALID_ENUM
|
||||||
|
#define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION
|
||||||
|
|
||||||
|
/** Supported AL version. */
|
||||||
|
#define AL_VERSION_1_0
|
||||||
|
#define AL_VERSION_1_1
|
||||||
|
|
||||||
|
/** 8-bit boolean */
|
||||||
|
typedef char ALboolean;
|
||||||
|
|
||||||
|
/** character */
|
||||||
|
typedef char ALchar;
|
||||||
|
|
||||||
|
/** signed 8-bit 2's complement integer */
|
||||||
|
typedef signed char ALbyte;
|
||||||
|
|
||||||
|
/** unsigned 8-bit integer */
|
||||||
|
typedef unsigned char ALubyte;
|
||||||
|
|
||||||
|
/** signed 16-bit 2's complement integer */
|
||||||
|
typedef short ALshort;
|
||||||
|
|
||||||
|
/** unsigned 16-bit integer */
|
||||||
|
typedef unsigned short ALushort;
|
||||||
|
|
||||||
|
/** signed 32-bit 2's complement integer */
|
||||||
|
typedef int ALint;
|
||||||
|
|
||||||
|
/** unsigned 32-bit integer */
|
||||||
|
typedef unsigned int ALuint;
|
||||||
|
|
||||||
|
/** non-negative 32-bit binary integer size */
|
||||||
|
typedef int ALsizei;
|
||||||
|
|
||||||
|
/** enumerated 32-bit value */
|
||||||
|
typedef int ALenum;
|
||||||
|
|
||||||
|
/** 32-bit IEEE754 floating-point */
|
||||||
|
typedef float ALfloat;
|
||||||
|
|
||||||
|
/** 64-bit IEEE754 floating-point */
|
||||||
|
typedef double ALdouble;
|
||||||
|
|
||||||
|
/** void type (for opaque pointers only) */
|
||||||
|
typedef void ALvoid;
|
||||||
|
|
||||||
|
|
||||||
|
/* Enumerant values begin at column 50. No tabs. */
|
||||||
|
|
||||||
|
/** "no distance model" or "no buffer" */
|
||||||
|
#define AL_NONE 0
|
||||||
|
|
||||||
|
/** Boolean False. */
|
||||||
|
#define AL_FALSE 0
|
||||||
|
|
||||||
|
/** Boolean True. */
|
||||||
|
#define AL_TRUE 1
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Relative source.
|
||||||
|
* Type: ALboolean
|
||||||
|
* Range: [AL_TRUE, AL_FALSE]
|
||||||
|
* Default: AL_FALSE
|
||||||
|
*
|
||||||
|
* Specifies if the Source has relative coordinates.
|
||||||
|
*/
|
||||||
|
#define AL_SOURCE_RELATIVE 0x202
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inner cone angle, in degrees.
|
||||||
|
* Type: ALint, ALfloat
|
||||||
|
* Range: [0 - 360]
|
||||||
|
* Default: 360
|
||||||
|
*
|
||||||
|
* The angle covered by the inner cone, where the source will not attenuate.
|
||||||
|
*/
|
||||||
|
#define AL_CONE_INNER_ANGLE 0x1001
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outer cone angle, in degrees.
|
||||||
|
* Range: [0 - 360]
|
||||||
|
* Default: 360
|
||||||
|
*
|
||||||
|
* The angle covered by the outer cone, where the source will be fully
|
||||||
|
* attenuated.
|
||||||
|
*/
|
||||||
|
#define AL_CONE_OUTER_ANGLE 0x1002
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source pitch.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.5 - 2.0]
|
||||||
|
* Default: 1.0
|
||||||
|
*
|
||||||
|
* A multiplier for the frequency (sample rate) of the source's buffer.
|
||||||
|
*/
|
||||||
|
#define AL_PITCH 0x1003
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source or listener position.
|
||||||
|
* Type: ALfloat[3], ALint[3]
|
||||||
|
* Default: {0, 0, 0}
|
||||||
|
*
|
||||||
|
* The source or listener location in three dimensional space.
|
||||||
|
*
|
||||||
|
* OpenAL, like OpenGL, uses a right handed coordinate system, where in a
|
||||||
|
* frontal default view X (thumb) points right, Y points up (index finger), and
|
||||||
|
* Z points towards the viewer/camera (middle finger).
|
||||||
|
*
|
||||||
|
* To switch from a left handed coordinate system, flip the sign on the Z
|
||||||
|
* coordinate.
|
||||||
|
*/
|
||||||
|
#define AL_POSITION 0x1004
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source direction.
|
||||||
|
* Type: ALfloat[3], ALint[3]
|
||||||
|
* Default: {0, 0, 0}
|
||||||
|
*
|
||||||
|
* Specifies the current direction in local space.
|
||||||
|
* A zero-length vector specifies an omni-directional source (cone is ignored).
|
||||||
|
*/
|
||||||
|
#define AL_DIRECTION 0x1005
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source or listener velocity.
|
||||||
|
* Type: ALfloat[3], ALint[3]
|
||||||
|
* Default: {0, 0, 0}
|
||||||
|
*
|
||||||
|
* Specifies the current velocity in local space.
|
||||||
|
*/
|
||||||
|
#define AL_VELOCITY 0x1006
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source looping.
|
||||||
|
* Type: ALboolean
|
||||||
|
* Range: [AL_TRUE, AL_FALSE]
|
||||||
|
* Default: AL_FALSE
|
||||||
|
*
|
||||||
|
* Specifies whether source is looping.
|
||||||
|
*/
|
||||||
|
#define AL_LOOPING 0x1007
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source buffer.
|
||||||
|
* Type: ALuint
|
||||||
|
* Range: any valid Buffer.
|
||||||
|
*
|
||||||
|
* Specifies the buffer to provide sound samples.
|
||||||
|
*/
|
||||||
|
#define AL_BUFFER 0x1009
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source or listener gain.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
*
|
||||||
|
* A value of 1.0 means unattenuated. Each division by 2 equals an attenuation
|
||||||
|
* of about -6dB. Each multiplicaton by 2 equals an amplification of about
|
||||||
|
* +6dB.
|
||||||
|
*
|
||||||
|
* A value of 0.0 is meaningless with respect to a logarithmic scale; it is
|
||||||
|
* silent.
|
||||||
|
*/
|
||||||
|
#define AL_GAIN 0x100A
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minimum source gain.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - 1.0]
|
||||||
|
*
|
||||||
|
* The minimum gain allowed for a source, after distance and cone attenation is
|
||||||
|
* applied (if applicable).
|
||||||
|
*/
|
||||||
|
#define AL_MIN_GAIN 0x100D
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum source gain.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - 1.0]
|
||||||
|
*
|
||||||
|
* The maximum gain allowed for a source, after distance and cone attenation is
|
||||||
|
* applied (if applicable).
|
||||||
|
*/
|
||||||
|
#define AL_MAX_GAIN 0x100E
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener orientation.
|
||||||
|
* Type: ALfloat[6]
|
||||||
|
* Default: {0.0, 0.0, -1.0, 0.0, 1.0, 0.0}
|
||||||
|
*
|
||||||
|
* Effectively two three dimensional vectors. The first vector is the front (or
|
||||||
|
* "at") and the second is the top (or "up").
|
||||||
|
*
|
||||||
|
* Both vectors are in local space.
|
||||||
|
*/
|
||||||
|
#define AL_ORIENTATION 0x100F
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source state (query only).
|
||||||
|
* Type: ALint
|
||||||
|
* Range: [AL_INITIAL, AL_PLAYING, AL_PAUSED, AL_STOPPED]
|
||||||
|
*/
|
||||||
|
#define AL_SOURCE_STATE 0x1010
|
||||||
|
|
||||||
|
/** Source state value. */
|
||||||
|
#define AL_INITIAL 0x1011
|
||||||
|
#define AL_PLAYING 0x1012
|
||||||
|
#define AL_PAUSED 0x1013
|
||||||
|
#define AL_STOPPED 0x1014
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source Buffer Queue size (query only).
|
||||||
|
* Type: ALint
|
||||||
|
*
|
||||||
|
* The number of buffers queued using alSourceQueueBuffers, minus the buffers
|
||||||
|
* removed with alSourceUnqueueBuffers.
|
||||||
|
*/
|
||||||
|
#define AL_BUFFERS_QUEUED 0x1015
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source Buffer Queue processed count (query only).
|
||||||
|
* Type: ALint
|
||||||
|
*
|
||||||
|
* The number of queued buffers that have been fully processed, and can be
|
||||||
|
* removed with alSourceUnqueueBuffers.
|
||||||
|
*
|
||||||
|
* Looping sources will never fully process buffers because they will be set to
|
||||||
|
* play again for when the source loops.
|
||||||
|
*/
|
||||||
|
#define AL_BUFFERS_PROCESSED 0x1016
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source reference distance.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
* Default: 1.0
|
||||||
|
*
|
||||||
|
* The distance in units that no attenuation occurs.
|
||||||
|
*
|
||||||
|
* At 0.0, no distance attenuation ever occurs on non-linear attenuation models.
|
||||||
|
*/
|
||||||
|
#define AL_REFERENCE_DISTANCE 0x1020
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source rolloff factor.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
* Default: 1.0
|
||||||
|
*
|
||||||
|
* Multiplier to exaggerate or diminish distance attenuation.
|
||||||
|
*
|
||||||
|
* At 0.0, no distance attenuation ever occurs.
|
||||||
|
*/
|
||||||
|
#define AL_ROLLOFF_FACTOR 0x1021
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outer cone gain.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - 1.0]
|
||||||
|
* Default: 0.0
|
||||||
|
*
|
||||||
|
* The gain attenuation applied when the listener is outside of the source's
|
||||||
|
* outer cone.
|
||||||
|
*/
|
||||||
|
#define AL_CONE_OUTER_GAIN 0x1022
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source maximum distance.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
* Default: +inf
|
||||||
|
*
|
||||||
|
* The distance above which the source is not attenuated any further with a
|
||||||
|
* clamped distance model, or where attenuation reaches 0.0 gain for linear
|
||||||
|
* distance models with a default rolloff factor.
|
||||||
|
*/
|
||||||
|
#define AL_MAX_DISTANCE 0x1023
|
||||||
|
|
||||||
|
/** Source buffer position, in seconds */
|
||||||
|
#define AL_SEC_OFFSET 0x1024
|
||||||
|
/** Source buffer position, in sample frames */
|
||||||
|
#define AL_SAMPLE_OFFSET 0x1025
|
||||||
|
/** Source buffer position, in bytes */
|
||||||
|
#define AL_BYTE_OFFSET 0x1026
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Source type (query only).
|
||||||
|
* Type: ALint
|
||||||
|
* Range: [AL_STATIC, AL_STREAMING, AL_UNDETERMINED]
|
||||||
|
*
|
||||||
|
* A Source is Static if a Buffer has been attached using AL_BUFFER.
|
||||||
|
*
|
||||||
|
* A Source is Streaming if one or more Buffers have been attached using
|
||||||
|
* alSourceQueueBuffers.
|
||||||
|
*
|
||||||
|
* A Source is Undetermined when it has the NULL buffer attached using
|
||||||
|
* AL_BUFFER.
|
||||||
|
*/
|
||||||
|
#define AL_SOURCE_TYPE 0x1027
|
||||||
|
|
||||||
|
/** Source type value. */
|
||||||
|
#define AL_STATIC 0x1028
|
||||||
|
#define AL_STREAMING 0x1029
|
||||||
|
#define AL_UNDETERMINED 0x1030
|
||||||
|
|
||||||
|
/** Buffer format specifier. */
|
||||||
|
#define AL_FORMAT_MONO8 0x1100
|
||||||
|
#define AL_FORMAT_MONO16 0x1101
|
||||||
|
#define AL_FORMAT_STEREO8 0x1102
|
||||||
|
#define AL_FORMAT_STEREO16 0x1103
|
||||||
|
|
||||||
|
/** Buffer frequency (query only). */
|
||||||
|
#define AL_FREQUENCY 0x2001
|
||||||
|
/** Buffer bits per sample (query only). */
|
||||||
|
#define AL_BITS 0x2002
|
||||||
|
/** Buffer channel count (query only). */
|
||||||
|
#define AL_CHANNELS 0x2003
|
||||||
|
/** Buffer data size (query only). */
|
||||||
|
#define AL_SIZE 0x2004
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Buffer state.
|
||||||
|
*
|
||||||
|
* Not for public use.
|
||||||
|
*/
|
||||||
|
#define AL_UNUSED 0x2010
|
||||||
|
#define AL_PENDING 0x2011
|
||||||
|
#define AL_PROCESSED 0x2012
|
||||||
|
|
||||||
|
|
||||||
|
/** No error. */
|
||||||
|
#define AL_NO_ERROR 0
|
||||||
|
|
||||||
|
/** Invalid name paramater passed to AL call. */
|
||||||
|
#define AL_INVALID_NAME 0xA001
|
||||||
|
|
||||||
|
/** Invalid enum parameter passed to AL call. */
|
||||||
|
#define AL_INVALID_ENUM 0xA002
|
||||||
|
|
||||||
|
/** Invalid value parameter passed to AL call. */
|
||||||
|
#define AL_INVALID_VALUE 0xA003
|
||||||
|
|
||||||
|
/** Illegal AL call. */
|
||||||
|
#define AL_INVALID_OPERATION 0xA004
|
||||||
|
|
||||||
|
/** Not enough memory. */
|
||||||
|
#define AL_OUT_OF_MEMORY 0xA005
|
||||||
|
|
||||||
|
|
||||||
|
/** Context string: Vendor ID. */
|
||||||
|
#define AL_VENDOR 0xB001
|
||||||
|
/** Context string: Version. */
|
||||||
|
#define AL_VERSION 0xB002
|
||||||
|
/** Context string: Renderer ID. */
|
||||||
|
#define AL_RENDERER 0xB003
|
||||||
|
/** Context string: Space-separated extension list. */
|
||||||
|
#define AL_EXTENSIONS 0xB004
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Doppler scale.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0 - ]
|
||||||
|
* Default: 1.0
|
||||||
|
*
|
||||||
|
* Scale for source and listener velocities.
|
||||||
|
*/
|
||||||
|
#define AL_DOPPLER_FACTOR 0xC000
|
||||||
|
AL_API void AL_APIENTRY alDopplerFactor(ALfloat value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Doppler velocity (deprecated).
|
||||||
|
*
|
||||||
|
* A multiplier applied to the Speed of Sound.
|
||||||
|
*/
|
||||||
|
#define AL_DOPPLER_VELOCITY 0xC001
|
||||||
|
AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Speed of Sound, in units per second.
|
||||||
|
* Type: ALfloat
|
||||||
|
* Range: [0.0001 - ]
|
||||||
|
* Default: 343.3
|
||||||
|
*
|
||||||
|
* The speed at which sound waves are assumed to travel, when calculating the
|
||||||
|
* doppler effect.
|
||||||
|
*/
|
||||||
|
#define AL_SPEED_OF_SOUND 0xC003
|
||||||
|
AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Distance attenuation model.
|
||||||
|
* Type: ALint
|
||||||
|
* Range: [AL_NONE, AL_INVERSE_DISTANCE, AL_INVERSE_DISTANCE_CLAMPED,
|
||||||
|
* AL_LINEAR_DISTANCE, AL_LINEAR_DISTANCE_CLAMPED,
|
||||||
|
* AL_EXPONENT_DISTANCE, AL_EXPONENT_DISTANCE_CLAMPED]
|
||||||
|
* Default: AL_INVERSE_DISTANCE_CLAMPED
|
||||||
|
*
|
||||||
|
* The model by which sources attenuate with distance.
|
||||||
|
*
|
||||||
|
* None - No distance attenuation.
|
||||||
|
* Inverse - Doubling the distance halves the source gain.
|
||||||
|
* Linear - Linear gain scaling between the reference and max distances.
|
||||||
|
* Exponent - Exponential gain dropoff.
|
||||||
|
*
|
||||||
|
* Clamped variations work like the non-clamped counterparts, except the
|
||||||
|
* distance calculated is clamped between the reference and max distances.
|
||||||
|
*/
|
||||||
|
#define AL_DISTANCE_MODEL 0xD000
|
||||||
|
AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel);
|
||||||
|
|
||||||
|
/** Distance model value. */
|
||||||
|
#define AL_INVERSE_DISTANCE 0xD001
|
||||||
|
#define AL_INVERSE_DISTANCE_CLAMPED 0xD002
|
||||||
|
#define AL_LINEAR_DISTANCE 0xD003
|
||||||
|
#define AL_LINEAR_DISTANCE_CLAMPED 0xD004
|
||||||
|
#define AL_EXPONENT_DISTANCE 0xD005
|
||||||
|
#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
|
||||||
|
|
||||||
|
/** Renderer State management. */
|
||||||
|
AL_API void AL_APIENTRY alEnable(ALenum capability);
|
||||||
|
AL_API void AL_APIENTRY alDisable(ALenum capability);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsEnabled(ALenum capability);
|
||||||
|
|
||||||
|
/** State retrieval. */
|
||||||
|
AL_API const ALchar* AL_APIENTRY alGetString(ALenum param);
|
||||||
|
AL_API void AL_APIENTRY alGetBooleanv(ALenum param, ALboolean *values);
|
||||||
|
AL_API void AL_APIENTRY alGetIntegerv(ALenum param, ALint *values);
|
||||||
|
AL_API void AL_APIENTRY alGetFloatv(ALenum param, ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alGetDoublev(ALenum param, ALdouble *values);
|
||||||
|
AL_API ALboolean AL_APIENTRY alGetBoolean(ALenum param);
|
||||||
|
AL_API ALint AL_APIENTRY alGetInteger(ALenum param);
|
||||||
|
AL_API ALfloat AL_APIENTRY alGetFloat(ALenum param);
|
||||||
|
AL_API ALdouble AL_APIENTRY alGetDouble(ALenum param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error retrieval.
|
||||||
|
*
|
||||||
|
* Obtain the first error generated in the AL context since the last check.
|
||||||
|
*/
|
||||||
|
AL_API ALenum AL_APIENTRY alGetError(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extension support.
|
||||||
|
*
|
||||||
|
* Query for the presence of an extension, and obtain any appropriate function
|
||||||
|
* pointers and enum values.
|
||||||
|
*/
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extname);
|
||||||
|
AL_API void* AL_APIENTRY alGetProcAddress(const ALchar *fname);
|
||||||
|
AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *ename);
|
||||||
|
|
||||||
|
|
||||||
|
/** Set Listener parameters */
|
||||||
|
AL_API void AL_APIENTRY alListenerf(ALenum param, ALfloat value);
|
||||||
|
AL_API void AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
AL_API void AL_APIENTRY alListenerfv(ALenum param, const ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alListeneri(ALenum param, ALint value);
|
||||||
|
AL_API void AL_APIENTRY alListener3i(ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
AL_API void AL_APIENTRY alListeneriv(ALenum param, const ALint *values);
|
||||||
|
|
||||||
|
/** Get Listener parameters */
|
||||||
|
AL_API void AL_APIENTRY alGetListenerf(ALenum param, ALfloat *value);
|
||||||
|
AL_API void AL_APIENTRY alGetListener3f(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetListenerfv(ALenum param, ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alGetListeneri(ALenum param, ALint *value);
|
||||||
|
AL_API void AL_APIENTRY alGetListener3i(ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetListeneriv(ALenum param, ALint *values);
|
||||||
|
|
||||||
|
|
||||||
|
/** Create Source objects. */
|
||||||
|
AL_API void AL_APIENTRY alGenSources(ALsizei n, ALuint *sources);
|
||||||
|
/** Delete Source objects. */
|
||||||
|
AL_API void AL_APIENTRY alDeleteSources(ALsizei n, const ALuint *sources);
|
||||||
|
/** Verify a handle is a valid Source. */
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsSource(ALuint source);
|
||||||
|
|
||||||
|
/** Set Source parameters. */
|
||||||
|
AL_API void AL_APIENTRY alSourcef(ALuint source, ALenum param, ALfloat value);
|
||||||
|
AL_API void AL_APIENTRY alSource3f(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
AL_API void AL_APIENTRY alSourcefv(ALuint source, ALenum param, const ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alSourcei(ALuint source, ALenum param, ALint value);
|
||||||
|
AL_API void AL_APIENTRY alSource3i(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
AL_API void AL_APIENTRY alSourceiv(ALuint source, ALenum param, const ALint *values);
|
||||||
|
|
||||||
|
/** Get Source parameters. */
|
||||||
|
AL_API void AL_APIENTRY alGetSourcef(ALuint source, ALenum param, ALfloat *value);
|
||||||
|
AL_API void AL_APIENTRY alGetSource3f(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcefv(ALuint source, ALenum param, ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcei(ALuint source, ALenum param, ALint *value);
|
||||||
|
AL_API void AL_APIENTRY alGetSource3i(ALuint source, ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetSourceiv(ALuint source, ALenum param, ALint *values);
|
||||||
|
|
||||||
|
|
||||||
|
/** Play, replay, or resume (if paused) a list of Sources */
|
||||||
|
AL_API void AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources);
|
||||||
|
/** Stop a list of Sources */
|
||||||
|
AL_API void AL_APIENTRY alSourceStopv(ALsizei n, const ALuint *sources);
|
||||||
|
/** Rewind a list of Sources */
|
||||||
|
AL_API void AL_APIENTRY alSourceRewindv(ALsizei n, const ALuint *sources);
|
||||||
|
/** Pause a list of Sources */
|
||||||
|
AL_API void AL_APIENTRY alSourcePausev(ALsizei n, const ALuint *sources);
|
||||||
|
|
||||||
|
/** Play, replay, or resume a Source */
|
||||||
|
AL_API void AL_APIENTRY alSourcePlay(ALuint source);
|
||||||
|
/** Stop a Source */
|
||||||
|
AL_API void AL_APIENTRY alSourceStop(ALuint source);
|
||||||
|
/** Rewind a Source (set playback postiton to beginning) */
|
||||||
|
AL_API void AL_APIENTRY alSourceRewind(ALuint source);
|
||||||
|
/** Pause a Source */
|
||||||
|
AL_API void AL_APIENTRY alSourcePause(ALuint source);
|
||||||
|
|
||||||
|
/** Queue buffers onto a source */
|
||||||
|
AL_API void AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei nb, const ALuint *buffers);
|
||||||
|
/** Unqueue processed buffers from a source */
|
||||||
|
AL_API void AL_APIENTRY alSourceUnqueueBuffers(ALuint source, ALsizei nb, ALuint *buffers);
|
||||||
|
|
||||||
|
|
||||||
|
/** Create Buffer objects */
|
||||||
|
AL_API void AL_APIENTRY alGenBuffers(ALsizei n, ALuint *buffers);
|
||||||
|
/** Delete Buffer objects */
|
||||||
|
AL_API void AL_APIENTRY alDeleteBuffers(ALsizei n, const ALuint *buffers);
|
||||||
|
/** Verify a handle is a valid Buffer */
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsBuffer(ALuint buffer);
|
||||||
|
|
||||||
|
/** Specifies the data to be copied into a buffer */
|
||||||
|
AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq);
|
||||||
|
|
||||||
|
/** Set Buffer parameters, */
|
||||||
|
AL_API void AL_APIENTRY alBufferf(ALuint buffer, ALenum param, ALfloat value);
|
||||||
|
AL_API void AL_APIENTRY alBuffer3f(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
AL_API void AL_APIENTRY alBufferfv(ALuint buffer, ALenum param, const ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alBufferi(ALuint buffer, ALenum param, ALint value);
|
||||||
|
AL_API void AL_APIENTRY alBuffer3i(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
AL_API void AL_APIENTRY alBufferiv(ALuint buffer, ALenum param, const ALint *values);
|
||||||
|
|
||||||
|
/** Get Buffer parameters. */
|
||||||
|
AL_API void AL_APIENTRY alGetBufferf(ALuint buffer, ALenum param, ALfloat *value);
|
||||||
|
AL_API void AL_APIENTRY alGetBuffer3f(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetBufferfv(ALuint buffer, ALenum param, ALfloat *values);
|
||||||
|
AL_API void AL_APIENTRY alGetBufferi(ALuint buffer, ALenum param, ALint *value);
|
||||||
|
AL_API void AL_APIENTRY alGetBuffer3i(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetBufferiv(ALuint buffer, ALenum param, ALint *values);
|
||||||
|
|
||||||
|
/** Pointer-to-function type, useful for dynamically getting AL entry points. */
|
||||||
|
typedef void (AL_APIENTRY *LPALENABLE)(ALenum capability);
|
||||||
|
typedef void (AL_APIENTRY *LPALDISABLE)(ALenum capability);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISENABLED)(ALenum capability);
|
||||||
|
typedef const ALchar* (AL_APIENTRY *LPALGETSTRING)(ALenum param);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBOOLEANV)(ALenum param, ALboolean *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETINTEGERV)(ALenum param, ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFLOATV)(ALenum param, ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETDOUBLEV)(ALenum param, ALdouble *values);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALGETBOOLEAN)(ALenum param);
|
||||||
|
typedef ALint (AL_APIENTRY *LPALGETINTEGER)(ALenum param);
|
||||||
|
typedef ALfloat (AL_APIENTRY *LPALGETFLOAT)(ALenum param);
|
||||||
|
typedef ALdouble (AL_APIENTRY *LPALGETDOUBLE)(ALenum param);
|
||||||
|
typedef ALenum (AL_APIENTRY *LPALGETERROR)(void);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISEXTENSIONPRESENT)(const ALchar *extname);
|
||||||
|
typedef void* (AL_APIENTRY *LPALGETPROCADDRESS)(const ALchar *fname);
|
||||||
|
typedef ALenum (AL_APIENTRY *LPALGETENUMVALUE)(const ALchar *ename);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENERF)(ALenum param, ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENER3F)(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENERFV)(ALenum param, const ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENERI)(ALenum param, ALint value);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENER3I)(ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALLISTENERIV)(ALenum param, const ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENERF)(ALenum param, ALfloat *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENER3F)(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENERFV)(ALenum param, ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENERI)(ALenum param, ALint *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENER3I)(ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETLISTENERIV)(ALenum param, ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGENSOURCES)(ALsizei n, ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETESOURCES)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISSOURCE)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEF)(ALuint source, ALenum param, ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCE3F)(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEFV)(ALuint source, ALenum param, const ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEI)(ALuint source, ALenum param, ALint value);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCE3I)(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEIV)(ALuint source, ALenum param, const ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCEF)(ALuint source, ALenum param, ALfloat *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCE3F)(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCEFV)(ALuint source, ALenum param, ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCEI)(ALuint source, ALenum param, ALint *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCE3I)(ALuint source, ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETSOURCEIV)(ALuint source, ALenum param, ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEPLAYV)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCESTOPV)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEREWINDV)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEPAUSEV)(ALsizei n, const ALuint *sources);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEPLAY)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCESTOP)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEREWIND)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEPAUSE)(ALuint source);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEQUEUEBUFFERS)(ALuint source, ALsizei nb, const ALuint *buffers);
|
||||||
|
typedef void (AL_APIENTRY *LPALSOURCEUNQUEUEBUFFERS)(ALuint source, ALsizei nb, ALuint *buffers);
|
||||||
|
typedef void (AL_APIENTRY *LPALGENBUFFERS)(ALsizei n, ALuint *buffers);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETEBUFFERS)(ALsizei n, const ALuint *buffers);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISBUFFER)(ALuint buffer);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERDATA)(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERF)(ALuint buffer, ALenum param, ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFER3F)(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERFV)(ALuint buffer, ALenum param, const ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERI)(ALuint buffer, ALenum param, ALint value);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFER3I)(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALBUFFERIV)(ALuint buffer, ALenum param, const ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFERF)(ALuint buffer, ALenum param, ALfloat *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFER3F)(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFERFV)(ALuint buffer, ALenum param, ALfloat *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFERI)(ALuint buffer, ALenum param, ALint *value);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFER3I)(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETBUFFERIV)(ALuint buffer, ALenum param, ALint *values);
|
||||||
|
typedef void (AL_APIENTRY *LPALDOPPLERFACTOR)(ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALDOPPLERVELOCITY)(ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALSPEEDOFSOUND)(ALfloat value);
|
||||||
|
typedef void (AL_APIENTRY *LPALDISTANCEMODEL)(ALenum distanceModel);
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* AL_AL_H */
|
||||||
|
|
@ -0,0 +1,237 @@
|
||||||
|
#ifndef AL_ALC_H
|
||||||
|
#define AL_ALC_H
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_API
|
||||||
|
#if defined(AL_LIBTYPE_STATIC)
|
||||||
|
#define ALC_API
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
#define ALC_API __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
#define ALC_API extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define ALC_APIENTRY __cdecl
|
||||||
|
#else
|
||||||
|
#define ALC_APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/** Deprecated macro. */
|
||||||
|
#define ALCAPI ALC_API
|
||||||
|
#define ALCAPIENTRY ALC_APIENTRY
|
||||||
|
#define ALC_INVALID 0
|
||||||
|
|
||||||
|
/** Supported ALC version? */
|
||||||
|
#define ALC_VERSION_0_1 1
|
||||||
|
|
||||||
|
/** Opaque device handle */
|
||||||
|
typedef struct ALCdevice_struct ALCdevice;
|
||||||
|
/** Opaque context handle */
|
||||||
|
typedef struct ALCcontext_struct ALCcontext;
|
||||||
|
|
||||||
|
/** 8-bit boolean */
|
||||||
|
typedef char ALCboolean;
|
||||||
|
|
||||||
|
/** character */
|
||||||
|
typedef char ALCchar;
|
||||||
|
|
||||||
|
/** signed 8-bit 2's complement integer */
|
||||||
|
typedef signed char ALCbyte;
|
||||||
|
|
||||||
|
/** unsigned 8-bit integer */
|
||||||
|
typedef unsigned char ALCubyte;
|
||||||
|
|
||||||
|
/** signed 16-bit 2's complement integer */
|
||||||
|
typedef short ALCshort;
|
||||||
|
|
||||||
|
/** unsigned 16-bit integer */
|
||||||
|
typedef unsigned short ALCushort;
|
||||||
|
|
||||||
|
/** signed 32-bit 2's complement integer */
|
||||||
|
typedef int ALCint;
|
||||||
|
|
||||||
|
/** unsigned 32-bit integer */
|
||||||
|
typedef unsigned int ALCuint;
|
||||||
|
|
||||||
|
/** non-negative 32-bit binary integer size */
|
||||||
|
typedef int ALCsizei;
|
||||||
|
|
||||||
|
/** enumerated 32-bit value */
|
||||||
|
typedef int ALCenum;
|
||||||
|
|
||||||
|
/** 32-bit IEEE754 floating-point */
|
||||||
|
typedef float ALCfloat;
|
||||||
|
|
||||||
|
/** 64-bit IEEE754 floating-point */
|
||||||
|
typedef double ALCdouble;
|
||||||
|
|
||||||
|
/** void type (for opaque pointers only) */
|
||||||
|
typedef void ALCvoid;
|
||||||
|
|
||||||
|
|
||||||
|
/* Enumerant values begin at column 50. No tabs. */
|
||||||
|
|
||||||
|
/** Boolean False. */
|
||||||
|
#define ALC_FALSE 0
|
||||||
|
|
||||||
|
/** Boolean True. */
|
||||||
|
#define ALC_TRUE 1
|
||||||
|
|
||||||
|
/** Context attribute: <int> Hz. */
|
||||||
|
#define ALC_FREQUENCY 0x1007
|
||||||
|
|
||||||
|
/** Context attribute: <int> Hz. */
|
||||||
|
#define ALC_REFRESH 0x1008
|
||||||
|
|
||||||
|
/** Context attribute: AL_TRUE or AL_FALSE. */
|
||||||
|
#define ALC_SYNC 0x1009
|
||||||
|
|
||||||
|
/** Context attribute: <int> requested Mono (3D) Sources. */
|
||||||
|
#define ALC_MONO_SOURCES 0x1010
|
||||||
|
|
||||||
|
/** Context attribute: <int> requested Stereo Sources. */
|
||||||
|
#define ALC_STEREO_SOURCES 0x1011
|
||||||
|
|
||||||
|
/** No error. */
|
||||||
|
#define ALC_NO_ERROR 0
|
||||||
|
|
||||||
|
/** Invalid device handle. */
|
||||||
|
#define ALC_INVALID_DEVICE 0xA001
|
||||||
|
|
||||||
|
/** Invalid context handle. */
|
||||||
|
#define ALC_INVALID_CONTEXT 0xA002
|
||||||
|
|
||||||
|
/** Invalid enum parameter passed to an ALC call. */
|
||||||
|
#define ALC_INVALID_ENUM 0xA003
|
||||||
|
|
||||||
|
/** Invalid value parameter passed to an ALC call. */
|
||||||
|
#define ALC_INVALID_VALUE 0xA004
|
||||||
|
|
||||||
|
/** Out of memory. */
|
||||||
|
#define ALC_OUT_OF_MEMORY 0xA005
|
||||||
|
|
||||||
|
|
||||||
|
/** Runtime ALC version. */
|
||||||
|
#define ALC_MAJOR_VERSION 0x1000
|
||||||
|
#define ALC_MINOR_VERSION 0x1001
|
||||||
|
|
||||||
|
/** Context attribute list properties. */
|
||||||
|
#define ALC_ATTRIBUTES_SIZE 0x1002
|
||||||
|
#define ALC_ALL_ATTRIBUTES 0x1003
|
||||||
|
|
||||||
|
/** String for the default device specifier. */
|
||||||
|
#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004
|
||||||
|
/**
|
||||||
|
* String for the given device's specifier.
|
||||||
|
*
|
||||||
|
* If device handle is NULL, it is instead a null-char separated list of
|
||||||
|
* strings of known device specifiers (list ends with an empty string).
|
||||||
|
*/
|
||||||
|
#define ALC_DEVICE_SPECIFIER 0x1005
|
||||||
|
/** String for space-separated list of ALC extensions. */
|
||||||
|
#define ALC_EXTENSIONS 0x1006
|
||||||
|
|
||||||
|
|
||||||
|
/** Capture extension */
|
||||||
|
#define ALC_EXT_CAPTURE 1
|
||||||
|
/**
|
||||||
|
* String for the given capture device's specifier.
|
||||||
|
*
|
||||||
|
* If device handle is NULL, it is instead a null-char separated list of
|
||||||
|
* strings of known capture device specifiers (list ends with an empty string).
|
||||||
|
*/
|
||||||
|
#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310
|
||||||
|
/** String for the default capture device specifier. */
|
||||||
|
#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311
|
||||||
|
/** Number of sample frames available for capture. */
|
||||||
|
#define ALC_CAPTURE_SAMPLES 0x312
|
||||||
|
|
||||||
|
|
||||||
|
/** Enumerate All extension */
|
||||||
|
#define ALC_ENUMERATE_ALL_EXT 1
|
||||||
|
/** String for the default extended device specifier. */
|
||||||
|
#define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012
|
||||||
|
/**
|
||||||
|
* String for the given extended device's specifier.
|
||||||
|
*
|
||||||
|
* If device handle is NULL, it is instead a null-char separated list of
|
||||||
|
* strings of known extended device specifiers (list ends with an empty string).
|
||||||
|
*/
|
||||||
|
#define ALC_ALL_DEVICES_SPECIFIER 0x1013
|
||||||
|
|
||||||
|
|
||||||
|
/** Context management. */
|
||||||
|
ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCint* attrlist);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context);
|
||||||
|
ALC_API void ALC_APIENTRY alcProcessContext(ALCcontext *context);
|
||||||
|
ALC_API void ALC_APIENTRY alcSuspendContext(ALCcontext *context);
|
||||||
|
ALC_API void ALC_APIENTRY alcDestroyContext(ALCcontext *context);
|
||||||
|
ALC_API ALCcontext* ALC_APIENTRY alcGetCurrentContext(void);
|
||||||
|
ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *context);
|
||||||
|
|
||||||
|
/** Device management. */
|
||||||
|
ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *devicename);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcCloseDevice(ALCdevice *device);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Error support.
|
||||||
|
*
|
||||||
|
* Obtain the most recent Device error.
|
||||||
|
*/
|
||||||
|
ALC_API ALCenum ALC_APIENTRY alcGetError(ALCdevice *device);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extension support.
|
||||||
|
*
|
||||||
|
* Query for the presence of an extension, and obtain any appropriate
|
||||||
|
* function pointers and enum values.
|
||||||
|
*/
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcIsExtensionPresent(ALCdevice *device, const ALCchar *extname);
|
||||||
|
ALC_API void* ALC_APIENTRY alcGetProcAddress(ALCdevice *device, const ALCchar *funcname);
|
||||||
|
ALC_API ALCenum ALC_APIENTRY alcGetEnumValue(ALCdevice *device, const ALCchar *enumname);
|
||||||
|
|
||||||
|
/** Query function. */
|
||||||
|
ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum param);
|
||||||
|
ALC_API void ALC_APIENTRY alcGetIntegerv(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values);
|
||||||
|
|
||||||
|
/** Capture function. */
|
||||||
|
ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice(ALCdevice *device);
|
||||||
|
ALC_API void ALC_APIENTRY alcCaptureStart(ALCdevice *device);
|
||||||
|
ALC_API void ALC_APIENTRY alcCaptureStop(ALCdevice *device);
|
||||||
|
ALC_API void ALC_APIENTRY alcCaptureSamples(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
|
||||||
|
|
||||||
|
/** Pointer-to-function type, useful for dynamically getting ALC entry points. */
|
||||||
|
typedef ALCcontext* (ALC_APIENTRY *LPALCCREATECONTEXT)(ALCdevice *device, const ALCint *attrlist);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY *LPALCMAKECONTEXTCURRENT)(ALCcontext *context);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCPROCESSCONTEXT)(ALCcontext *context);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCSUSPENDCONTEXT)(ALCcontext *context);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCDESTROYCONTEXT)(ALCcontext *context);
|
||||||
|
typedef ALCcontext* (ALC_APIENTRY *LPALCGETCURRENTCONTEXT)(void);
|
||||||
|
typedef ALCdevice* (ALC_APIENTRY *LPALCGETCONTEXTSDEVICE)(ALCcontext *context);
|
||||||
|
typedef ALCdevice* (ALC_APIENTRY *LPALCOPENDEVICE)(const ALCchar *devicename);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY *LPALCCLOSEDEVICE)(ALCdevice *device);
|
||||||
|
typedef ALCenum (ALC_APIENTRY *LPALCGETERROR)(ALCdevice *device);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY *LPALCISEXTENSIONPRESENT)(ALCdevice *device, const ALCchar *extname);
|
||||||
|
typedef void* (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname);
|
||||||
|
typedef ALCenum (ALC_APIENTRY *LPALCGETENUMVALUE)(ALCdevice *device, const ALCchar *enumname);
|
||||||
|
typedef const ALCchar* (ALC_APIENTRY *LPALCGETSTRING)(ALCdevice *device, ALCenum param);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCGETINTEGERV)(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values);
|
||||||
|
typedef ALCdevice* (ALC_APIENTRY *LPALCCAPTUREOPENDEVICE)(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY *LPALCCAPTURECLOSEDEVICE)(ALCdevice *device);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCCAPTURESTART)(ALCdevice *device);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCCAPTURESTOP)(ALCdevice *device);
|
||||||
|
typedef void (ALC_APIENTRY *LPALCCAPTURESAMPLES)(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* AL_ALC_H */
|
||||||
|
|
@ -0,0 +1,400 @@
|
||||||
|
/**
|
||||||
|
* OpenAL cross platform audio library
|
||||||
|
* Copyright (C) 2008 by authors.
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
* Or go to http://www.gnu.org/copyleft/lgpl.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AL_ALEXT_H
|
||||||
|
#define AL_ALEXT_H
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
/* Define int64_t and uint64_t types */
|
||||||
|
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||||
|
#include <inttypes.h>
|
||||||
|
#elif defined(_WIN32) && defined(__GNUC__)
|
||||||
|
#include <stdint.h>
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
typedef __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
#else
|
||||||
|
/* Fallback if nothing above works */
|
||||||
|
#include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "alc.h"
|
||||||
|
#include "al.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_LOKI_IMA_ADPCM_format
|
||||||
|
#define AL_LOKI_IMA_ADPCM_format 1
|
||||||
|
#define AL_FORMAT_IMA_ADPCM_MONO16_EXT 0x10000
|
||||||
|
#define AL_FORMAT_IMA_ADPCM_STEREO16_EXT 0x10001
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_LOKI_WAVE_format
|
||||||
|
#define AL_LOKI_WAVE_format 1
|
||||||
|
#define AL_FORMAT_WAVE_EXT 0x10002
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_vorbis
|
||||||
|
#define AL_EXT_vorbis 1
|
||||||
|
#define AL_FORMAT_VORBIS_EXT 0x10003
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_LOKI_quadriphonic
|
||||||
|
#define AL_LOKI_quadriphonic 1
|
||||||
|
#define AL_FORMAT_QUAD8_LOKI 0x10004
|
||||||
|
#define AL_FORMAT_QUAD16_LOKI 0x10005
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_float32
|
||||||
|
#define AL_EXT_float32 1
|
||||||
|
#define AL_FORMAT_MONO_FLOAT32 0x10010
|
||||||
|
#define AL_FORMAT_STEREO_FLOAT32 0x10011
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_double
|
||||||
|
#define AL_EXT_double 1
|
||||||
|
#define AL_FORMAT_MONO_DOUBLE_EXT 0x10012
|
||||||
|
#define AL_FORMAT_STEREO_DOUBLE_EXT 0x10013
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_MULAW
|
||||||
|
#define AL_EXT_MULAW 1
|
||||||
|
#define AL_FORMAT_MONO_MULAW_EXT 0x10014
|
||||||
|
#define AL_FORMAT_STEREO_MULAW_EXT 0x10015
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_ALAW
|
||||||
|
#define AL_EXT_ALAW 1
|
||||||
|
#define AL_FORMAT_MONO_ALAW_EXT 0x10016
|
||||||
|
#define AL_FORMAT_STEREO_ALAW_EXT 0x10017
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_LOKI_audio_channel
|
||||||
|
#define ALC_LOKI_audio_channel 1
|
||||||
|
#define ALC_CHAN_MAIN_LOKI 0x500001
|
||||||
|
#define ALC_CHAN_PCM_LOKI 0x500002
|
||||||
|
#define ALC_CHAN_CD_LOKI 0x500003
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_MCFORMATS
|
||||||
|
#define AL_EXT_MCFORMATS 1
|
||||||
|
#define AL_FORMAT_QUAD8 0x1204
|
||||||
|
#define AL_FORMAT_QUAD16 0x1205
|
||||||
|
#define AL_FORMAT_QUAD32 0x1206
|
||||||
|
#define AL_FORMAT_REAR8 0x1207
|
||||||
|
#define AL_FORMAT_REAR16 0x1208
|
||||||
|
#define AL_FORMAT_REAR32 0x1209
|
||||||
|
#define AL_FORMAT_51CHN8 0x120A
|
||||||
|
#define AL_FORMAT_51CHN16 0x120B
|
||||||
|
#define AL_FORMAT_51CHN32 0x120C
|
||||||
|
#define AL_FORMAT_61CHN8 0x120D
|
||||||
|
#define AL_FORMAT_61CHN16 0x120E
|
||||||
|
#define AL_FORMAT_61CHN32 0x120F
|
||||||
|
#define AL_FORMAT_71CHN8 0x1210
|
||||||
|
#define AL_FORMAT_71CHN16 0x1211
|
||||||
|
#define AL_FORMAT_71CHN32 0x1212
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_MULAW_MCFORMATS
|
||||||
|
#define AL_EXT_MULAW_MCFORMATS 1
|
||||||
|
#define AL_FORMAT_MONO_MULAW 0x10014
|
||||||
|
#define AL_FORMAT_STEREO_MULAW 0x10015
|
||||||
|
#define AL_FORMAT_QUAD_MULAW 0x10021
|
||||||
|
#define AL_FORMAT_REAR_MULAW 0x10022
|
||||||
|
#define AL_FORMAT_51CHN_MULAW 0x10023
|
||||||
|
#define AL_FORMAT_61CHN_MULAW 0x10024
|
||||||
|
#define AL_FORMAT_71CHN_MULAW 0x10025
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_IMA4
|
||||||
|
#define AL_EXT_IMA4 1
|
||||||
|
#define AL_FORMAT_MONO_IMA4 0x1300
|
||||||
|
#define AL_FORMAT_STEREO_IMA4 0x1301
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_STATIC_BUFFER
|
||||||
|
#define AL_EXT_STATIC_BUFFER 1
|
||||||
|
typedef ALvoid (AL_APIENTRY*PFNALBUFFERDATASTATICPROC)(const ALint,ALenum,ALvoid*,ALsizei,ALsizei);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API ALvoid AL_APIENTRY alBufferDataStatic(const ALint buffer, ALenum format, ALvoid *data, ALsizei len, ALsizei freq);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_EFX
|
||||||
|
#define ALC_EXT_EFX 1
|
||||||
|
#include "efx.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_disconnect
|
||||||
|
#define ALC_EXT_disconnect 1
|
||||||
|
#define ALC_CONNECTED 0x313
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_thread_local_context
|
||||||
|
#define ALC_EXT_thread_local_context 1
|
||||||
|
typedef ALCboolean (ALC_APIENTRY*PFNALCSETTHREADCONTEXTPROC)(ALCcontext *context);
|
||||||
|
typedef ALCcontext* (ALC_APIENTRY*PFNALCGETTHREADCONTEXTPROC)(void);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context);
|
||||||
|
ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_source_distance_model
|
||||||
|
#define AL_EXT_source_distance_model 1
|
||||||
|
#define AL_SOURCE_DISTANCE_MODEL 0x200
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_buffer_sub_data
|
||||||
|
#define AL_SOFT_buffer_sub_data 1
|
||||||
|
#define AL_BYTE_RW_OFFSETS_SOFT 0x1031
|
||||||
|
#define AL_SAMPLE_RW_OFFSETS_SOFT 0x1032
|
||||||
|
typedef ALvoid (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API ALvoid AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_loop_points
|
||||||
|
#define AL_SOFT_loop_points 1
|
||||||
|
#define AL_LOOP_POINTS_SOFT 0x2015
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_FOLDBACK
|
||||||
|
#define AL_EXT_FOLDBACK 1
|
||||||
|
#define AL_EXT_FOLDBACK_NAME "AL_EXT_FOLDBACK"
|
||||||
|
#define AL_FOLDBACK_EVENT_BLOCK 0x4112
|
||||||
|
#define AL_FOLDBACK_EVENT_START 0x4111
|
||||||
|
#define AL_FOLDBACK_EVENT_STOP 0x4113
|
||||||
|
#define AL_FOLDBACK_MODE_MONO 0x4101
|
||||||
|
#define AL_FOLDBACK_MODE_STEREO 0x4102
|
||||||
|
typedef void (AL_APIENTRY*LPALFOLDBACKCALLBACK)(ALenum,ALsizei);
|
||||||
|
typedef void (AL_APIENTRY*LPALREQUESTFOLDBACKSTART)(ALenum,ALsizei,ALsizei,ALfloat*,LPALFOLDBACKCALLBACK);
|
||||||
|
typedef void (AL_APIENTRY*LPALREQUESTFOLDBACKSTOP)(void);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API void AL_APIENTRY alRequestFoldbackStart(ALenum mode,ALsizei count,ALsizei length,ALfloat *mem,LPALFOLDBACKCALLBACK callback);
|
||||||
|
AL_API void AL_APIENTRY alRequestFoldbackStop(void);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_DEDICATED
|
||||||
|
#define ALC_EXT_DEDICATED 1
|
||||||
|
#define AL_DEDICATED_GAIN 0x0001
|
||||||
|
#define AL_EFFECT_DEDICATED_DIALOGUE 0x9001
|
||||||
|
#define AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT 0x9000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_buffer_samples
|
||||||
|
#define AL_SOFT_buffer_samples 1
|
||||||
|
/* Channel configurations */
|
||||||
|
#define AL_MONO_SOFT 0x1500
|
||||||
|
#define AL_STEREO_SOFT 0x1501
|
||||||
|
#define AL_REAR_SOFT 0x1502
|
||||||
|
#define AL_QUAD_SOFT 0x1503
|
||||||
|
#define AL_5POINT1_SOFT 0x1504
|
||||||
|
#define AL_6POINT1_SOFT 0x1505
|
||||||
|
#define AL_7POINT1_SOFT 0x1506
|
||||||
|
|
||||||
|
/* Sample types */
|
||||||
|
#define AL_BYTE_SOFT 0x1400
|
||||||
|
#define AL_UNSIGNED_BYTE_SOFT 0x1401
|
||||||
|
#define AL_SHORT_SOFT 0x1402
|
||||||
|
#define AL_UNSIGNED_SHORT_SOFT 0x1403
|
||||||
|
#define AL_INT_SOFT 0x1404
|
||||||
|
#define AL_UNSIGNED_INT_SOFT 0x1405
|
||||||
|
#define AL_FLOAT_SOFT 0x1406
|
||||||
|
#define AL_DOUBLE_SOFT 0x1407
|
||||||
|
#define AL_BYTE3_SOFT 0x1408
|
||||||
|
#define AL_UNSIGNED_BYTE3_SOFT 0x1409
|
||||||
|
|
||||||
|
/* Storage formats */
|
||||||
|
#define AL_MONO8_SOFT 0x1100
|
||||||
|
#define AL_MONO16_SOFT 0x1101
|
||||||
|
#define AL_MONO32F_SOFT 0x10010
|
||||||
|
#define AL_STEREO8_SOFT 0x1102
|
||||||
|
#define AL_STEREO16_SOFT 0x1103
|
||||||
|
#define AL_STEREO32F_SOFT 0x10011
|
||||||
|
#define AL_QUAD8_SOFT 0x1204
|
||||||
|
#define AL_QUAD16_SOFT 0x1205
|
||||||
|
#define AL_QUAD32F_SOFT 0x1206
|
||||||
|
#define AL_REAR8_SOFT 0x1207
|
||||||
|
#define AL_REAR16_SOFT 0x1208
|
||||||
|
#define AL_REAR32F_SOFT 0x1209
|
||||||
|
#define AL_5POINT1_8_SOFT 0x120A
|
||||||
|
#define AL_5POINT1_16_SOFT 0x120B
|
||||||
|
#define AL_5POINT1_32F_SOFT 0x120C
|
||||||
|
#define AL_6POINT1_8_SOFT 0x120D
|
||||||
|
#define AL_6POINT1_16_SOFT 0x120E
|
||||||
|
#define AL_6POINT1_32F_SOFT 0x120F
|
||||||
|
#define AL_7POINT1_8_SOFT 0x1210
|
||||||
|
#define AL_7POINT1_16_SOFT 0x1211
|
||||||
|
#define AL_7POINT1_32F_SOFT 0x1212
|
||||||
|
|
||||||
|
/* Buffer attributes */
|
||||||
|
#define AL_INTERNAL_FORMAT_SOFT 0x2008
|
||||||
|
#define AL_BYTE_LENGTH_SOFT 0x2009
|
||||||
|
#define AL_SAMPLE_LENGTH_SOFT 0x200A
|
||||||
|
#define AL_SEC_LENGTH_SOFT 0x200B
|
||||||
|
|
||||||
|
typedef void (AL_APIENTRY*LPALBUFFERSAMPLESSOFT)(ALuint,ALuint,ALenum,ALsizei,ALenum,ALenum,const ALvoid*);
|
||||||
|
typedef void (AL_APIENTRY*LPALBUFFERSUBSAMPLESSOFT)(ALuint,ALsizei,ALsizei,ALenum,ALenum,const ALvoid*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETBUFFERSAMPLESSOFT)(ALuint,ALsizei,ALsizei,ALenum,ALenum,ALvoid*);
|
||||||
|
typedef ALboolean (AL_APIENTRY*LPALISBUFFERFORMATSUPPORTEDSOFT)(ALenum);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API void AL_APIENTRY alBufferSamplesSOFT(ALuint buffer, ALuint samplerate, ALenum internalformat, ALsizei samples, ALenum channels, ALenum type, const ALvoid *data);
|
||||||
|
AL_API void AL_APIENTRY alBufferSubSamplesSOFT(ALuint buffer, ALsizei offset, ALsizei samples, ALenum channels, ALenum type, const ALvoid *data);
|
||||||
|
AL_API void AL_APIENTRY alGetBufferSamplesSOFT(ALuint buffer, ALsizei offset, ALsizei samples, ALenum channels, ALenum type, ALvoid *data);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsBufferFormatSupportedSOFT(ALenum format);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_direct_channels
|
||||||
|
#define AL_SOFT_direct_channels 1
|
||||||
|
#define AL_DIRECT_CHANNELS_SOFT 0x1033
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_SOFT_loopback
|
||||||
|
#define ALC_SOFT_loopback 1
|
||||||
|
#define ALC_FORMAT_CHANNELS_SOFT 0x1990
|
||||||
|
#define ALC_FORMAT_TYPE_SOFT 0x1991
|
||||||
|
|
||||||
|
/* Sample types */
|
||||||
|
#define ALC_BYTE_SOFT 0x1400
|
||||||
|
#define ALC_UNSIGNED_BYTE_SOFT 0x1401
|
||||||
|
#define ALC_SHORT_SOFT 0x1402
|
||||||
|
#define ALC_UNSIGNED_SHORT_SOFT 0x1403
|
||||||
|
#define ALC_INT_SOFT 0x1404
|
||||||
|
#define ALC_UNSIGNED_INT_SOFT 0x1405
|
||||||
|
#define ALC_FLOAT_SOFT 0x1406
|
||||||
|
|
||||||
|
/* Channel configurations */
|
||||||
|
#define ALC_MONO_SOFT 0x1500
|
||||||
|
#define ALC_STEREO_SOFT 0x1501
|
||||||
|
#define ALC_QUAD_SOFT 0x1503
|
||||||
|
#define ALC_5POINT1_SOFT 0x1504
|
||||||
|
#define ALC_6POINT1_SOFT 0x1505
|
||||||
|
#define ALC_7POINT1_SOFT 0x1506
|
||||||
|
|
||||||
|
typedef ALCdevice* (ALC_APIENTRY*LPALCLOOPBACKOPENDEVICESOFT)(const ALCchar*);
|
||||||
|
typedef ALCboolean (ALC_APIENTRY*LPALCISRENDERFORMATSUPPORTEDSOFT)(ALCdevice*,ALCsizei,ALCenum,ALCenum);
|
||||||
|
typedef void (ALC_APIENTRY*LPALCRENDERSAMPLESSOFT)(ALCdevice*,ALCvoid*,ALCsizei);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(const ALCchar *deviceName);
|
||||||
|
ALC_API ALCboolean ALC_APIENTRY alcIsRenderFormatSupportedSOFT(ALCdevice *device, ALCsizei freq, ALCenum channels, ALCenum type);
|
||||||
|
ALC_API void ALC_APIENTRY alcRenderSamplesSOFT(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_STEREO_ANGLES
|
||||||
|
#define AL_EXT_STEREO_ANGLES 1
|
||||||
|
#define AL_STEREO_ANGLES 0x1030
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_EXT_SOURCE_RADIUS
|
||||||
|
#define AL_EXT_SOURCE_RADIUS 1
|
||||||
|
#define AL_SOURCE_RADIUS 0x1031
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_source_latency
|
||||||
|
#define AL_SOFT_source_latency 1
|
||||||
|
#define AL_SAMPLE_OFFSET_LATENCY_SOFT 0x1200
|
||||||
|
#define AL_SEC_OFFSET_LATENCY_SOFT 0x1201
|
||||||
|
typedef int64_t ALint64SOFT;
|
||||||
|
typedef uint64_t ALuint64SOFT;
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCEDSOFT)(ALuint,ALenum,ALdouble);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCE3DSOFT)(ALuint,ALenum,ALdouble,ALdouble,ALdouble);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCEDVSOFT)(ALuint,ALenum,const ALdouble*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCEDSOFT)(ALuint,ALenum,ALdouble*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCE3DSOFT)(ALuint,ALenum,ALdouble*,ALdouble*,ALdouble*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCEDVSOFT)(ALuint,ALenum,ALdouble*);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCEI64SOFT)(ALuint,ALenum,ALint64SOFT);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCE3I64SOFT)(ALuint,ALenum,ALint64SOFT,ALint64SOFT,ALint64SOFT);
|
||||||
|
typedef void (AL_APIENTRY*LPALSOURCEI64VSOFT)(ALuint,ALenum,const ALint64SOFT*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCEI64SOFT)(ALuint,ALenum,ALint64SOFT*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCE3I64SOFT)(ALuint,ALenum,ALint64SOFT*,ALint64SOFT*,ALint64SOFT*);
|
||||||
|
typedef void (AL_APIENTRY*LPALGETSOURCEI64VSOFT)(ALuint,ALenum,ALint64SOFT*);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API void AL_APIENTRY alSourcedSOFT(ALuint source, ALenum param, ALdouble value);
|
||||||
|
AL_API void AL_APIENTRY alSource3dSOFT(ALuint source, ALenum param, ALdouble value1, ALdouble value2, ALdouble value3);
|
||||||
|
AL_API void AL_APIENTRY alSourcedvSOFT(ALuint source, ALenum param, const ALdouble *values);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcedSOFT(ALuint source, ALenum param, ALdouble *value);
|
||||||
|
AL_API void AL_APIENTRY alGetSource3dSOFT(ALuint source, ALenum param, ALdouble *value1, ALdouble *value2, ALdouble *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcedvSOFT(ALuint source, ALenum param, ALdouble *values);
|
||||||
|
AL_API void AL_APIENTRY alSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT value);
|
||||||
|
AL_API void AL_APIENTRY alSource3i64SOFT(ALuint source, ALenum param, ALint64SOFT value1, ALint64SOFT value2, ALint64SOFT value3);
|
||||||
|
AL_API void AL_APIENTRY alSourcei64vSOFT(ALuint source, ALenum param, const ALint64SOFT *values);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT *value);
|
||||||
|
AL_API void AL_APIENTRY alGetSource3i64SOFT(ALuint source, ALenum param, ALint64SOFT *value1, ALint64SOFT *value2, ALint64SOFT *value3);
|
||||||
|
AL_API void AL_APIENTRY alGetSourcei64vSOFT(ALuint source, ALenum param, ALint64SOFT *values);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_EXT_DEFAULT_FILTER_ORDER
|
||||||
|
#define ALC_EXT_DEFAULT_FILTER_ORDER 1
|
||||||
|
#define ALC_DEFAULT_FILTER_ORDER 0x1100
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_deferred_updates
|
||||||
|
#define AL_SOFT_deferred_updates 1
|
||||||
|
#define AL_DEFERRED_UPDATES_SOFT 0xC002
|
||||||
|
typedef ALvoid (AL_APIENTRY*LPALDEFERUPDATESSOFT)(void);
|
||||||
|
typedef ALvoid (AL_APIENTRY*LPALPROCESSUPDATESSOFT)(void);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void);
|
||||||
|
AL_API ALvoid AL_APIENTRY alProcessUpdatesSOFT(void);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_block_alignment
|
||||||
|
#define AL_SOFT_block_alignment 1
|
||||||
|
#define AL_UNPACK_BLOCK_ALIGNMENT_SOFT 0x200C
|
||||||
|
#define AL_PACK_BLOCK_ALIGNMENT_SOFT 0x200D
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_MSADPCM
|
||||||
|
#define AL_SOFT_MSADPCM 1
|
||||||
|
#define AL_FORMAT_MONO_MSADPCM_SOFT 0x1302
|
||||||
|
#define AL_FORMAT_STEREO_MSADPCM_SOFT 0x1303
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef AL_SOFT_source_length
|
||||||
|
#define AL_SOFT_source_length 1
|
||||||
|
/*#define AL_BYTE_LENGTH_SOFT 0x2009*/
|
||||||
|
/*#define AL_SAMPLE_LENGTH_SOFT 0x200A*/
|
||||||
|
/*#define AL_SEC_LENGTH_SOFT 0x200B*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ALC_SOFT_pause_device
|
||||||
|
#define ALC_SOFT_pause_device 1
|
||||||
|
typedef void (ALC_APIENTRY*LPALCDEVICEPAUSESOFT)(ALCdevice *device);
|
||||||
|
typedef void (ALC_APIENTRY*LPALCDEVICERESUMESOFT)(ALCdevice *device);
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
ALC_API void ALC_APIENTRY alcDevicePauseSOFT(ALCdevice *device);
|
||||||
|
ALC_API void ALC_APIENTRY alcDeviceResumeSOFT(ALCdevice *device);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
/* The tokens that would be defined here are already defined in efx.h. This
|
||||||
|
* empty file is here to provide compatibility with Windows-based projects
|
||||||
|
* that would include it. */
|
||||||
|
|
@ -0,0 +1,402 @@
|
||||||
|
/* Reverb presets for EFX */
|
||||||
|
|
||||||
|
#ifndef EFX_PRESETS_H
|
||||||
|
#define EFX_PRESETS_H
|
||||||
|
|
||||||
|
#ifndef EFXEAXREVERBPROPERTIES_DEFINED
|
||||||
|
#define EFXEAXREVERBPROPERTIES_DEFINED
|
||||||
|
typedef struct {
|
||||||
|
float flDensity;
|
||||||
|
float flDiffusion;
|
||||||
|
float flGain;
|
||||||
|
float flGainHF;
|
||||||
|
float flGainLF;
|
||||||
|
float flDecayTime;
|
||||||
|
float flDecayHFRatio;
|
||||||
|
float flDecayLFRatio;
|
||||||
|
float flReflectionsGain;
|
||||||
|
float flReflectionsDelay;
|
||||||
|
float flReflectionsPan[3];
|
||||||
|
float flLateReverbGain;
|
||||||
|
float flLateReverbDelay;
|
||||||
|
float flLateReverbPan[3];
|
||||||
|
float flEchoTime;
|
||||||
|
float flEchoDepth;
|
||||||
|
float flModulationTime;
|
||||||
|
float flModulationDepth;
|
||||||
|
float flAirAbsorptionGainHF;
|
||||||
|
float flHFReference;
|
||||||
|
float flLFReference;
|
||||||
|
float flRoomRolloffFactor;
|
||||||
|
int iDecayHFLimit;
|
||||||
|
} EFXEAXREVERBPROPERTIES, *LPEFXEAXREVERBPROPERTIES;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Default Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_GENERIC \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.8913f, 1.0000f, 1.4900f, 0.8300f, 1.0000f, 0.0500f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PADDEDCELL \
|
||||||
|
{ 0.1715f, 1.0000f, 0.3162f, 0.0010f, 1.0000f, 0.1700f, 0.1000f, 1.0000f, 0.2500f, 0.0010f, { 0.0000f, 0.0000f, 0.0000f }, 1.2691f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ROOM \
|
||||||
|
{ 0.4287f, 1.0000f, 0.3162f, 0.5929f, 1.0000f, 0.4000f, 0.8300f, 1.0000f, 0.1503f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 1.0629f, 0.0030f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_BATHROOM \
|
||||||
|
{ 0.1715f, 1.0000f, 0.3162f, 0.2512f, 1.0000f, 1.4900f, 0.5400f, 1.0000f, 0.6531f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 3.2734f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_LIVINGROOM \
|
||||||
|
{ 0.9766f, 1.0000f, 0.3162f, 0.0010f, 1.0000f, 0.5000f, 0.1000f, 1.0000f, 0.2051f, 0.0030f, { 0.0000f, 0.0000f, 0.0000f }, 0.2805f, 0.0040f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_STONEROOM \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.7079f, 1.0000f, 2.3100f, 0.6400f, 1.0000f, 0.4411f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1003f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_AUDITORIUM \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.5781f, 1.0000f, 4.3200f, 0.5900f, 1.0000f, 0.4032f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.7170f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CONCERTHALL \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.5623f, 1.0000f, 3.9200f, 0.7000f, 1.0000f, 0.2427f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.9977f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CAVE \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 1.0000f, 1.0000f, 2.9100f, 1.3000f, 1.0000f, 0.5000f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.7063f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ARENA \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.4477f, 1.0000f, 7.2400f, 0.3300f, 1.0000f, 0.2612f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.0186f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_HANGAR \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.3162f, 1.0000f, 10.0500f, 0.2300f, 1.0000f, 0.5000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2560f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CARPETEDHALLWAY \
|
||||||
|
{ 0.4287f, 1.0000f, 0.3162f, 0.0100f, 1.0000f, 0.3000f, 0.1000f, 1.0000f, 0.1215f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 0.1531f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_HALLWAY \
|
||||||
|
{ 0.3645f, 1.0000f, 0.3162f, 0.7079f, 1.0000f, 1.4900f, 0.5900f, 1.0000f, 0.2458f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.6615f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_STONECORRIDOR \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.7612f, 1.0000f, 2.7000f, 0.7900f, 1.0000f, 0.2472f, 0.0130f, { 0.0000f, 0.0000f, 0.0000f }, 1.5758f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ALLEY \
|
||||||
|
{ 1.0000f, 0.3000f, 0.3162f, 0.7328f, 1.0000f, 1.4900f, 0.8600f, 1.0000f, 0.2500f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.9954f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.9500f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FOREST \
|
||||||
|
{ 1.0000f, 0.3000f, 0.3162f, 0.0224f, 1.0000f, 1.4900f, 0.5400f, 1.0000f, 0.0525f, 0.1620f, { 0.0000f, 0.0000f, 0.0000f }, 0.7682f, 0.0880f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CITY \
|
||||||
|
{ 1.0000f, 0.5000f, 0.3162f, 0.3981f, 1.0000f, 1.4900f, 0.6700f, 1.0000f, 0.0730f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.1427f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_MOUNTAINS \
|
||||||
|
{ 1.0000f, 0.2700f, 0.3162f, 0.0562f, 1.0000f, 1.4900f, 0.2100f, 1.0000f, 0.0407f, 0.3000f, { 0.0000f, 0.0000f, 0.0000f }, 0.1919f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_QUARRY \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.3162f, 1.0000f, 1.4900f, 0.8300f, 1.0000f, 0.0000f, 0.0610f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0250f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.7000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PLAIN \
|
||||||
|
{ 1.0000f, 0.2100f, 0.3162f, 0.1000f, 1.0000f, 1.4900f, 0.5000f, 1.0000f, 0.0585f, 0.1790f, { 0.0000f, 0.0000f, 0.0000f }, 0.1089f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PARKINGLOT \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 1.0000f, 1.0000f, 1.6500f, 1.5000f, 1.0000f, 0.2082f, 0.0080f, { 0.0000f, 0.0000f, 0.0000f }, 0.2652f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SEWERPIPE \
|
||||||
|
{ 0.3071f, 0.8000f, 0.3162f, 0.3162f, 1.0000f, 2.8100f, 0.1400f, 1.0000f, 1.6387f, 0.0140f, { 0.0000f, 0.0000f, 0.0000f }, 3.2471f, 0.0210f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_UNDERWATER \
|
||||||
|
{ 0.3645f, 1.0000f, 0.3162f, 0.0100f, 1.0000f, 1.4900f, 0.1000f, 1.0000f, 0.5963f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 7.0795f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 1.1800f, 0.3480f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRUGGED \
|
||||||
|
{ 0.4287f, 0.5000f, 0.3162f, 1.0000f, 1.0000f, 8.3900f, 1.3900f, 1.0000f, 0.8760f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 3.1081f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 1.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DIZZY \
|
||||||
|
{ 0.3645f, 0.6000f, 0.3162f, 0.6310f, 1.0000f, 17.2300f, 0.5600f, 1.0000f, 0.1392f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.4937f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.8100f, 0.3100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PSYCHOTIC \
|
||||||
|
{ 0.0625f, 0.5000f, 0.3162f, 0.8404f, 1.0000f, 7.5600f, 0.9100f, 1.0000f, 0.4864f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 2.4378f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 4.0000f, 1.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
/* Castle Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_SMALLROOM \
|
||||||
|
{ 1.0000f, 0.8900f, 0.3162f, 0.3981f, 0.1000f, 1.2200f, 0.8300f, 0.3100f, 0.8913f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_SHORTPASSAGE \
|
||||||
|
{ 1.0000f, 0.8900f, 0.3162f, 0.3162f, 0.1000f, 2.3200f, 0.8300f, 0.3100f, 0.8913f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_MEDIUMROOM \
|
||||||
|
{ 1.0000f, 0.9300f, 0.3162f, 0.2818f, 0.1000f, 2.0400f, 0.8300f, 0.4600f, 0.6310f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1550f, 0.0300f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_LARGEROOM \
|
||||||
|
{ 1.0000f, 0.8200f, 0.3162f, 0.2818f, 0.1259f, 2.5300f, 0.8300f, 0.5000f, 0.4467f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1850f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_LONGPASSAGE \
|
||||||
|
{ 1.0000f, 0.8900f, 0.3162f, 0.3981f, 0.1000f, 3.4200f, 0.8300f, 0.3100f, 0.8913f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_HALL \
|
||||||
|
{ 1.0000f, 0.8100f, 0.3162f, 0.2818f, 0.1778f, 3.1400f, 0.7900f, 0.6200f, 0.1778f, 0.0560f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_CUPBOARD \
|
||||||
|
{ 1.0000f, 0.8900f, 0.3162f, 0.2818f, 0.1000f, 0.6700f, 0.8700f, 0.3100f, 1.4125f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 3.5481f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_COURTYARD \
|
||||||
|
{ 1.0000f, 0.4200f, 0.3162f, 0.4467f, 0.1995f, 2.1300f, 0.6100f, 0.2300f, 0.2239f, 0.1600f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0360f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.3700f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CASTLE_ALCOVE \
|
||||||
|
{ 1.0000f, 0.8900f, 0.3162f, 0.5012f, 0.1000f, 1.6400f, 0.8700f, 0.3100f, 1.0000f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
/* Factory Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_SMALLROOM \
|
||||||
|
{ 0.3645f, 0.8200f, 0.3162f, 0.7943f, 0.5012f, 1.7200f, 0.6500f, 1.3100f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.1190f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_SHORTPASSAGE \
|
||||||
|
{ 0.3645f, 0.6400f, 0.2512f, 0.7943f, 0.5012f, 2.5300f, 0.6500f, 1.3100f, 1.0000f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.1350f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_MEDIUMROOM \
|
||||||
|
{ 0.4287f, 0.8200f, 0.2512f, 0.7943f, 0.5012f, 2.7600f, 0.6500f, 1.3100f, 0.2818f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1740f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_LARGEROOM \
|
||||||
|
{ 0.4287f, 0.7500f, 0.2512f, 0.7079f, 0.6310f, 4.2400f, 0.5100f, 1.3100f, 0.1778f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.2310f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_LONGPASSAGE \
|
||||||
|
{ 0.3645f, 0.6400f, 0.2512f, 0.7943f, 0.5012f, 4.0600f, 0.6500f, 1.3100f, 1.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0370f, { 0.0000f, 0.0000f, 0.0000f }, 0.1350f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_HALL \
|
||||||
|
{ 0.4287f, 0.7500f, 0.3162f, 0.7079f, 0.6310f, 7.4300f, 0.5100f, 1.3100f, 0.0631f, 0.0730f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_CUPBOARD \
|
||||||
|
{ 0.3071f, 0.6300f, 0.2512f, 0.7943f, 0.5012f, 0.4900f, 0.6500f, 1.3100f, 1.2589f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.1070f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_COURTYARD \
|
||||||
|
{ 0.3071f, 0.5700f, 0.3162f, 0.3162f, 0.6310f, 2.3200f, 0.2900f, 0.5600f, 0.2239f, 0.1400f, { 0.0000f, 0.0000f, 0.0000f }, 0.3981f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2900f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_FACTORY_ALCOVE \
|
||||||
|
{ 0.3645f, 0.5900f, 0.2512f, 0.7943f, 0.5012f, 3.1400f, 0.6500f, 1.3100f, 1.4125f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.1140f, 0.1000f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
/* Ice Palace Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_SMALLROOM \
|
||||||
|
{ 1.0000f, 0.8400f, 0.3162f, 0.5623f, 0.2818f, 1.5100f, 1.5300f, 0.2700f, 0.8913f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1640f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_SHORTPASSAGE \
|
||||||
|
{ 1.0000f, 0.7500f, 0.3162f, 0.5623f, 0.2818f, 1.7900f, 1.4600f, 0.2800f, 0.5012f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.1770f, 0.0900f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_MEDIUMROOM \
|
||||||
|
{ 1.0000f, 0.8700f, 0.3162f, 0.5623f, 0.4467f, 2.2200f, 1.5300f, 0.3200f, 0.3981f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.1860f, 0.1200f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_LARGEROOM \
|
||||||
|
{ 1.0000f, 0.8100f, 0.3162f, 0.5623f, 0.4467f, 3.1400f, 1.5300f, 0.3200f, 0.2512f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.2140f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_LONGPASSAGE \
|
||||||
|
{ 1.0000f, 0.7700f, 0.3162f, 0.5623f, 0.3981f, 3.0100f, 1.4600f, 0.2800f, 0.7943f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0250f, { 0.0000f, 0.0000f, 0.0000f }, 0.1860f, 0.0400f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_HALL \
|
||||||
|
{ 1.0000f, 0.7600f, 0.3162f, 0.4467f, 0.5623f, 5.4900f, 1.5300f, 0.3800f, 0.1122f, 0.0540f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0520f, { 0.0000f, 0.0000f, 0.0000f }, 0.2260f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_CUPBOARD \
|
||||||
|
{ 1.0000f, 0.8300f, 0.3162f, 0.5012f, 0.2239f, 0.7600f, 1.5300f, 0.2600f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1430f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_COURTYARD \
|
||||||
|
{ 1.0000f, 0.5900f, 0.3162f, 0.2818f, 0.3162f, 2.0400f, 1.2000f, 0.3800f, 0.3162f, 0.1730f, { 0.0000f, 0.0000f, 0.0000f }, 0.3162f, 0.0430f, { 0.0000f, 0.0000f, 0.0000f }, 0.2350f, 0.4800f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_ICEPALACE_ALCOVE \
|
||||||
|
{ 1.0000f, 0.8400f, 0.3162f, 0.5623f, 0.2818f, 2.7600f, 1.4600f, 0.2800f, 1.1220f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1610f, 0.0900f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
/* Space Station Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPACESTATION_SMALLROOM \
|
||||||
|
{ 0.2109f, 0.7000f, 0.3162f, 0.7079f, 0.8913f, 1.7200f, 0.8200f, 0.5500f, 0.7943f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0130f, { 0.0000f, 0.0000f, 0.0000f }, 0.1880f, 0.2600f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPACESTATION_SHORTPASSAGE \
|
||||||
|
{ 0.2109f, 0.8700f, 0.3162f, 0.6310f, 0.8913f, 3.5700f, 0.5000f, 0.5500f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1720f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPACESTATION_MEDIUMROOM \
|
||||||
|
{ 0.2109f, 0.7500f, 0.3162f, 0.6310f, 0.8913f, 3.0100f, 0.5000f, 0.5500f, 0.3981f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0350f, { 0.0000f, 0.0000f, 0.0000f }, 0.2090f, 0.3100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPACESTATION_LARGEROOM \
|
||||||
|
{ 0.3645f, 0.8100f, 0.3162f, 0.6310f, 0.8913f, 3.8900f, 0.3800f, 0.6100f, 0.3162f, 0.0560f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0350f, { 0.0000f, 0.0000f, 0.0000f }, 0.2330f, 0.2800f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPACESTATION_LONGPASSAGE \
|
||||||
|
{ 0.4287f, 0.8200f, 0.3162f, 0.6310f, 0.8913f, 4.6200f, 0.6200f, 0.5500f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0310f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPACESTATION_HALL \
|
||||||
|
{ 0.4287f, 0.8700f, 0.3162f, 0.6310f, 0.8913f, 7.1100f, 0.3800f, 0.6100f, 0.1778f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0470f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2500f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPACESTATION_CUPBOARD \
|
||||||
|
{ 0.1715f, 0.5600f, 0.3162f, 0.7079f, 0.8913f, 0.7900f, 0.8100f, 0.5500f, 1.4125f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0180f, { 0.0000f, 0.0000f, 0.0000f }, 0.1810f, 0.3100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPACESTATION_ALCOVE \
|
||||||
|
{ 0.2109f, 0.7800f, 0.3162f, 0.7079f, 0.8913f, 1.1600f, 0.8100f, 0.5500f, 1.4125f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0180f, { 0.0000f, 0.0000f, 0.0000f }, 0.1920f, 0.2100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
/* Wooden Galleon Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_SMALLROOM \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.1122f, 0.3162f, 0.7900f, 0.3200f, 0.8700f, 1.0000f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_SHORTPASSAGE \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.1259f, 0.3162f, 1.7500f, 0.5000f, 0.8700f, 0.8913f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_MEDIUMROOM \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.1000f, 0.2818f, 1.4700f, 0.4200f, 0.8200f, 0.8913f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_LARGEROOM \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.0891f, 0.2818f, 2.6500f, 0.3300f, 0.8200f, 0.8913f, 0.0660f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_LONGPASSAGE \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.1000f, 0.3162f, 1.9900f, 0.4000f, 0.7900f, 1.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.4467f, 0.0360f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_HALL \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.0794f, 0.2818f, 3.4500f, 0.3000f, 0.8200f, 0.8913f, 0.0880f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0630f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_CUPBOARD \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.1413f, 0.3162f, 0.5600f, 0.4600f, 0.9100f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_COURTYARD \
|
||||||
|
{ 1.0000f, 0.6500f, 0.3162f, 0.0794f, 0.3162f, 1.7900f, 0.3500f, 0.7900f, 0.5623f, 0.1230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1000f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_WOODEN_ALCOVE \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.1259f, 0.3162f, 1.2200f, 0.6200f, 0.9100f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
/* Sports Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPORT_EMPTYSTADIUM \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.4467f, 0.7943f, 6.2600f, 0.5100f, 1.1000f, 0.0631f, 0.1830f, { 0.0000f, 0.0000f, 0.0000f }, 0.3981f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPORT_SQUASHCOURT \
|
||||||
|
{ 1.0000f, 0.7500f, 0.3162f, 0.3162f, 0.7943f, 2.2200f, 0.9100f, 1.1600f, 0.4467f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1260f, 0.1900f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPORT_SMALLSWIMMINGPOOL \
|
||||||
|
{ 1.0000f, 0.7000f, 0.3162f, 0.7943f, 0.8913f, 2.7600f, 1.2500f, 1.1400f, 0.6310f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1790f, 0.1500f, 0.8950f, 0.1900f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPORT_LARGESWIMMINGPOOL \
|
||||||
|
{ 1.0000f, 0.8200f, 0.3162f, 0.7943f, 1.0000f, 5.4900f, 1.3100f, 1.1400f, 0.4467f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 0.5012f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2220f, 0.5500f, 1.1590f, 0.2100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPORT_GYMNASIUM \
|
||||||
|
{ 1.0000f, 0.8100f, 0.3162f, 0.4467f, 0.8913f, 3.1400f, 1.0600f, 1.3500f, 0.3981f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.5623f, 0.0450f, { 0.0000f, 0.0000f, 0.0000f }, 0.1460f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPORT_FULLSTADIUM \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.0708f, 0.7943f, 5.2500f, 0.1700f, 0.8000f, 0.1000f, 0.1880f, { 0.0000f, 0.0000f, 0.0000f }, 0.2818f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SPORT_STADIUMTANNOY \
|
||||||
|
{ 1.0000f, 0.7800f, 0.3162f, 0.5623f, 0.5012f, 2.5300f, 0.8800f, 0.6800f, 0.2818f, 0.2300f, { 0.0000f, 0.0000f, 0.0000f }, 0.5012f, 0.0630f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
/* Prefab Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PREFAB_WORKSHOP \
|
||||||
|
{ 0.4287f, 1.0000f, 0.3162f, 0.1413f, 0.3981f, 0.7600f, 1.0000f, 1.0000f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PREFAB_SCHOOLROOM \
|
||||||
|
{ 0.4022f, 0.6900f, 0.3162f, 0.6310f, 0.5012f, 0.9800f, 0.4500f, 0.1800f, 1.4125f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.0950f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PREFAB_PRACTISEROOM \
|
||||||
|
{ 0.4022f, 0.8700f, 0.3162f, 0.3981f, 0.5012f, 1.1200f, 0.5600f, 0.1800f, 1.2589f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.0950f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PREFAB_OUTHOUSE \
|
||||||
|
{ 1.0000f, 0.8200f, 0.3162f, 0.1122f, 0.1585f, 1.3800f, 0.3800f, 0.3500f, 0.8913f, 0.0240f, { 0.0000f, 0.0000f, -0.0000f }, 0.6310f, 0.0440f, { 0.0000f, 0.0000f, 0.0000f }, 0.1210f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PREFAB_CARAVAN \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.0891f, 0.1259f, 0.4300f, 1.5000f, 1.0000f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
/* Dome and Pipe Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DOME_TOMB \
|
||||||
|
{ 1.0000f, 0.7900f, 0.3162f, 0.3548f, 0.2239f, 4.1800f, 0.2100f, 0.1000f, 0.3868f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 1.6788f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.1770f, 0.1900f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PIPE_SMALL \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.3548f, 0.2239f, 5.0400f, 0.1000f, 0.1000f, 0.5012f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 2.5119f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DOME_SAINTPAULS \
|
||||||
|
{ 1.0000f, 0.8700f, 0.3162f, 0.3548f, 0.2239f, 10.4800f, 0.1900f, 0.1000f, 0.1778f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0420f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1200f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PIPE_LONGTHIN \
|
||||||
|
{ 0.2560f, 0.9100f, 0.3162f, 0.4467f, 0.2818f, 9.2100f, 0.1800f, 0.1000f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PIPE_LARGE \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.3548f, 0.2239f, 8.4500f, 0.1000f, 0.1000f, 0.3981f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_PIPE_RESONANT \
|
||||||
|
{ 0.1373f, 0.9100f, 0.3162f, 0.4467f, 0.2818f, 6.8100f, 0.1800f, 0.1000f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
/* Outdoors Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_OUTDOORS_BACKYARD \
|
||||||
|
{ 1.0000f, 0.4500f, 0.3162f, 0.2512f, 0.5012f, 1.1200f, 0.3400f, 0.4600f, 0.4467f, 0.0690f, { 0.0000f, 0.0000f, -0.0000f }, 0.7079f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.2180f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_OUTDOORS_ROLLINGPLAINS \
|
||||||
|
{ 1.0000f, 0.0000f, 0.3162f, 0.0112f, 0.6310f, 2.1300f, 0.2100f, 0.4600f, 0.1778f, 0.3000f, { 0.0000f, 0.0000f, -0.0000f }, 0.4467f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_OUTDOORS_DEEPCANYON \
|
||||||
|
{ 1.0000f, 0.7400f, 0.3162f, 0.1778f, 0.6310f, 3.8900f, 0.2100f, 0.4600f, 0.3162f, 0.2230f, { 0.0000f, 0.0000f, -0.0000f }, 0.3548f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_OUTDOORS_CREEK \
|
||||||
|
{ 1.0000f, 0.3500f, 0.3162f, 0.1778f, 0.5012f, 2.1300f, 0.2100f, 0.4600f, 0.3981f, 0.1150f, { 0.0000f, 0.0000f, -0.0000f }, 0.1995f, 0.0310f, { 0.0000f, 0.0000f, 0.0000f }, 0.2180f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_OUTDOORS_VALLEY \
|
||||||
|
{ 1.0000f, 0.2800f, 0.3162f, 0.0282f, 0.1585f, 2.8800f, 0.2600f, 0.3500f, 0.1413f, 0.2630f, { 0.0000f, 0.0000f, -0.0000f }, 0.3981f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
/* Mood Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_MOOD_HEAVEN \
|
||||||
|
{ 1.0000f, 0.9400f, 0.3162f, 0.7943f, 0.4467f, 5.0400f, 1.1200f, 0.5600f, 0.2427f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0800f, 2.7420f, 0.0500f, 0.9977f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_MOOD_HELL \
|
||||||
|
{ 1.0000f, 0.5700f, 0.3162f, 0.3548f, 0.4467f, 3.5700f, 0.4900f, 2.0000f, 0.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1100f, 0.0400f, 2.1090f, 0.5200f, 0.9943f, 5000.0000f, 139.5000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_MOOD_MEMORY \
|
||||||
|
{ 1.0000f, 0.8500f, 0.3162f, 0.6310f, 0.3548f, 4.0600f, 0.8200f, 0.5600f, 0.0398f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.4740f, 0.4500f, 0.9886f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
/* Driving Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRIVING_COMMENTATOR \
|
||||||
|
{ 1.0000f, 0.0000f, 3.1623f, 0.5623f, 0.5012f, 2.4200f, 0.8800f, 0.6800f, 0.1995f, 0.0930f, { 0.0000f, 0.0000f, 0.0000f }, 0.2512f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9886f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRIVING_PITGARAGE \
|
||||||
|
{ 0.4287f, 0.5900f, 0.3162f, 0.7079f, 0.5623f, 1.7200f, 0.9300f, 0.8700f, 0.5623f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRIVING_INCAR_RACER \
|
||||||
|
{ 0.0832f, 0.8000f, 0.3162f, 1.0000f, 0.7943f, 0.1700f, 2.0000f, 0.4100f, 1.7783f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRIVING_INCAR_SPORTS \
|
||||||
|
{ 0.0832f, 0.8000f, 0.3162f, 0.6310f, 1.0000f, 0.1700f, 0.7500f, 0.4100f, 1.0000f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.5623f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRIVING_INCAR_LUXURY \
|
||||||
|
{ 0.2560f, 1.0000f, 0.3162f, 0.1000f, 0.5012f, 0.1300f, 0.4100f, 0.4600f, 0.7943f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRIVING_FULLGRANDSTAND \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 0.2818f, 0.6310f, 3.0100f, 1.3700f, 1.2800f, 0.3548f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 0.1778f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10420.2002f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRIVING_EMPTYGRANDSTAND \
|
||||||
|
{ 1.0000f, 1.0000f, 0.3162f, 1.0000f, 0.7943f, 4.6200f, 1.7500f, 1.4000f, 0.2082f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 0.2512f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10420.2002f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DRIVING_TUNNEL \
|
||||||
|
{ 1.0000f, 0.8100f, 0.3162f, 0.3981f, 0.8913f, 3.4200f, 0.9400f, 1.3100f, 0.7079f, 0.0510f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0470f, { 0.0000f, 0.0000f, 0.0000f }, 0.2140f, 0.0500f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 155.3000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
/* City Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CITY_STREETS \
|
||||||
|
{ 1.0000f, 0.7800f, 0.3162f, 0.7079f, 0.8913f, 1.7900f, 1.1200f, 0.9100f, 0.2818f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 0.1995f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CITY_SUBWAY \
|
||||||
|
{ 1.0000f, 0.7400f, 0.3162f, 0.7079f, 0.8913f, 3.0100f, 1.2300f, 0.9100f, 0.7079f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.2100f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CITY_MUSEUM \
|
||||||
|
{ 1.0000f, 0.8200f, 0.3162f, 0.1778f, 0.1778f, 3.2800f, 1.4000f, 0.5700f, 0.2512f, 0.0390f, { 0.0000f, 0.0000f, -0.0000f }, 0.8913f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 0.1300f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CITY_LIBRARY \
|
||||||
|
{ 1.0000f, 0.8200f, 0.3162f, 0.2818f, 0.0891f, 2.7600f, 0.8900f, 0.4100f, 0.3548f, 0.0290f, { 0.0000f, 0.0000f, -0.0000f }, 0.8913f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.1300f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CITY_UNDERPASS \
|
||||||
|
{ 1.0000f, 0.8200f, 0.3162f, 0.4467f, 0.8913f, 3.5700f, 1.1200f, 0.9100f, 0.3981f, 0.0590f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0370f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1400f, 0.2500f, 0.0000f, 0.9920f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CITY_ABANDONED \
|
||||||
|
{ 1.0000f, 0.6900f, 0.3162f, 0.7943f, 0.8913f, 3.2800f, 1.1700f, 0.9100f, 0.4467f, 0.0440f, { 0.0000f, 0.0000f, 0.0000f }, 0.2818f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9966f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
/* Misc. Presets */
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_DUSTYROOM \
|
||||||
|
{ 0.3645f, 0.5600f, 0.3162f, 0.7943f, 0.7079f, 1.7900f, 0.3800f, 0.2100f, 0.5012f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0060f, { 0.0000f, 0.0000f, 0.0000f }, 0.2020f, 0.0500f, 0.2500f, 0.0000f, 0.9886f, 13046.0000f, 163.3000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_CHAPEL \
|
||||||
|
{ 1.0000f, 0.8400f, 0.3162f, 0.5623f, 1.0000f, 4.6200f, 0.6400f, 1.2300f, 0.4467f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.1100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 }
|
||||||
|
|
||||||
|
#define EFX_REVERB_PRESET_SMALLWATERROOM \
|
||||||
|
{ 1.0000f, 0.7000f, 0.3162f, 0.4477f, 1.0000f, 1.5100f, 1.2500f, 1.1400f, 0.8913f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1790f, 0.1500f, 0.8950f, 0.1900f, 0.9920f, 5000.0000f, 250.0000f, 0.0000f, 0x0 }
|
||||||
|
|
||||||
|
#endif /* EFX_PRESETS_H */
|
||||||
|
|
@ -0,0 +1,761 @@
|
||||||
|
#ifndef AL_EFX_H
|
||||||
|
#define AL_EFX_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "alc.h"
|
||||||
|
#include "al.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ALC_EXT_EFX_NAME "ALC_EXT_EFX"
|
||||||
|
|
||||||
|
#define ALC_EFX_MAJOR_VERSION 0x20001
|
||||||
|
#define ALC_EFX_MINOR_VERSION 0x20002
|
||||||
|
#define ALC_MAX_AUXILIARY_SENDS 0x20003
|
||||||
|
|
||||||
|
|
||||||
|
/* Listener properties. */
|
||||||
|
#define AL_METERS_PER_UNIT 0x20004
|
||||||
|
|
||||||
|
/* Source properties. */
|
||||||
|
#define AL_DIRECT_FILTER 0x20005
|
||||||
|
#define AL_AUXILIARY_SEND_FILTER 0x20006
|
||||||
|
#define AL_AIR_ABSORPTION_FACTOR 0x20007
|
||||||
|
#define AL_ROOM_ROLLOFF_FACTOR 0x20008
|
||||||
|
#define AL_CONE_OUTER_GAINHF 0x20009
|
||||||
|
#define AL_DIRECT_FILTER_GAINHF_AUTO 0x2000A
|
||||||
|
#define AL_AUXILIARY_SEND_FILTER_GAIN_AUTO 0x2000B
|
||||||
|
#define AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO 0x2000C
|
||||||
|
|
||||||
|
|
||||||
|
/* Effect properties. */
|
||||||
|
|
||||||
|
/* Reverb effect parameters */
|
||||||
|
#define AL_REVERB_DENSITY 0x0001
|
||||||
|
#define AL_REVERB_DIFFUSION 0x0002
|
||||||
|
#define AL_REVERB_GAIN 0x0003
|
||||||
|
#define AL_REVERB_GAINHF 0x0004
|
||||||
|
#define AL_REVERB_DECAY_TIME 0x0005
|
||||||
|
#define AL_REVERB_DECAY_HFRATIO 0x0006
|
||||||
|
#define AL_REVERB_REFLECTIONS_GAIN 0x0007
|
||||||
|
#define AL_REVERB_REFLECTIONS_DELAY 0x0008
|
||||||
|
#define AL_REVERB_LATE_REVERB_GAIN 0x0009
|
||||||
|
#define AL_REVERB_LATE_REVERB_DELAY 0x000A
|
||||||
|
#define AL_REVERB_AIR_ABSORPTION_GAINHF 0x000B
|
||||||
|
#define AL_REVERB_ROOM_ROLLOFF_FACTOR 0x000C
|
||||||
|
#define AL_REVERB_DECAY_HFLIMIT 0x000D
|
||||||
|
|
||||||
|
/* EAX Reverb effect parameters */
|
||||||
|
#define AL_EAXREVERB_DENSITY 0x0001
|
||||||
|
#define AL_EAXREVERB_DIFFUSION 0x0002
|
||||||
|
#define AL_EAXREVERB_GAIN 0x0003
|
||||||
|
#define AL_EAXREVERB_GAINHF 0x0004
|
||||||
|
#define AL_EAXREVERB_GAINLF 0x0005
|
||||||
|
#define AL_EAXREVERB_DECAY_TIME 0x0006
|
||||||
|
#define AL_EAXREVERB_DECAY_HFRATIO 0x0007
|
||||||
|
#define AL_EAXREVERB_DECAY_LFRATIO 0x0008
|
||||||
|
#define AL_EAXREVERB_REFLECTIONS_GAIN 0x0009
|
||||||
|
#define AL_EAXREVERB_REFLECTIONS_DELAY 0x000A
|
||||||
|
#define AL_EAXREVERB_REFLECTIONS_PAN 0x000B
|
||||||
|
#define AL_EAXREVERB_LATE_REVERB_GAIN 0x000C
|
||||||
|
#define AL_EAXREVERB_LATE_REVERB_DELAY 0x000D
|
||||||
|
#define AL_EAXREVERB_LATE_REVERB_PAN 0x000E
|
||||||
|
#define AL_EAXREVERB_ECHO_TIME 0x000F
|
||||||
|
#define AL_EAXREVERB_ECHO_DEPTH 0x0010
|
||||||
|
#define AL_EAXREVERB_MODULATION_TIME 0x0011
|
||||||
|
#define AL_EAXREVERB_MODULATION_DEPTH 0x0012
|
||||||
|
#define AL_EAXREVERB_AIR_ABSORPTION_GAINHF 0x0013
|
||||||
|
#define AL_EAXREVERB_HFREFERENCE 0x0014
|
||||||
|
#define AL_EAXREVERB_LFREFERENCE 0x0015
|
||||||
|
#define AL_EAXREVERB_ROOM_ROLLOFF_FACTOR 0x0016
|
||||||
|
#define AL_EAXREVERB_DECAY_HFLIMIT 0x0017
|
||||||
|
|
||||||
|
/* Chorus effect parameters */
|
||||||
|
#define AL_CHORUS_WAVEFORM 0x0001
|
||||||
|
#define AL_CHORUS_PHASE 0x0002
|
||||||
|
#define AL_CHORUS_RATE 0x0003
|
||||||
|
#define AL_CHORUS_DEPTH 0x0004
|
||||||
|
#define AL_CHORUS_FEEDBACK 0x0005
|
||||||
|
#define AL_CHORUS_DELAY 0x0006
|
||||||
|
|
||||||
|
/* Distortion effect parameters */
|
||||||
|
#define AL_DISTORTION_EDGE 0x0001
|
||||||
|
#define AL_DISTORTION_GAIN 0x0002
|
||||||
|
#define AL_DISTORTION_LOWPASS_CUTOFF 0x0003
|
||||||
|
#define AL_DISTORTION_EQCENTER 0x0004
|
||||||
|
#define AL_DISTORTION_EQBANDWIDTH 0x0005
|
||||||
|
|
||||||
|
/* Echo effect parameters */
|
||||||
|
#define AL_ECHO_DELAY 0x0001
|
||||||
|
#define AL_ECHO_LRDELAY 0x0002
|
||||||
|
#define AL_ECHO_DAMPING 0x0003
|
||||||
|
#define AL_ECHO_FEEDBACK 0x0004
|
||||||
|
#define AL_ECHO_SPREAD 0x0005
|
||||||
|
|
||||||
|
/* Flanger effect parameters */
|
||||||
|
#define AL_FLANGER_WAVEFORM 0x0001
|
||||||
|
#define AL_FLANGER_PHASE 0x0002
|
||||||
|
#define AL_FLANGER_RATE 0x0003
|
||||||
|
#define AL_FLANGER_DEPTH 0x0004
|
||||||
|
#define AL_FLANGER_FEEDBACK 0x0005
|
||||||
|
#define AL_FLANGER_DELAY 0x0006
|
||||||
|
|
||||||
|
/* Frequency shifter effect parameters */
|
||||||
|
#define AL_FREQUENCY_SHIFTER_FREQUENCY 0x0001
|
||||||
|
#define AL_FREQUENCY_SHIFTER_LEFT_DIRECTION 0x0002
|
||||||
|
#define AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION 0x0003
|
||||||
|
|
||||||
|
/* Vocal morpher effect parameters */
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEMEA 0x0001
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING 0x0002
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEMEB 0x0003
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING 0x0004
|
||||||
|
#define AL_VOCAL_MORPHER_WAVEFORM 0x0005
|
||||||
|
#define AL_VOCAL_MORPHER_RATE 0x0006
|
||||||
|
|
||||||
|
/* Pitchshifter effect parameters */
|
||||||
|
#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001
|
||||||
|
#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002
|
||||||
|
|
||||||
|
/* Ringmodulator effect parameters */
|
||||||
|
#define AL_RING_MODULATOR_FREQUENCY 0x0001
|
||||||
|
#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002
|
||||||
|
#define AL_RING_MODULATOR_WAVEFORM 0x0003
|
||||||
|
|
||||||
|
/* Autowah effect parameters */
|
||||||
|
#define AL_AUTOWAH_ATTACK_TIME 0x0001
|
||||||
|
#define AL_AUTOWAH_RELEASE_TIME 0x0002
|
||||||
|
#define AL_AUTOWAH_RESONANCE 0x0003
|
||||||
|
#define AL_AUTOWAH_PEAK_GAIN 0x0004
|
||||||
|
|
||||||
|
/* Compressor effect parameters */
|
||||||
|
#define AL_COMPRESSOR_ONOFF 0x0001
|
||||||
|
|
||||||
|
/* Equalizer effect parameters */
|
||||||
|
#define AL_EQUALIZER_LOW_GAIN 0x0001
|
||||||
|
#define AL_EQUALIZER_LOW_CUTOFF 0x0002
|
||||||
|
#define AL_EQUALIZER_MID1_GAIN 0x0003
|
||||||
|
#define AL_EQUALIZER_MID1_CENTER 0x0004
|
||||||
|
#define AL_EQUALIZER_MID1_WIDTH 0x0005
|
||||||
|
#define AL_EQUALIZER_MID2_GAIN 0x0006
|
||||||
|
#define AL_EQUALIZER_MID2_CENTER 0x0007
|
||||||
|
#define AL_EQUALIZER_MID2_WIDTH 0x0008
|
||||||
|
#define AL_EQUALIZER_HIGH_GAIN 0x0009
|
||||||
|
#define AL_EQUALIZER_HIGH_CUTOFF 0x000A
|
||||||
|
|
||||||
|
/* Effect type */
|
||||||
|
#define AL_EFFECT_FIRST_PARAMETER 0x0000
|
||||||
|
#define AL_EFFECT_LAST_PARAMETER 0x8000
|
||||||
|
#define AL_EFFECT_TYPE 0x8001
|
||||||
|
|
||||||
|
/* Effect types, used with the AL_EFFECT_TYPE property */
|
||||||
|
#define AL_EFFECT_NULL 0x0000
|
||||||
|
#define AL_EFFECT_REVERB 0x0001
|
||||||
|
#define AL_EFFECT_CHORUS 0x0002
|
||||||
|
#define AL_EFFECT_DISTORTION 0x0003
|
||||||
|
#define AL_EFFECT_ECHO 0x0004
|
||||||
|
#define AL_EFFECT_FLANGER 0x0005
|
||||||
|
#define AL_EFFECT_FREQUENCY_SHIFTER 0x0006
|
||||||
|
#define AL_EFFECT_VOCAL_MORPHER 0x0007
|
||||||
|
#define AL_EFFECT_PITCH_SHIFTER 0x0008
|
||||||
|
#define AL_EFFECT_RING_MODULATOR 0x0009
|
||||||
|
#define AL_EFFECT_AUTOWAH 0x000A
|
||||||
|
#define AL_EFFECT_COMPRESSOR 0x000B
|
||||||
|
#define AL_EFFECT_EQUALIZER 0x000C
|
||||||
|
#define AL_EFFECT_EAXREVERB 0x8000
|
||||||
|
|
||||||
|
/* Auxiliary Effect Slot properties. */
|
||||||
|
#define AL_EFFECTSLOT_EFFECT 0x0001
|
||||||
|
#define AL_EFFECTSLOT_GAIN 0x0002
|
||||||
|
#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003
|
||||||
|
|
||||||
|
/* NULL Auxiliary Slot ID to disable a source send. */
|
||||||
|
#define AL_EFFECTSLOT_NULL 0x0000
|
||||||
|
|
||||||
|
|
||||||
|
/* Filter properties. */
|
||||||
|
|
||||||
|
/* Lowpass filter parameters */
|
||||||
|
#define AL_LOWPASS_GAIN 0x0001
|
||||||
|
#define AL_LOWPASS_GAINHF 0x0002
|
||||||
|
|
||||||
|
/* Highpass filter parameters */
|
||||||
|
#define AL_HIGHPASS_GAIN 0x0001
|
||||||
|
#define AL_HIGHPASS_GAINLF 0x0002
|
||||||
|
|
||||||
|
/* Bandpass filter parameters */
|
||||||
|
#define AL_BANDPASS_GAIN 0x0001
|
||||||
|
#define AL_BANDPASS_GAINLF 0x0002
|
||||||
|
#define AL_BANDPASS_GAINHF 0x0003
|
||||||
|
|
||||||
|
/* Filter type */
|
||||||
|
#define AL_FILTER_FIRST_PARAMETER 0x0000
|
||||||
|
#define AL_FILTER_LAST_PARAMETER 0x8000
|
||||||
|
#define AL_FILTER_TYPE 0x8001
|
||||||
|
|
||||||
|
/* Filter types, used with the AL_FILTER_TYPE property */
|
||||||
|
#define AL_FILTER_NULL 0x0000
|
||||||
|
#define AL_FILTER_LOWPASS 0x0001
|
||||||
|
#define AL_FILTER_HIGHPASS 0x0002
|
||||||
|
#define AL_FILTER_BANDPASS 0x0003
|
||||||
|
|
||||||
|
|
||||||
|
/* Effect object function types. */
|
||||||
|
typedef void (AL_APIENTRY *LPALGENEFFECTS)(ALsizei, ALuint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETEEFFECTS)(ALsizei, const ALuint*);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISEFFECT)(ALuint);
|
||||||
|
typedef void (AL_APIENTRY *LPALEFFECTI)(ALuint, ALenum, ALint);
|
||||||
|
typedef void (AL_APIENTRY *LPALEFFECTIV)(ALuint, ALenum, const ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALEFFECTF)(ALuint, ALenum, ALfloat);
|
||||||
|
typedef void (AL_APIENTRY *LPALEFFECTFV)(ALuint, ALenum, const ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETEFFECTI)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETEFFECTIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETEFFECTF)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETEFFECTFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
|
||||||
|
/* Filter object function types. */
|
||||||
|
typedef void (AL_APIENTRY *LPALGENFILTERS)(ALsizei, ALuint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETEFILTERS)(ALsizei, const ALuint*);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISFILTER)(ALuint);
|
||||||
|
typedef void (AL_APIENTRY *LPALFILTERI)(ALuint, ALenum, ALint);
|
||||||
|
typedef void (AL_APIENTRY *LPALFILTERIV)(ALuint, ALenum, const ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALFILTERF)(ALuint, ALenum, ALfloat);
|
||||||
|
typedef void (AL_APIENTRY *LPALFILTERFV)(ALuint, ALenum, const ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFILTERI)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFILTERIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFILTERF)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETFILTERFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
|
||||||
|
/* Auxiliary Effect Slot object function types. */
|
||||||
|
typedef void (AL_APIENTRY *LPALGENAUXILIARYEFFECTSLOTS)(ALsizei, ALuint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALDELETEAUXILIARYEFFECTSLOTS)(ALsizei, const ALuint*);
|
||||||
|
typedef ALboolean (AL_APIENTRY *LPALISAUXILIARYEFFECTSLOT)(ALuint);
|
||||||
|
typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTI)(ALuint, ALenum, ALint);
|
||||||
|
typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTIV)(ALuint, ALenum, const ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat);
|
||||||
|
typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, const ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTI)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTIV)(ALuint, ALenum, ALint*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat*);
|
||||||
|
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, ALfloat*);
|
||||||
|
|
||||||
|
#ifdef AL_ALEXT_PROTOTYPES
|
||||||
|
AL_API ALvoid AL_APIENTRY alGenEffects(ALsizei n, ALuint *effects);
|
||||||
|
AL_API ALvoid AL_APIENTRY alDeleteEffects(ALsizei n, const ALuint *effects);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsEffect(ALuint effect);
|
||||||
|
AL_API ALvoid AL_APIENTRY alEffecti(ALuint effect, ALenum param, ALint iValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alEffectiv(ALuint effect, ALenum param, const ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alEffectf(ALuint effect, ALenum param, ALfloat flValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alEffectfv(ALuint effect, ALenum param, const ALfloat *pflValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetEffecti(ALuint effect, ALenum param, ALint *piValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetEffectiv(ALuint effect, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetEffectf(ALuint effect, ALenum param, ALfloat *pflValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetEffectfv(ALuint effect, ALenum param, ALfloat *pflValues);
|
||||||
|
|
||||||
|
AL_API ALvoid AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters);
|
||||||
|
AL_API ALvoid AL_APIENTRY alDeleteFilters(ALsizei n, const ALuint *filters);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsFilter(ALuint filter);
|
||||||
|
AL_API ALvoid AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint iValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alFilteriv(ALuint filter, ALenum param, const ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alFilterfv(ALuint filter, ALenum param, const ALfloat *pflValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetFilteri(ALuint filter, ALenum param, ALint *piValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetFilteriv(ALuint filter, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetFilterf(ALuint filter, ALenum param, ALfloat *pflValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pflValues);
|
||||||
|
|
||||||
|
AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots);
|
||||||
|
AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint *effectslots);
|
||||||
|
AL_API ALboolean AL_APIENTRY alIsAuxiliaryEffectSlot(ALuint effectslot);
|
||||||
|
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, const ALfloat *pflValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue);
|
||||||
|
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Filter ranges and defaults. */
|
||||||
|
|
||||||
|
/* Lowpass filter */
|
||||||
|
#define AL_LOWPASS_MIN_GAIN (0.0f)
|
||||||
|
#define AL_LOWPASS_MAX_GAIN (1.0f)
|
||||||
|
#define AL_LOWPASS_DEFAULT_GAIN (1.0f)
|
||||||
|
|
||||||
|
#define AL_LOWPASS_MIN_GAINHF (0.0f)
|
||||||
|
#define AL_LOWPASS_MAX_GAINHF (1.0f)
|
||||||
|
#define AL_LOWPASS_DEFAULT_GAINHF (1.0f)
|
||||||
|
|
||||||
|
/* Highpass filter */
|
||||||
|
#define AL_HIGHPASS_MIN_GAIN (0.0f)
|
||||||
|
#define AL_HIGHPASS_MAX_GAIN (1.0f)
|
||||||
|
#define AL_HIGHPASS_DEFAULT_GAIN (1.0f)
|
||||||
|
|
||||||
|
#define AL_HIGHPASS_MIN_GAINLF (0.0f)
|
||||||
|
#define AL_HIGHPASS_MAX_GAINLF (1.0f)
|
||||||
|
#define AL_HIGHPASS_DEFAULT_GAINLF (1.0f)
|
||||||
|
|
||||||
|
/* Bandpass filter */
|
||||||
|
#define AL_BANDPASS_MIN_GAIN (0.0f)
|
||||||
|
#define AL_BANDPASS_MAX_GAIN (1.0f)
|
||||||
|
#define AL_BANDPASS_DEFAULT_GAIN (1.0f)
|
||||||
|
|
||||||
|
#define AL_BANDPASS_MIN_GAINHF (0.0f)
|
||||||
|
#define AL_BANDPASS_MAX_GAINHF (1.0f)
|
||||||
|
#define AL_BANDPASS_DEFAULT_GAINHF (1.0f)
|
||||||
|
|
||||||
|
#define AL_BANDPASS_MIN_GAINLF (0.0f)
|
||||||
|
#define AL_BANDPASS_MAX_GAINLF (1.0f)
|
||||||
|
#define AL_BANDPASS_DEFAULT_GAINLF (1.0f)
|
||||||
|
|
||||||
|
|
||||||
|
/* Effect parameter ranges and defaults. */
|
||||||
|
|
||||||
|
/* Standard reverb effect */
|
||||||
|
#define AL_REVERB_MIN_DENSITY (0.0f)
|
||||||
|
#define AL_REVERB_MAX_DENSITY (1.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_DENSITY (1.0f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_DIFFUSION (0.0f)
|
||||||
|
#define AL_REVERB_MAX_DIFFUSION (1.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_DIFFUSION (1.0f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_GAIN (0.0f)
|
||||||
|
#define AL_REVERB_MAX_GAIN (1.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_GAIN (0.32f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_GAINHF (0.0f)
|
||||||
|
#define AL_REVERB_MAX_GAINHF (1.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_GAINHF (0.89f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_DECAY_TIME (0.1f)
|
||||||
|
#define AL_REVERB_MAX_DECAY_TIME (20.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_DECAY_TIME (1.49f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_DECAY_HFRATIO (0.1f)
|
||||||
|
#define AL_REVERB_MAX_DECAY_HFRATIO (2.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_DECAY_HFRATIO (0.83f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_REFLECTIONS_GAIN (0.0f)
|
||||||
|
#define AL_REVERB_MAX_REFLECTIONS_GAIN (3.16f)
|
||||||
|
#define AL_REVERB_DEFAULT_REFLECTIONS_GAIN (0.05f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_REFLECTIONS_DELAY (0.0f)
|
||||||
|
#define AL_REVERB_MAX_REFLECTIONS_DELAY (0.3f)
|
||||||
|
#define AL_REVERB_DEFAULT_REFLECTIONS_DELAY (0.007f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_LATE_REVERB_GAIN (0.0f)
|
||||||
|
#define AL_REVERB_MAX_LATE_REVERB_GAIN (10.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_LATE_REVERB_GAIN (1.26f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_LATE_REVERB_DELAY (0.0f)
|
||||||
|
#define AL_REVERB_MAX_LATE_REVERB_DELAY (0.1f)
|
||||||
|
#define AL_REVERB_DEFAULT_LATE_REVERB_DELAY (0.011f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_AIR_ABSORPTION_GAINHF (0.892f)
|
||||||
|
#define AL_REVERB_MAX_AIR_ABSORPTION_GAINHF (1.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF (0.994f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR (0.0f)
|
||||||
|
#define AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR (10.0f)
|
||||||
|
#define AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f)
|
||||||
|
|
||||||
|
#define AL_REVERB_MIN_DECAY_HFLIMIT AL_FALSE
|
||||||
|
#define AL_REVERB_MAX_DECAY_HFLIMIT AL_TRUE
|
||||||
|
#define AL_REVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE
|
||||||
|
|
||||||
|
/* EAX reverb effect */
|
||||||
|
#define AL_EAXREVERB_MIN_DENSITY (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_DENSITY (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DENSITY (1.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DIFFUSION (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_DIFFUSION (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DIFFUSION (1.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_GAIN (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_GAIN (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_GAIN (0.32f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_GAINHF (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_GAINHF (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_GAINHF (0.89f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_GAINLF (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_GAINLF (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_GAINLF (1.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DECAY_TIME (0.1f)
|
||||||
|
#define AL_EAXREVERB_MAX_DECAY_TIME (20.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DECAY_TIME (1.49f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DECAY_HFRATIO (0.1f)
|
||||||
|
#define AL_EAXREVERB_MAX_DECAY_HFRATIO (2.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DECAY_HFRATIO (0.83f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DECAY_LFRATIO (0.1f)
|
||||||
|
#define AL_EAXREVERB_MAX_DECAY_LFRATIO (2.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DECAY_LFRATIO (1.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_REFLECTIONS_GAIN (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_REFLECTIONS_GAIN (3.16f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN (0.05f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_REFLECTIONS_DELAY (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_REFLECTIONS_DELAY (0.3f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY (0.007f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_LATE_REVERB_GAIN (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_LATE_REVERB_GAIN (10.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_LATE_REVERB_GAIN (1.26f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_LATE_REVERB_DELAY (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_LATE_REVERB_DELAY (0.1f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_LATE_REVERB_DELAY (0.011f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_ECHO_TIME (0.075f)
|
||||||
|
#define AL_EAXREVERB_MAX_ECHO_TIME (0.25f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_ECHO_TIME (0.25f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_ECHO_DEPTH (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_ECHO_DEPTH (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_ECHO_DEPTH (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_MODULATION_TIME (0.04f)
|
||||||
|
#define AL_EAXREVERB_MAX_MODULATION_TIME (4.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_MODULATION_TIME (0.25f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_MODULATION_DEPTH (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_MODULATION_DEPTH (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_MODULATION_DEPTH (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_AIR_ABSORPTION_GAINHF (0.892f)
|
||||||
|
#define AL_EAXREVERB_MAX_AIR_ABSORPTION_GAINHF (1.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_AIR_ABSORPTION_GAINHF (0.994f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_HFREFERENCE (1000.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_HFREFERENCE (20000.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_HFREFERENCE (5000.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_LFREFERENCE (20.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_LFREFERENCE (1000.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_LFREFERENCE (250.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_ROOM_ROLLOFF_FACTOR (0.0f)
|
||||||
|
#define AL_EAXREVERB_MAX_ROOM_ROLLOFF_FACTOR (10.0f)
|
||||||
|
#define AL_EAXREVERB_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f)
|
||||||
|
|
||||||
|
#define AL_EAXREVERB_MIN_DECAY_HFLIMIT AL_FALSE
|
||||||
|
#define AL_EAXREVERB_MAX_DECAY_HFLIMIT AL_TRUE
|
||||||
|
#define AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE
|
||||||
|
|
||||||
|
/* Chorus effect */
|
||||||
|
#define AL_CHORUS_WAVEFORM_SINUSOID (0)
|
||||||
|
#define AL_CHORUS_WAVEFORM_TRIANGLE (1)
|
||||||
|
|
||||||
|
#define AL_CHORUS_MIN_WAVEFORM (0)
|
||||||
|
#define AL_CHORUS_MAX_WAVEFORM (1)
|
||||||
|
#define AL_CHORUS_DEFAULT_WAVEFORM (1)
|
||||||
|
|
||||||
|
#define AL_CHORUS_MIN_PHASE (-180)
|
||||||
|
#define AL_CHORUS_MAX_PHASE (180)
|
||||||
|
#define AL_CHORUS_DEFAULT_PHASE (90)
|
||||||
|
|
||||||
|
#define AL_CHORUS_MIN_RATE (0.0f)
|
||||||
|
#define AL_CHORUS_MAX_RATE (10.0f)
|
||||||
|
#define AL_CHORUS_DEFAULT_RATE (1.1f)
|
||||||
|
|
||||||
|
#define AL_CHORUS_MIN_DEPTH (0.0f)
|
||||||
|
#define AL_CHORUS_MAX_DEPTH (1.0f)
|
||||||
|
#define AL_CHORUS_DEFAULT_DEPTH (0.1f)
|
||||||
|
|
||||||
|
#define AL_CHORUS_MIN_FEEDBACK (-1.0f)
|
||||||
|
#define AL_CHORUS_MAX_FEEDBACK (1.0f)
|
||||||
|
#define AL_CHORUS_DEFAULT_FEEDBACK (0.25f)
|
||||||
|
|
||||||
|
#define AL_CHORUS_MIN_DELAY (0.0f)
|
||||||
|
#define AL_CHORUS_MAX_DELAY (0.016f)
|
||||||
|
#define AL_CHORUS_DEFAULT_DELAY (0.016f)
|
||||||
|
|
||||||
|
/* Distortion effect */
|
||||||
|
#define AL_DISTORTION_MIN_EDGE (0.0f)
|
||||||
|
#define AL_DISTORTION_MAX_EDGE (1.0f)
|
||||||
|
#define AL_DISTORTION_DEFAULT_EDGE (0.2f)
|
||||||
|
|
||||||
|
#define AL_DISTORTION_MIN_GAIN (0.01f)
|
||||||
|
#define AL_DISTORTION_MAX_GAIN (1.0f)
|
||||||
|
#define AL_DISTORTION_DEFAULT_GAIN (0.05f)
|
||||||
|
|
||||||
|
#define AL_DISTORTION_MIN_LOWPASS_CUTOFF (80.0f)
|
||||||
|
#define AL_DISTORTION_MAX_LOWPASS_CUTOFF (24000.0f)
|
||||||
|
#define AL_DISTORTION_DEFAULT_LOWPASS_CUTOFF (8000.0f)
|
||||||
|
|
||||||
|
#define AL_DISTORTION_MIN_EQCENTER (80.0f)
|
||||||
|
#define AL_DISTORTION_MAX_EQCENTER (24000.0f)
|
||||||
|
#define AL_DISTORTION_DEFAULT_EQCENTER (3600.0f)
|
||||||
|
|
||||||
|
#define AL_DISTORTION_MIN_EQBANDWIDTH (80.0f)
|
||||||
|
#define AL_DISTORTION_MAX_EQBANDWIDTH (24000.0f)
|
||||||
|
#define AL_DISTORTION_DEFAULT_EQBANDWIDTH (3600.0f)
|
||||||
|
|
||||||
|
/* Echo effect */
|
||||||
|
#define AL_ECHO_MIN_DELAY (0.0f)
|
||||||
|
#define AL_ECHO_MAX_DELAY (0.207f)
|
||||||
|
#define AL_ECHO_DEFAULT_DELAY (0.1f)
|
||||||
|
|
||||||
|
#define AL_ECHO_MIN_LRDELAY (0.0f)
|
||||||
|
#define AL_ECHO_MAX_LRDELAY (0.404f)
|
||||||
|
#define AL_ECHO_DEFAULT_LRDELAY (0.1f)
|
||||||
|
|
||||||
|
#define AL_ECHO_MIN_DAMPING (0.0f)
|
||||||
|
#define AL_ECHO_MAX_DAMPING (0.99f)
|
||||||
|
#define AL_ECHO_DEFAULT_DAMPING (0.5f)
|
||||||
|
|
||||||
|
#define AL_ECHO_MIN_FEEDBACK (0.0f)
|
||||||
|
#define AL_ECHO_MAX_FEEDBACK (1.0f)
|
||||||
|
#define AL_ECHO_DEFAULT_FEEDBACK (0.5f)
|
||||||
|
|
||||||
|
#define AL_ECHO_MIN_SPREAD (-1.0f)
|
||||||
|
#define AL_ECHO_MAX_SPREAD (1.0f)
|
||||||
|
#define AL_ECHO_DEFAULT_SPREAD (-1.0f)
|
||||||
|
|
||||||
|
/* Flanger effect */
|
||||||
|
#define AL_FLANGER_WAVEFORM_SINUSOID (0)
|
||||||
|
#define AL_FLANGER_WAVEFORM_TRIANGLE (1)
|
||||||
|
|
||||||
|
#define AL_FLANGER_MIN_WAVEFORM (0)
|
||||||
|
#define AL_FLANGER_MAX_WAVEFORM (1)
|
||||||
|
#define AL_FLANGER_DEFAULT_WAVEFORM (1)
|
||||||
|
|
||||||
|
#define AL_FLANGER_MIN_PHASE (-180)
|
||||||
|
#define AL_FLANGER_MAX_PHASE (180)
|
||||||
|
#define AL_FLANGER_DEFAULT_PHASE (0)
|
||||||
|
|
||||||
|
#define AL_FLANGER_MIN_RATE (0.0f)
|
||||||
|
#define AL_FLANGER_MAX_RATE (10.0f)
|
||||||
|
#define AL_FLANGER_DEFAULT_RATE (0.27f)
|
||||||
|
|
||||||
|
#define AL_FLANGER_MIN_DEPTH (0.0f)
|
||||||
|
#define AL_FLANGER_MAX_DEPTH (1.0f)
|
||||||
|
#define AL_FLANGER_DEFAULT_DEPTH (1.0f)
|
||||||
|
|
||||||
|
#define AL_FLANGER_MIN_FEEDBACK (-1.0f)
|
||||||
|
#define AL_FLANGER_MAX_FEEDBACK (1.0f)
|
||||||
|
#define AL_FLANGER_DEFAULT_FEEDBACK (-0.5f)
|
||||||
|
|
||||||
|
#define AL_FLANGER_MIN_DELAY (0.0f)
|
||||||
|
#define AL_FLANGER_MAX_DELAY (0.004f)
|
||||||
|
#define AL_FLANGER_DEFAULT_DELAY (0.002f)
|
||||||
|
|
||||||
|
/* Frequency shifter effect */
|
||||||
|
#define AL_FREQUENCY_SHIFTER_MIN_FREQUENCY (0.0f)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_MAX_FREQUENCY (24000.0f)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DEFAULT_FREQUENCY (0.0f)
|
||||||
|
|
||||||
|
#define AL_FREQUENCY_SHIFTER_MIN_LEFT_DIRECTION (0)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_MAX_LEFT_DIRECTION (2)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DEFAULT_LEFT_DIRECTION (0)
|
||||||
|
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DIRECTION_DOWN (0)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DIRECTION_UP (1)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DIRECTION_OFF (2)
|
||||||
|
|
||||||
|
#define AL_FREQUENCY_SHIFTER_MIN_RIGHT_DIRECTION (0)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_MAX_RIGHT_DIRECTION (2)
|
||||||
|
#define AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION (0)
|
||||||
|
|
||||||
|
/* Vocal morpher effect */
|
||||||
|
#define AL_VOCAL_MORPHER_MIN_PHONEMEA (0)
|
||||||
|
#define AL_VOCAL_MORPHER_MAX_PHONEMEA (29)
|
||||||
|
#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA (0)
|
||||||
|
|
||||||
|
#define AL_VOCAL_MORPHER_MIN_PHONEMEA_COARSE_TUNING (-24)
|
||||||
|
#define AL_VOCAL_MORPHER_MAX_PHONEMEA_COARSE_TUNING (24)
|
||||||
|
#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA_COARSE_TUNING (0)
|
||||||
|
|
||||||
|
#define AL_VOCAL_MORPHER_MIN_PHONEMEB (0)
|
||||||
|
#define AL_VOCAL_MORPHER_MAX_PHONEMEB (29)
|
||||||
|
#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB (10)
|
||||||
|
|
||||||
|
#define AL_VOCAL_MORPHER_MIN_PHONEMEB_COARSE_TUNING (-24)
|
||||||
|
#define AL_VOCAL_MORPHER_MAX_PHONEMEB_COARSE_TUNING (24)
|
||||||
|
#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB_COARSE_TUNING (0)
|
||||||
|
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_A (0)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_E (1)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_I (2)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_O (3)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_U (4)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_AA (5)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_AE (6)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_AH (7)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_AO (8)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_EH (9)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_ER (10)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_IH (11)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_IY (12)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_UH (13)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_UW (14)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_B (15)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_D (16)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_F (17)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_G (18)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_J (19)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_K (20)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_L (21)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_M (22)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_N (23)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_P (24)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_R (25)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_S (26)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_T (27)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_V (28)
|
||||||
|
#define AL_VOCAL_MORPHER_PHONEME_Z (29)
|
||||||
|
|
||||||
|
#define AL_VOCAL_MORPHER_WAVEFORM_SINUSOID (0)
|
||||||
|
#define AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE (1)
|
||||||
|
#define AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH (2)
|
||||||
|
|
||||||
|
#define AL_VOCAL_MORPHER_MIN_WAVEFORM (0)
|
||||||
|
#define AL_VOCAL_MORPHER_MAX_WAVEFORM (2)
|
||||||
|
#define AL_VOCAL_MORPHER_DEFAULT_WAVEFORM (0)
|
||||||
|
|
||||||
|
#define AL_VOCAL_MORPHER_MIN_RATE (0.0f)
|
||||||
|
#define AL_VOCAL_MORPHER_MAX_RATE (10.0f)
|
||||||
|
#define AL_VOCAL_MORPHER_DEFAULT_RATE (1.41f)
|
||||||
|
|
||||||
|
/* Pitch shifter effect */
|
||||||
|
#define AL_PITCH_SHIFTER_MIN_COARSE_TUNE (-12)
|
||||||
|
#define AL_PITCH_SHIFTER_MAX_COARSE_TUNE (12)
|
||||||
|
#define AL_PITCH_SHIFTER_DEFAULT_COARSE_TUNE (12)
|
||||||
|
|
||||||
|
#define AL_PITCH_SHIFTER_MIN_FINE_TUNE (-50)
|
||||||
|
#define AL_PITCH_SHIFTER_MAX_FINE_TUNE (50)
|
||||||
|
#define AL_PITCH_SHIFTER_DEFAULT_FINE_TUNE (0)
|
||||||
|
|
||||||
|
/* Ring modulator effect */
|
||||||
|
#define AL_RING_MODULATOR_MIN_FREQUENCY (0.0f)
|
||||||
|
#define AL_RING_MODULATOR_MAX_FREQUENCY (8000.0f)
|
||||||
|
#define AL_RING_MODULATOR_DEFAULT_FREQUENCY (440.0f)
|
||||||
|
|
||||||
|
#define AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF (0.0f)
|
||||||
|
#define AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF (24000.0f)
|
||||||
|
#define AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF (800.0f)
|
||||||
|
|
||||||
|
#define AL_RING_MODULATOR_SINUSOID (0)
|
||||||
|
#define AL_RING_MODULATOR_SAWTOOTH (1)
|
||||||
|
#define AL_RING_MODULATOR_SQUARE (2)
|
||||||
|
|
||||||
|
#define AL_RING_MODULATOR_MIN_WAVEFORM (0)
|
||||||
|
#define AL_RING_MODULATOR_MAX_WAVEFORM (2)
|
||||||
|
#define AL_RING_MODULATOR_DEFAULT_WAVEFORM (0)
|
||||||
|
|
||||||
|
/* Autowah effect */
|
||||||
|
#define AL_AUTOWAH_MIN_ATTACK_TIME (0.0001f)
|
||||||
|
#define AL_AUTOWAH_MAX_ATTACK_TIME (1.0f)
|
||||||
|
#define AL_AUTOWAH_DEFAULT_ATTACK_TIME (0.06f)
|
||||||
|
|
||||||
|
#define AL_AUTOWAH_MIN_RELEASE_TIME (0.0001f)
|
||||||
|
#define AL_AUTOWAH_MAX_RELEASE_TIME (1.0f)
|
||||||
|
#define AL_AUTOWAH_DEFAULT_RELEASE_TIME (0.06f)
|
||||||
|
|
||||||
|
#define AL_AUTOWAH_MIN_RESONANCE (2.0f)
|
||||||
|
#define AL_AUTOWAH_MAX_RESONANCE (1000.0f)
|
||||||
|
#define AL_AUTOWAH_DEFAULT_RESONANCE (1000.0f)
|
||||||
|
|
||||||
|
#define AL_AUTOWAH_MIN_PEAK_GAIN (0.00003f)
|
||||||
|
#define AL_AUTOWAH_MAX_PEAK_GAIN (31621.0f)
|
||||||
|
#define AL_AUTOWAH_DEFAULT_PEAK_GAIN (11.22f)
|
||||||
|
|
||||||
|
/* Compressor effect */
|
||||||
|
#define AL_COMPRESSOR_MIN_ONOFF (0)
|
||||||
|
#define AL_COMPRESSOR_MAX_ONOFF (1)
|
||||||
|
#define AL_COMPRESSOR_DEFAULT_ONOFF (1)
|
||||||
|
|
||||||
|
/* Equalizer effect */
|
||||||
|
#define AL_EQUALIZER_MIN_LOW_GAIN (0.126f)
|
||||||
|
#define AL_EQUALIZER_MAX_LOW_GAIN (7.943f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_LOW_GAIN (1.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_LOW_CUTOFF (50.0f)
|
||||||
|
#define AL_EQUALIZER_MAX_LOW_CUTOFF (800.0f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_LOW_CUTOFF (200.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_MID1_GAIN (0.126f)
|
||||||
|
#define AL_EQUALIZER_MAX_MID1_GAIN (7.943f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_MID1_GAIN (1.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_MID1_CENTER (200.0f)
|
||||||
|
#define AL_EQUALIZER_MAX_MID1_CENTER (3000.0f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_MID1_CENTER (500.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_MID1_WIDTH (0.01f)
|
||||||
|
#define AL_EQUALIZER_MAX_MID1_WIDTH (1.0f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_MID1_WIDTH (1.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_MID2_GAIN (0.126f)
|
||||||
|
#define AL_EQUALIZER_MAX_MID2_GAIN (7.943f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_MID2_GAIN (1.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_MID2_CENTER (1000.0f)
|
||||||
|
#define AL_EQUALIZER_MAX_MID2_CENTER (8000.0f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_MID2_CENTER (3000.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_MID2_WIDTH (0.01f)
|
||||||
|
#define AL_EQUALIZER_MAX_MID2_WIDTH (1.0f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_MID2_WIDTH (1.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_HIGH_GAIN (0.126f)
|
||||||
|
#define AL_EQUALIZER_MAX_HIGH_GAIN (7.943f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_HIGH_GAIN (1.0f)
|
||||||
|
|
||||||
|
#define AL_EQUALIZER_MIN_HIGH_CUTOFF (4000.0f)
|
||||||
|
#define AL_EQUALIZER_MAX_HIGH_CUTOFF (16000.0f)
|
||||||
|
#define AL_EQUALIZER_DEFAULT_HIGH_CUTOFF (6000.0f)
|
||||||
|
|
||||||
|
|
||||||
|
/* Source parameter value ranges and defaults. */
|
||||||
|
#define AL_MIN_AIR_ABSORPTION_FACTOR (0.0f)
|
||||||
|
#define AL_MAX_AIR_ABSORPTION_FACTOR (10.0f)
|
||||||
|
#define AL_DEFAULT_AIR_ABSORPTION_FACTOR (0.0f)
|
||||||
|
|
||||||
|
#define AL_MIN_ROOM_ROLLOFF_FACTOR (0.0f)
|
||||||
|
#define AL_MAX_ROOM_ROLLOFF_FACTOR (10.0f)
|
||||||
|
#define AL_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f)
|
||||||
|
|
||||||
|
#define AL_MIN_CONE_OUTER_GAINHF (0.0f)
|
||||||
|
#define AL_MAX_CONE_OUTER_GAINHF (1.0f)
|
||||||
|
#define AL_DEFAULT_CONE_OUTER_GAINHF (1.0f)
|
||||||
|
|
||||||
|
#define AL_MIN_DIRECT_FILTER_GAINHF_AUTO AL_FALSE
|
||||||
|
#define AL_MAX_DIRECT_FILTER_GAINHF_AUTO AL_TRUE
|
||||||
|
#define AL_DEFAULT_DIRECT_FILTER_GAINHF_AUTO AL_TRUE
|
||||||
|
|
||||||
|
#define AL_MIN_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_FALSE
|
||||||
|
#define AL_MAX_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE
|
||||||
|
#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE
|
||||||
|
|
||||||
|
#define AL_MIN_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_FALSE
|
||||||
|
#define AL_MAX_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE
|
||||||
|
#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE
|
||||||
|
|
||||||
|
|
||||||
|
/* Listener parameter value ranges and defaults. */
|
||||||
|
#define AL_MIN_METERS_PER_UNIT FLT_MIN
|
||||||
|
#define AL_MAX_METERS_PER_UNIT FLT_MAX
|
||||||
|
#define AL_DEFAULT_METERS_PER_UNIT (1.0f)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* AL_EFX_H */
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue