Replaced KRReverbZone with KRAmbientSphere, to support Siren audio engine reverb zones
This commit is contained in:
@@ -168,10 +168,10 @@
|
|||||||
E4924C2715EE95E800B965C6 /* KROctree.h in Headers */ = {isa = PBXBuildFile; fileRef = E4924C2515EE95E800B965C6 /* KROctree.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
E4924C2715EE95E800B965C6 /* KROctree.h in Headers */ = {isa = PBXBuildFile; fileRef = E4924C2515EE95E800B965C6 /* KROctree.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
E4924C2B15EE96AB00B965C6 /* KROctreeNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4924C2915EE96AA00B965C6 /* KROctreeNode.cpp */; };
|
E4924C2B15EE96AB00B965C6 /* KROctreeNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4924C2915EE96AA00B965C6 /* KROctreeNode.cpp */; };
|
||||||
E4924C2C15EE96AB00B965C6 /* KROctreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E4924C2A15EE96AA00B965C6 /* KROctreeNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
E4924C2C15EE96AB00B965C6 /* KROctreeNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E4924C2A15EE96AA00B965C6 /* KROctreeNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
E4943231169E08D200BCB891 /* KRReverbZone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E494322F169E08D200BCB891 /* KRReverbZone.cpp */; };
|
E4943231169E08D200BCB891 /* KRAmbientSphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E494322F169E08D200BCB891 /* KRAmbientSphere.cpp */; };
|
||||||
E4943232169E08D200BCB891 /* KRReverbZone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E494322F169E08D200BCB891 /* KRReverbZone.cpp */; };
|
E4943232169E08D200BCB891 /* KRAmbientSphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E494322F169E08D200BCB891 /* KRAmbientSphere.cpp */; };
|
||||||
E4943233169E08D200BCB891 /* KRReverbZone.h in Headers */ = {isa = PBXBuildFile; fileRef = E4943230169E08D200BCB891 /* KRReverbZone.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
E4943233169E08D200BCB891 /* KRAmbientSphere.h in Headers */ = {isa = PBXBuildFile; fileRef = E4943230169E08D200BCB891 /* KRAmbientSphere.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
E4943234169E08D200BCB891 /* KRReverbZone.h in Headers */ = {isa = PBXBuildFile; fileRef = E4943230169E08D200BCB891 /* KRReverbZone.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
E4943234169E08D200BCB891 /* KRAmbientSphere.h in Headers */ = {isa = PBXBuildFile; fileRef = E4943230169E08D200BCB891 /* KRAmbientSphere.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
E497B946151BA99500D3DC67 /* KRVector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E497B945151BA99400D3DC67 /* KRVector2.cpp */; };
|
E497B946151BA99500D3DC67 /* KRVector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E497B945151BA99400D3DC67 /* KRVector2.cpp */; };
|
||||||
E497B947151BA99500D3DC67 /* KRVector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E497B945151BA99400D3DC67 /* KRVector2.cpp */; };
|
E497B947151BA99500D3DC67 /* KRVector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E497B945151BA99400D3DC67 /* KRVector2.cpp */; };
|
||||||
E497B948151BB89D00D3DC67 /* KRVector2.h in Headers */ = {isa = PBXBuildFile; fileRef = E497B943151BA93400D3DC67 /* KRVector2.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
E497B948151BB89D00D3DC67 /* KRVector2.h in Headers */ = {isa = PBXBuildFile; fileRef = E497B943151BA93400D3DC67 /* KRVector2.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
@@ -467,8 +467,8 @@
|
|||||||
E4924C2515EE95E800B965C6 /* KROctree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KROctree.h; sourceTree = "<group>"; };
|
E4924C2515EE95E800B965C6 /* KROctree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KROctree.h; sourceTree = "<group>"; };
|
||||||
E4924C2915EE96AA00B965C6 /* KROctreeNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KROctreeNode.cpp; sourceTree = "<group>"; };
|
E4924C2915EE96AA00B965C6 /* KROctreeNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KROctreeNode.cpp; sourceTree = "<group>"; };
|
||||||
E4924C2A15EE96AA00B965C6 /* KROctreeNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KROctreeNode.h; sourceTree = "<group>"; };
|
E4924C2A15EE96AA00B965C6 /* KROctreeNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KROctreeNode.h; sourceTree = "<group>"; };
|
||||||
E494322F169E08D200BCB891 /* KRReverbZone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = KRReverbZone.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
|
E494322F169E08D200BCB891 /* KRAmbientSphere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = KRAmbientSphere.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
|
||||||
E4943230169E08D200BCB891 /* KRReverbZone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRReverbZone.h; sourceTree = "<group>"; };
|
E4943230169E08D200BCB891 /* KRAmbientSphere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = KRAmbientSphere.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||||
E497B943151BA93400D3DC67 /* KRVector2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = KRVector2.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
E497B943151BA93400D3DC67 /* KRVector2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = KRVector2.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||||
E497B945151BA99400D3DC67 /* KRVector2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRVector2.cpp; sourceTree = "<group>"; };
|
E497B945151BA99400D3DC67 /* KRVector2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KRVector2.cpp; sourceTree = "<group>"; };
|
||||||
E497B949151BCEE900D3DC67 /* KRResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRResource.h; sourceTree = "<group>"; };
|
E497B949151BCEE900D3DC67 /* KRResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KRResource.h; sourceTree = "<group>"; };
|
||||||
@@ -891,8 +891,8 @@
|
|||||||
children = (
|
children = (
|
||||||
E48B68131697794F00D99917 /* KRAudioSource.cpp */,
|
E48B68131697794F00D99917 /* KRAudioSource.cpp */,
|
||||||
E48B68141697794F00D99917 /* KRAudioSource.h */,
|
E48B68141697794F00D99917 /* KRAudioSource.h */,
|
||||||
E494322F169E08D200BCB891 /* KRReverbZone.cpp */,
|
E494322F169E08D200BCB891 /* KRAmbientSphere.cpp */,
|
||||||
E4943230169E08D200BCB891 /* KRReverbZone.h */,
|
E4943230169E08D200BCB891 /* KRAmbientSphere.h */,
|
||||||
);
|
);
|
||||||
name = Audio;
|
name = Audio;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1197,7 +1197,7 @@
|
|||||||
E4F027C916979CCD00D4427D /* KRAudioManager.h in Headers */,
|
E4F027C916979CCD00D4427D /* KRAudioManager.h in Headers */,
|
||||||
E4F027D016979CE200D4427D /* KRAudioSample.h in Headers */,
|
E4F027D016979CE200D4427D /* KRAudioSample.h in Headers */,
|
||||||
E4F027E01697BFFF00D4427D /* KRAudioBuffer.h in Headers */,
|
E4F027E01697BFFF00D4427D /* KRAudioBuffer.h in Headers */,
|
||||||
E4943233169E08D200BCB891 /* KRReverbZone.h in Headers */,
|
E4943233169E08D200BCB891 /* KRAmbientSphere.h in Headers */,
|
||||||
E499BF1B16AE747C007FCDBE /* KRVector2.h in Headers */,
|
E499BF1B16AE747C007FCDBE /* KRVector2.h in Headers */,
|
||||||
E499BF1E16AE751E007FCDBE /* KRSceneManager.h in Headers */,
|
E499BF1E16AE751E007FCDBE /* KRSceneManager.h in Headers */,
|
||||||
E499BF2016AE755B007FCDBE /* KRPointLight.h in Headers */,
|
E499BF2016AE755B007FCDBE /* KRPointLight.h in Headers */,
|
||||||
@@ -1268,7 +1268,7 @@
|
|||||||
E4F027CA16979CCD00D4427D /* KRAudioManager.h in Headers */,
|
E4F027CA16979CCD00D4427D /* KRAudioManager.h in Headers */,
|
||||||
E4F027D116979CE200D4427D /* KRAudioSample.h in Headers */,
|
E4F027D116979CE200D4427D /* KRAudioSample.h in Headers */,
|
||||||
E4F027E11697BFFF00D4427D /* KRAudioBuffer.h in Headers */,
|
E4F027E11697BFFF00D4427D /* KRAudioBuffer.h in Headers */,
|
||||||
E4943234169E08D200BCB891 /* KRReverbZone.h in Headers */,
|
E4943234169E08D200BCB891 /* KRAmbientSphere.h in Headers */,
|
||||||
E414F9AF1694DA37000B3D58 /* KRUnknown.h in Headers */,
|
E414F9AF1694DA37000B3D58 /* KRUnknown.h in Headers */,
|
||||||
E499BF2216AE760F007FCDBE /* krengine_osx.h in Headers */,
|
E499BF2216AE760F007FCDBE /* krengine_osx.h in Headers */,
|
||||||
E4FE6AA916B21D660058B8CE /* forsyth.h in Headers */,
|
E4FE6AA916B21D660058B8CE /* forsyth.h in Headers */,
|
||||||
@@ -1535,7 +1535,7 @@
|
|||||||
E4F027C716979CCD00D4427D /* KRAudioManager.cpp in Sources */,
|
E4F027C716979CCD00D4427D /* KRAudioManager.cpp in Sources */,
|
||||||
E4F027CE16979CE200D4427D /* KRAudioSample.cpp in Sources */,
|
E4F027CE16979CE200D4427D /* KRAudioSample.cpp in Sources */,
|
||||||
E4F027DE1697BFFF00D4427D /* KRAudioBuffer.cpp in Sources */,
|
E4F027DE1697BFFF00D4427D /* KRAudioBuffer.cpp in Sources */,
|
||||||
E4943231169E08D200BCB891 /* KRReverbZone.cpp in Sources */,
|
E4943231169E08D200BCB891 /* KRAmbientSphere.cpp in Sources */,
|
||||||
E4FE6AAB16B21D7E0058B8CE /* forsyth.cpp in Sources */,
|
E4FE6AAB16B21D7E0058B8CE /* forsyth.cpp in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@@ -1606,7 +1606,7 @@
|
|||||||
E4F027C816979CCD00D4427D /* KRAudioManager.cpp in Sources */,
|
E4F027C816979CCD00D4427D /* KRAudioManager.cpp in Sources */,
|
||||||
E4F027CF16979CE200D4427D /* KRAudioSample.cpp in Sources */,
|
E4F027CF16979CE200D4427D /* KRAudioSample.cpp in Sources */,
|
||||||
E4F027DF1697BFFF00D4427D /* KRAudioBuffer.cpp in Sources */,
|
E4F027DF1697BFFF00D4427D /* KRAudioBuffer.cpp in Sources */,
|
||||||
E4943232169E08D200BCB891 /* KRReverbZone.cpp in Sources */,
|
E4943232169E08D200BCB891 /* KRAmbientSphere.cpp in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
172
KREngine/kraken/KRAmbientSphere.cpp
Normal file
172
KREngine/kraken/KRAmbientSphere.cpp
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
//
|
||||||
|
// KRAmbientSphere.cpp
|
||||||
|
// KREngine
|
||||||
|
//
|
||||||
|
// Created by Kearwood Gilbert on 2012-12-06.
|
||||||
|
// Copyright (c) 2012 Kearwood Software. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "KRAmbientSphere.h"
|
||||||
|
#include "KRContext.h"
|
||||||
|
|
||||||
|
KRAmbientSphere::KRAmbientSphere(KRScene &scene, std::string name) : KRNode(scene, name)
|
||||||
|
{
|
||||||
|
m_ambient = "";
|
||||||
|
m_reverb = "";
|
||||||
|
m_ambient_gain = 1.0f;
|
||||||
|
m_reverb_gain = 1.0f;
|
||||||
|
m_gradient_distance = 1.0f;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
KRAmbientSphere::~KRAmbientSphere()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string KRAmbientSphere::getElementName() {
|
||||||
|
return "ambient_sphere";
|
||||||
|
}
|
||||||
|
|
||||||
|
tinyxml2::XMLElement *KRAmbientSphere::saveXML( tinyxml2::XMLNode *parent)
|
||||||
|
{
|
||||||
|
tinyxml2::XMLElement *e = KRNode::saveXML(parent);
|
||||||
|
e->SetAttribute("zone", m_zone.c_str());
|
||||||
|
e->SetAttribute("ambient", m_ambient.c_str());
|
||||||
|
e->SetAttribute("ambient_gain", m_ambient_gain);
|
||||||
|
e->SetAttribute("reverb", m_reverb.c_str());
|
||||||
|
e->SetAttribute("reverb_gain", m_reverb_gain);
|
||||||
|
e->SetAttribute("gradient", m_gradient_distance);
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRAmbientSphere::loadXML(tinyxml2::XMLElement *e)
|
||||||
|
{
|
||||||
|
KRNode::loadXML(e);
|
||||||
|
|
||||||
|
m_zone = e->Attribute("zone");
|
||||||
|
|
||||||
|
m_gradient_distance = 1.0f;
|
||||||
|
if(e->QueryFloatAttribute("gradient", &m_gradient_distance) != tinyxml2::XML_SUCCESS) {
|
||||||
|
m_gradient_distance = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_reverb = e->Attribute("reverb");
|
||||||
|
|
||||||
|
m_reverb_gain = 1.0f;
|
||||||
|
if(e->QueryFloatAttribute("reverb_gain", &m_reverb_gain) != tinyxml2::XML_SUCCESS) {
|
||||||
|
m_reverb_gain = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_ambient = e->Attribute("ambient");
|
||||||
|
|
||||||
|
m_ambient_gain = 1.0f;
|
||||||
|
if(e->QueryFloatAttribute("ambient_gain", &m_ambient_gain) != tinyxml2::XML_SUCCESS) {
|
||||||
|
m_ambient_gain = 1.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string KRAmbientSphere::getReverb()
|
||||||
|
{
|
||||||
|
return m_reverb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRAmbientSphere::setReverb(const std::string &reverb)
|
||||||
|
{
|
||||||
|
m_reverb = reverb;
|
||||||
|
}
|
||||||
|
|
||||||
|
float KRAmbientSphere::getReverbGain()
|
||||||
|
{
|
||||||
|
return m_reverb_gain;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRAmbientSphere::setReverbGain(float reverb_gain)
|
||||||
|
{
|
||||||
|
m_reverb_gain = reverb_gain;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string KRAmbientSphere::getAmbient()
|
||||||
|
{
|
||||||
|
return m_ambient;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRAmbientSphere::setAmbient(const std::string &ambient)
|
||||||
|
{
|
||||||
|
m_ambient = ambient;
|
||||||
|
}
|
||||||
|
|
||||||
|
float KRAmbientSphere::getAmbientGain()
|
||||||
|
{
|
||||||
|
return m_ambient_gain;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRAmbientSphere::setAmbientGain(float ambient_gain)
|
||||||
|
{
|
||||||
|
m_ambient_gain = ambient_gain;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string KRAmbientSphere::getZone()
|
||||||
|
{
|
||||||
|
return m_zone;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRAmbientSphere::setZone(const std::string &zone)
|
||||||
|
{
|
||||||
|
m_zone = zone;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRAmbientSphere::render(KRCamera *pCamera, std::vector<KRLight *> &lights, const KRViewport &viewport, KRNode::RenderPass renderPass)
|
||||||
|
{
|
||||||
|
|
||||||
|
KRNode::render(pCamera, lights, viewport, renderPass);
|
||||||
|
|
||||||
|
bool bVisualize = false;
|
||||||
|
|
||||||
|
if(renderPass == KRNode::RENDER_PASS_FORWARD_TRANSPARENT && bVisualize) {
|
||||||
|
KRMat4 sphereModelMatrix = getModelMatrix();
|
||||||
|
|
||||||
|
KRShader *pShader = getContext().getShaderManager()->getShader("visualize_overlay", pCamera, lights, 0, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, renderPass);
|
||||||
|
|
||||||
|
if(getContext().getShaderManager()->selectShader(*pCamera, pShader, viewport, sphereModelMatrix, lights, 0, renderPass)) {
|
||||||
|
|
||||||
|
// Enable additive blending
|
||||||
|
GLDEBUG(glEnable(GL_BLEND));
|
||||||
|
GLDEBUG(glBlendFunc(GL_ONE, GL_ONE));
|
||||||
|
|
||||||
|
|
||||||
|
// Disable z-buffer write
|
||||||
|
GLDEBUG(glDepthMask(GL_FALSE));
|
||||||
|
|
||||||
|
// Enable z-buffer test
|
||||||
|
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
||||||
|
GLDEBUG(glDepthFunc(GL_LEQUAL));
|
||||||
|
GLDEBUG(glDepthRangef(0.0, 1.0));
|
||||||
|
std::vector<KRMesh *> sphereModels = getContext().getModelManager()->getModel("__sphere");
|
||||||
|
if(sphereModels.size()) {
|
||||||
|
for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) {
|
||||||
|
sphereModels[0]->renderSubmesh(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable alpha blending
|
||||||
|
GLDEBUG(glEnable(GL_BLEND));
|
||||||
|
GLDEBUG(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float KRAmbientSphere::getGradientDistance()
|
||||||
|
{
|
||||||
|
return m_gradient_distance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KRAmbientSphere::setGradientDistance(float gradient_distance)
|
||||||
|
{
|
||||||
|
m_gradient_distance = gradient_distance;
|
||||||
|
}
|
||||||
|
|
||||||
|
KRAABB KRAmbientSphere::getBounds() {
|
||||||
|
// Reverb zones always have a -1, -1, -1 to 1, 1, 1 bounding box
|
||||||
|
return KRAABB(-KRVector3::One(), KRVector3::One(), getModelMatrix());
|
||||||
|
}
|
||||||
59
KREngine/kraken/KRAmbientSphere.h
Normal file
59
KREngine/kraken/KRAmbientSphere.h
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
//
|
||||||
|
// KRAmbientSphere.h
|
||||||
|
// KREngine
|
||||||
|
//
|
||||||
|
// Created by Kearwood Gilbert on 2012-12-06.
|
||||||
|
// Copyright (c) 2012 Kearwood Software. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef KRAMBIENT_ZONE_H
|
||||||
|
#define KRAMBIENT_ZONE_H
|
||||||
|
|
||||||
|
#include "KRResource.h"
|
||||||
|
#include "KRNode.h"
|
||||||
|
#include "KRTexture.h"
|
||||||
|
|
||||||
|
class KRAmbientSphere : public KRNode {
|
||||||
|
public:
|
||||||
|
KRAmbientSphere(KRScene &scene, std::string name);
|
||||||
|
virtual ~KRAmbientSphere();
|
||||||
|
virtual std::string getElementName();
|
||||||
|
virtual tinyxml2::XMLElement *saveXML( tinyxml2::XMLNode *parent);
|
||||||
|
virtual void loadXML(tinyxml2::XMLElement *e);
|
||||||
|
|
||||||
|
void render(KRCamera *pCamera, std::vector<KRLight *> &lights, const KRViewport &viewport, KRNode::RenderPass renderPass);
|
||||||
|
|
||||||
|
std::string getZone();
|
||||||
|
void setZone(const std::string &zone);
|
||||||
|
|
||||||
|
float getGradientDistance();
|
||||||
|
void setGradientDistance(float gradient_distance);
|
||||||
|
|
||||||
|
std::string getReverb();
|
||||||
|
void setReverb(const std::string &reverb);
|
||||||
|
|
||||||
|
float getReverbGain();
|
||||||
|
void setReverbGain(float reverb_gain);
|
||||||
|
|
||||||
|
std::string getAmbient();
|
||||||
|
void setAmbient(const std::string &ambient);
|
||||||
|
|
||||||
|
float getAmbientGain();
|
||||||
|
void setAmbientGain(float ambient_gain);
|
||||||
|
|
||||||
|
virtual KRAABB getBounds();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string m_zone;
|
||||||
|
|
||||||
|
float m_gradient_distance;
|
||||||
|
|
||||||
|
std::string m_reverb;
|
||||||
|
float m_reverb_gain;
|
||||||
|
|
||||||
|
std::string m_ambient;
|
||||||
|
float m_ambient_gain;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
#include "KRQuaternion.h"
|
#include "KRQuaternion.h"
|
||||||
#include "KRBone.h"
|
#include "KRBone.h"
|
||||||
#include "KRAudioSource.h"
|
#include "KRAudioSource.h"
|
||||||
#include "KRReverbZone.h"
|
#include "KRAmbientSphere.h"
|
||||||
|
|
||||||
|
|
||||||
KRNode::KRNode(KRScene &scene, std::string name) : KRContextObject(scene.getContext())
|
KRNode::KRNode(KRScene &scene, std::string name) : KRContextObject(scene.getContext())
|
||||||
@@ -241,8 +241,8 @@ KRNode *KRNode::LoadXML(KRScene &scene, tinyxml2::XMLElement *e) {
|
|||||||
new_node = new KRBone(scene, szName);
|
new_node = new KRBone(scene, szName);
|
||||||
} else if(strcmp(szElementName, "audio_source") == 0) {
|
} else if(strcmp(szElementName, "audio_source") == 0) {
|
||||||
new_node = new KRAudioSource(scene, szName);
|
new_node = new KRAudioSource(scene, szName);
|
||||||
} else if(strcmp(szElementName, "reverb_zone") == 0) {
|
} else if(strcmp(szElementName, "ambient_sphere") == 0) {
|
||||||
new_node = new KRReverbZone(scene, szName);
|
new_node = new KRAmbientSphere(scene, szName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(new_node) {
|
if(new_node) {
|
||||||
|
|||||||
@@ -1,134 +0,0 @@
|
|||||||
//
|
|
||||||
// KRReverbZone.cpp
|
|
||||||
// KREngine
|
|
||||||
//
|
|
||||||
// Created by Kearwood Gilbert on 2012-12-06.
|
|
||||||
// Copyright (c) 2012 Kearwood Software. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "KRReverbZone.h"
|
|
||||||
#include "KRContext.h"
|
|
||||||
|
|
||||||
KRReverbZone::KRReverbZone(KRScene &scene, std::string name) : KRNode(scene, name)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
KRReverbZone::~KRReverbZone()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string KRReverbZone::getElementName() {
|
|
||||||
return "reverb_zone";
|
|
||||||
}
|
|
||||||
|
|
||||||
tinyxml2::XMLElement *KRReverbZone::saveXML( tinyxml2::XMLNode *parent)
|
|
||||||
{
|
|
||||||
tinyxml2::XMLElement *e = KRNode::saveXML(parent);
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
void KRReverbZone::loadXML(tinyxml2::XMLElement *e)
|
|
||||||
{
|
|
||||||
KRNode::loadXML(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string KRReverbZone::getReverbPreset()
|
|
||||||
{
|
|
||||||
return m_reverb_preset_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void KRReverbZone::setReverbPreset(const std::string &reverb_preset_name)
|
|
||||||
{
|
|
||||||
m_reverb_preset_name = reverb_preset_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int KRReverbZone::getReverbSettingId()
|
|
||||||
{
|
|
||||||
if(m_reverb_preset_name.compare("small_room") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_SmallRoom;
|
|
||||||
} else if(m_reverb_preset_name.compare("medium_room") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_MediumRoom;
|
|
||||||
} else if(m_reverb_preset_name.compare("large_room") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_LargeRoom;
|
|
||||||
} else if(m_reverb_preset_name.compare("medium_hall") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_MediumHall;
|
|
||||||
} else if(m_reverb_preset_name.compare("large_hall") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_LargeHall;
|
|
||||||
} else if(m_reverb_preset_name.compare("plate") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_Plate;
|
|
||||||
} else if(m_reverb_preset_name.compare("medium_chamber") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_MediumChamber;
|
|
||||||
} else if(m_reverb_preset_name.compare("large_chamber") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_LargeChamber;
|
|
||||||
} else if(m_reverb_preset_name.compare("cathedral") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_Cathedral;
|
|
||||||
} else if(m_reverb_preset_name.compare("large_room2") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_LargeRoom2;
|
|
||||||
} else if(m_reverb_preset_name.compare("medium_hall2") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_MediumHall2;
|
|
||||||
} else if(m_reverb_preset_name.compare("medium_hall3") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_MediumHall3;
|
|
||||||
} else if(m_reverb_preset_name.compare("large_hall2") == 0) {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_LargeHall2;
|
|
||||||
} else {
|
|
||||||
return ALC_ASA_REVERB_ROOM_TYPE_SmallRoom;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void KRReverbZone::render(KRCamera *pCamera, std::vector<KRLight *> &lights, const KRViewport &viewport, KRNode::RenderPass renderPass)
|
|
||||||
{
|
|
||||||
|
|
||||||
KRNode::render(pCamera, lights, viewport, renderPass);
|
|
||||||
|
|
||||||
bool bVisualize = false;
|
|
||||||
|
|
||||||
if(renderPass == KRNode::RENDER_PASS_FORWARD_TRANSPARENT && bVisualize) {
|
|
||||||
KRMat4 sphereModelMatrix = getModelMatrix();
|
|
||||||
|
|
||||||
KRShader *pShader = getContext().getShaderManager()->getShader("visualize_overlay", pCamera, lights, 0, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, renderPass);
|
|
||||||
|
|
||||||
if(getContext().getShaderManager()->selectShader(*pCamera, pShader, viewport, sphereModelMatrix, lights, 0, renderPass)) {
|
|
||||||
|
|
||||||
// Enable additive blending
|
|
||||||
GLDEBUG(glEnable(GL_BLEND));
|
|
||||||
GLDEBUG(glBlendFunc(GL_ONE, GL_ONE));
|
|
||||||
|
|
||||||
|
|
||||||
// Disable z-buffer write
|
|
||||||
GLDEBUG(glDepthMask(GL_FALSE));
|
|
||||||
|
|
||||||
// Enable z-buffer test
|
|
||||||
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
|
||||||
GLDEBUG(glDepthFunc(GL_LEQUAL));
|
|
||||||
GLDEBUG(glDepthRangef(0.0, 1.0));
|
|
||||||
std::vector<KRMesh *> sphereModels = getContext().getModelManager()->getModel("__sphere");
|
|
||||||
if(sphereModels.size()) {
|
|
||||||
for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) {
|
|
||||||
sphereModels[0]->renderSubmesh(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable alpha blending
|
|
||||||
GLDEBUG(glEnable(GL_BLEND));
|
|
||||||
GLDEBUG(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float KRReverbZone::getGradientDistance()
|
|
||||||
{
|
|
||||||
return m_gradient_distance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void KRReverbZone::setGradientDistance(float gradient_distance)
|
|
||||||
{
|
|
||||||
m_gradient_distance = gradient_distance;
|
|
||||||
}
|
|
||||||
|
|
||||||
KRAABB KRReverbZone::getBounds() {
|
|
||||||
// Reverb zones always have a -1, -1, -1 to 1, 1, 1 bounding box
|
|
||||||
return KRAABB(-KRVector3::One(), KRVector3::One(), getModelMatrix());
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
//
|
|
||||||
// KRReverbZone.h
|
|
||||||
// KREngine
|
|
||||||
//
|
|
||||||
// Created by Kearwood Gilbert on 2012-12-06.
|
|
||||||
// Copyright (c) 2012 Kearwood Software. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef KRREVERB_ZONE_H
|
|
||||||
#define KRREVERB_ZONE_H
|
|
||||||
|
|
||||||
#include "KRResource.h"
|
|
||||||
#include "KRNode.h"
|
|
||||||
#include "KRTexture.h"
|
|
||||||
|
|
||||||
class KRReverbZone : public KRNode {
|
|
||||||
public:
|
|
||||||
KRReverbZone(KRScene &scene, std::string name);
|
|
||||||
virtual ~KRReverbZone();
|
|
||||||
virtual std::string getElementName();
|
|
||||||
virtual tinyxml2::XMLElement *saveXML( tinyxml2::XMLNode *parent);
|
|
||||||
virtual void loadXML(tinyxml2::XMLElement *e);
|
|
||||||
|
|
||||||
void render(KRCamera *pCamera, std::vector<KRLight *> &lights, const KRViewport &viewport, KRNode::RenderPass renderPass);
|
|
||||||
|
|
||||||
float getGradientDistance();
|
|
||||||
void setGradientDistance(float gradient_distance);
|
|
||||||
|
|
||||||
std::string getReverbPreset();
|
|
||||||
void setReverbPreset(const std::string &reverb_preset_name);
|
|
||||||
|
|
||||||
unsigned int getReverbSettingId();
|
|
||||||
|
|
||||||
virtual KRAABB getBounds();
|
|
||||||
|
|
||||||
private:
|
|
||||||
float m_gradient_distance;
|
|
||||||
std::string m_reverb_preset_name;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
Reference in New Issue
Block a user