OSX Port in progress

Implemented ALDEBUG macro
Corrected audio engine bugs
This commit is contained in:
2013-01-23 12:43:43 -08:00
parent 4b2416041a
commit 655e0095ed
12 changed files with 119 additions and 56 deletions

View File

@@ -176,6 +176,15 @@
E497B954151BEDA600D3DC67 /* KRResource+fbx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E497B952151BEDA600D3DC67 /* KRResource+fbx.cpp */; }; E497B954151BEDA600D3DC67 /* KRResource+fbx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E497B952151BEDA600D3DC67 /* KRResource+fbx.cpp */; };
E497B95D151BF05F00D3DC67 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E497B95C151BF05F00D3DC67 /* CoreServices.framework */; }; E497B95D151BF05F00D3DC67 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E497B95C151BF05F00D3DC67 /* CoreServices.framework */; };
E497B95F151BF09600D3DC67 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E497B95E151BF09600D3DC67 /* SystemConfiguration.framework */; }; E497B95F151BF09600D3DC67 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E497B95E151BF09600D3DC67 /* SystemConfiguration.framework */; };
E499BF1B16AE747C007FCDBE /* KRVector2.h in Headers */ = {isa = PBXBuildFile; fileRef = E497B943151BA93400D3DC67 /* KRVector2.h */; settings = {ATTRIBUTES = (); }; };
E499BF1D16AE74FF007FCDBE /* KRTextureAnimated.h in Headers */ = {isa = PBXBuildFile; fileRef = E460292516681CFE00261BB9 /* KRTextureAnimated.h */; settings = {ATTRIBUTES = (Public, ); }; };
E499BF1E16AE751E007FCDBE /* KRSceneManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E46C214915364DDB009CABF3 /* KRSceneManager.h */; };
E499BF1F16AE753E007FCDBE /* KRCollider.h in Headers */ = {isa = PBXBuildFile; fileRef = 104A335D1672D31C001C8BA6 /* KRCollider.h */; settings = {ATTRIBUTES = (Public, ); }; };
E499BF2016AE755B007FCDBE /* KRPointLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A157152E555400F2044A /* KRPointLight.h */; };
E499BF2116AE75A7007FCDBE /* KREngine-common.h in Headers */ = {isa = PBXBuildFile; fileRef = E46DBE841512B9E200D59F86 /* KREngine-common.h */; };
E499BF2216AE760F007FCDBE /* krengine_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = E4BBBB8C1512A40300F43B5B /* krengine_osx.h */; };
E499BF2316AE7636007FCDBE /* krengine_osx-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = E4BBBB8B1512A40300F43B5B /* krengine_osx-Prefix.pch */; };
E499BF2516AE8C20007FCDBE /* KREngine.mm in Sources */ = {isa = PBXBuildFile; fileRef = E491016F13C99BDC0098455B /* KREngine.mm */; };
E4AFC6B615F7C46800DDB4C8 /* KRAABB.cpp in Headers */ = {isa = PBXBuildFile; fileRef = E40BA45215EFF79500D7C3DD /* KRAABB.cpp */; settings = {ATTRIBUTES = (Public, ); }; }; E4AFC6B615F7C46800DDB4C8 /* KRAABB.cpp in Headers */ = {isa = PBXBuildFile; fileRef = E40BA45215EFF79500D7C3DD /* KRAABB.cpp */; settings = {ATTRIBUTES = (Public, ); }; };
E4AFC6B915F7C7B200DDB4C8 /* KROctree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4924C2415EE95E700B965C6 /* KROctree.cpp */; settings = {ATTRIBUTES = (Public, ); }; }; E4AFC6B915F7C7B200DDB4C8 /* KROctree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4924C2415EE95E700B965C6 /* KROctree.cpp */; settings = {ATTRIBUTES = (Public, ); }; };
E4AFC6BB15F7C7D600DDB4C8 /* KROctreeNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4924C2915EE96AA00B965C6 /* KROctreeNode.cpp */; }; E4AFC6BB15F7C7D600DDB4C8 /* KROctreeNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4924C2915EE96AA00B965C6 /* KROctreeNode.cpp */; };
@@ -999,6 +1008,10 @@
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 /* KRReverbZone.h in Headers */,
E499BF1B16AE747C007FCDBE /* KRVector2.h in Headers */,
E499BF1E16AE751E007FCDBE /* KRSceneManager.h in Headers */,
E499BF2016AE755B007FCDBE /* KRPointLight.h in Headers */,
E499BF2116AE75A7007FCDBE /* KREngine-common.h in Headers */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -1068,6 +1081,10 @@
E414F9AF1694DA37000B3D58 /* KRUnknown.h in Headers */, E414F9AF1694DA37000B3D58 /* KRUnknown.h in Headers */,
E4C454B3167BC04C003586CD /* KRMeshSphere.h in Headers */, E4C454B3167BC04C003586CD /* KRMeshSphere.h in Headers */,
E44F38251683B23000399B5D /* KRRenderSettings.h in Headers */, E44F38251683B23000399B5D /* KRRenderSettings.h in Headers */,
E499BF1D16AE74FF007FCDBE /* KRTextureAnimated.h in Headers */,
E499BF1F16AE753E007FCDBE /* KRCollider.h in Headers */,
E499BF2216AE760F007FCDBE /* krengine_osx.h in Headers */,
E499BF2316AE7636007FCDBE /* krengine_osx-Prefix.pch in Headers */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -1220,6 +1237,7 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
E499BF2516AE8C20007FCDBE /* KREngine.mm in Sources */,
10CC33A5168534F000BB9846 /* KRCamera.cpp in Sources */, 10CC33A5168534F000BB9846 /* KRCamera.cpp in Sources */,
E460292C166834AB00261BB9 /* KRTextureAnimated.cpp in Sources */, E460292C166834AB00261BB9 /* KRTextureAnimated.cpp in Sources */,
E461A17A152E5C9100F2044A /* KRMat4.cpp in Sources */, E461A17A152E5C9100F2044A /* KRMat4.cpp in Sources */,

View File

@@ -20,18 +20,19 @@ KRAudioBuffer::KRAudioBuffer(KRAudioManager *manager, KRAudioSample *sound, int
m_bytesPerFrame = bytesPerFrame; m_bytesPerFrame = bytesPerFrame;
m_pData = NULL; m_pData = NULL;
m_pSoundManager->makeCurrentContext();
m_pData = m_pSoundManager->getBufferData(m_frameCount * m_bytesPerFrame); m_pData = m_pSoundManager->getBufferData(m_frameCount * m_bytesPerFrame);
fn_populate(sound, index, m_pData->getStart()); fn_populate(sound, index, m_pData->getStart());
m_pSoundManager->makeCurrentContext();
alGenBuffers(1, &m_bufferID); ALDEBUG(alGenBuffers(1, &m_bufferID));
alBufferData(m_bufferID, m_dataFormat, m_pData->getStart(), m_frameCount * m_bytesPerFrame, m_frameRate); ALDEBUG(alBufferData(m_bufferID, m_dataFormat, m_pData->getStart(), m_frameCount * m_bytesPerFrame, m_frameRate));
} }
KRAudioBuffer::~KRAudioBuffer() KRAudioBuffer::~KRAudioBuffer()
{ {
if(m_bufferID) { if(m_bufferID) {
alDeleteBuffers(1, &m_bufferID); ALDEBUG(alDeleteBuffers(1, &m_bufferID));
m_bufferID = 0; m_bufferID = 0;
} }

View File

@@ -39,35 +39,35 @@ ALvoid alcMacOSXRenderingQualityProc(const ALint value);
KRAudioManager::KRAudioManager(KRContext &context) : KRContextObject(context) KRAudioManager::KRAudioManager(KRContext &context) : KRContextObject(context)
{ {
// ----- Initialize OpenAL ----- // ----- Initialize OpenAL -----
m_alDevice = alcOpenDevice(NULL); ALDEBUG(m_alDevice = alcOpenDevice(NULL));
m_alContext=alcCreateContext(m_alDevice,NULL); ALDEBUG(m_alContext=alcCreateContext(m_alDevice,NULL));
alcMakeContextCurrent(m_alContext); ALDEBUG(alcMakeContextCurrent(m_alContext));
// ----- Configure listener ----- // ----- Configure listener -----
alDistanceModel(AL_EXPONENT_DISTANCE); ALDEBUG(alDistanceModel(AL_EXPONENT_DISTANCE));
#if TARGET_OS_IPHONE #if TARGET_OS_IPHONE
alcMacOSXRenderingQualityProc(ALC_IPHONE_SPATIAL_RENDERING_QUALITY_HEADPHONES); ALDEBUG(alcMacOSXRenderingQualityProc(ALC_IPHONE_SPATIAL_RENDERING_QUALITY_HEADPHONES));
#else #else
alcMacOSXRenderingQualityProc(ALC_MAC_OSX_SPATIAL_RENDERING_QUALITY_HIGH); ALDEBUG(alcMacOSXRenderingQualityProc(ALC_MAC_OSX_SPATIAL_RENDERING_QUALITY_HIGH));
#endif #endif
UInt32 setting = 1; UInt32 setting = 1;
alcASASetListenerProc(ALC_ASA_REVERB_ON, &setting, sizeof(setting)); ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_ON, &setting, sizeof(setting)));
ALfloat global_reverb_level = -5.0f; ALfloat global_reverb_level = -5.0f;
alcASASetListenerProc(ALC_ASA_REVERB_GLOBAL_LEVEL, &global_reverb_level, sizeof(global_reverb_level)); ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_GLOBAL_LEVEL, &global_reverb_level, sizeof(global_reverb_level)));
setting = ALC_ASA_REVERB_ROOM_TYPE_MediumHall2; setting = ALC_ASA_REVERB_ROOM_TYPE_MediumHall2;
alcASASetListenerProc(ALC_ASA_REVERB_ROOM_TYPE, &setting, sizeof(setting)); ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_ROOM_TYPE, &setting, sizeof(setting)));
ALfloat global_reverb_eq_gain = 0.0f; ALfloat global_reverb_eq_gain = 0.0f;
alcASASetListenerProc(ALC_ASA_REVERB_EQ_GAIN, &global_reverb_eq_gain, sizeof(global_reverb_eq_gain)); ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_GAIN, &global_reverb_eq_gain, sizeof(global_reverb_eq_gain)));
ALfloat global_reverb_eq_bandwidth = 0.0f; ALfloat global_reverb_eq_bandwidth = 0.0f;
alcASASetListenerProc(ALC_ASA_REVERB_EQ_BANDWITH, &global_reverb_eq_bandwidth, sizeof(global_reverb_eq_bandwidth)); ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_BANDWITH, &global_reverb_eq_bandwidth, sizeof(global_reverb_eq_bandwidth)));
ALfloat global_reverb_eq_freq = 0.0f; ALfloat global_reverb_eq_freq = 0.0f;
alcASASetListenerProc(ALC_ASA_REVERB_EQ_FREQ, &global_reverb_eq_freq, sizeof(global_reverb_eq_freq)); ALDEBUG(alcASASetListenerProc(ALC_ASA_REVERB_EQ_FREQ, &global_reverb_eq_freq, sizeof(global_reverb_eq_freq)));
} }
KRAudioManager::~KRAudioManager() KRAudioManager::~KRAudioManager()
@@ -77,11 +77,11 @@ KRAudioManager::~KRAudioManager()
} }
if(m_alContext) { if(m_alContext) {
alcDestroyContext(m_alContext); ALDEBUG(alcDestroyContext(m_alContext));
m_alContext = 0; m_alContext = 0;
} }
if(m_alDevice) { if(m_alDevice) {
alcCloseDevice(m_alDevice); ALDEBUG(alcCloseDevice(m_alDevice));
m_alDevice = 0; m_alDevice = 0;
} }
@@ -92,12 +92,11 @@ KRAudioManager::~KRAudioManager()
void KRAudioManager::makeCurrentContext() void KRAudioManager::makeCurrentContext()
{ {
alcMakeContextCurrent(m_alContext); ALDEBUG(alcMakeContextCurrent(m_alContext));
} }
void KRAudioManager::setViewMatrix(const KRMat4 &viewMatrix) void KRAudioManager::setViewMatrix(const KRMat4 &viewMatrix)
{ {
makeCurrentContext();
KRMat4 invView = viewMatrix; KRMat4 invView = viewMatrix;
invView.invert(); invView.invert();
@@ -107,10 +106,11 @@ void KRAudioManager::setViewMatrix(const KRMat4 &viewMatrix)
vectorUp.normalize(); vectorUp.normalize();
vectorForward.normalize(); vectorForward.normalize();
alcMakeContextCurrent(m_alContext);
alListener3f(AL_POSITION, player_position.x, player_position.y, player_position.z); makeCurrentContext();
ALDEBUG(alListener3f(AL_POSITION, player_position.x, player_position.y, player_position.z));
ALfloat orientation[] = {vectorForward.x, vectorForward.y, vectorForward.z, vectorUp.x, vectorUp.y, vectorUp.z}; ALfloat orientation[] = {vectorForward.x, vectorForward.y, vectorForward.z, vectorUp.x, vectorUp.y, vectorUp.z};
alListenerfv(AL_ORIENTATION, orientation); ALDEBUG(alListenerfv(AL_ORIENTATION, orientation));
} }
void KRAudioManager::add(KRAudioSample *sound) void KRAudioManager::add(KRAudioSample *sound)

View File

@@ -219,7 +219,11 @@ KRAudioBuffer *KRAudioSample::getBuffer(int index)
{ {
openFile(); openFile();
KRAudioBuffer *buffer = new KRAudioBuffer(getContext().getAudioManager(), this, index, m_dataFormat, m_totalFrames, m_frameRate, m_bytesPerFrame, PopulateBuffer); int maxFramesPerBuffer = KRENGINE_AUDIO_MAX_BUFFER_SIZE / m_bytesPerFrame;
int startFrame = index * maxFramesPerBuffer;
UInt32 frameCount = KRMIN(m_totalFrames - startFrame, maxFramesPerBuffer);
KRAudioBuffer *buffer = new KRAudioBuffer(getContext().getAudioManager(), this, index, m_dataFormat, frameCount, m_frameRate, m_bytesPerFrame, PopulateBuffer);
if(m_bufferCount == 1) { if(m_bufferCount == 1) {
// [self closeFile]; // We don't need to hold on to a file handle if not streaming // [self closeFile]; // We don't need to hold on to a file handle if not streaming

View File

@@ -48,7 +48,7 @@ KRAudioSource::KRAudioSource(KRScene &scene, std::string name) : KRNode(scene, n
m_pitch = 1.0f; m_pitch = 1.0f;
m_looping = false; m_looping = false;
m_referenceDistance = 20.0f; m_referenceDistance = 1.0f;
m_reverb = 0.0f; m_reverb = 0.0f;
m_rolloffFactor = 2.0f; m_rolloffFactor = 2.0f;
m_enable_occlusion = true; m_enable_occlusion = true;
@@ -59,7 +59,7 @@ KRAudioSource::~KRAudioSource()
{ {
if(m_sourceID) { if(m_sourceID) {
getContext().getAudioManager()->makeCurrentContext(); getContext().getAudioManager()->makeCurrentContext();
alDeleteSources(1, &m_sourceID); ALDEBUG(alDeleteSources(1, &m_sourceID));
m_sourceID = 0; m_sourceID = 0;
} }
while(m_audioBuffers.size()) { while(m_audioBuffers.size()) {
@@ -116,9 +116,9 @@ void KRAudioSource::loadXML(tinyxml2::XMLElement *e)
} }
setIs3D(is3d); setIs3D(is3d);
float reference_distance = 20.0f; float reference_distance = 1.0f;
if(e->QueryFloatAttribute("reference_distance", &reference_distance) != tinyxml2::XML_SUCCESS) { if(e->QueryFloatAttribute("reference_distance", &reference_distance) != tinyxml2::XML_SUCCESS) {
reference_distance = 20.0f; reference_distance = 1.0f;
} }
setReferenceDistance(reference_distance); setReferenceDistance(reference_distance);
@@ -158,7 +158,7 @@ void KRAudioSource::prime()
// Initialize audio source // Initialize audio source
m_sourceID = 0; m_sourceID = 0;
alGenSources(1, &m_sourceID); ALDEBUG(alGenSources(1, &m_sourceID));
// Prime the buffer queue // Prime the buffer queue
m_nextBufferIndex = 0; m_nextBufferIndex = 0;
@@ -167,9 +167,9 @@ void KRAudioSource::prime()
} }
//alSourcei(_sourceID, AL_BUFFER, firstBuffer.bufferID); //alSourcei(_sourceID, AL_BUFFER, firstBuffer.bufferID);
alSourcef(m_sourceID, AL_PITCH, m_pitch); ALDEBUG(alSourcef(m_sourceID, AL_PITCH, m_pitch));
alSourcei(m_sourceID, AL_LOOPING, m_looping && m_audioFile->getBufferCount() == 1); ALDEBUG(alSourcei(m_sourceID, AL_LOOPING, m_looping && m_audioFile->getBufferCount() == 1));
alSourcef(m_sourceID, AL_GAIN, m_gain); ALDEBUG(alSourcef(m_sourceID, AL_GAIN, m_gain));
m_isPrimed = true; m_isPrimed = true;
} }
@@ -182,7 +182,7 @@ void KRAudioSource::queueBuffer()
m_audioBuffers.push(buffer); m_audioBuffers.push(buffer);
ALuint buffer_ids[1]; ALuint buffer_ids[1];
buffer_ids[0] = buffer->getBufferID(); buffer_ids[0] = buffer->getBufferID();
alSourceQueueBuffers(m_sourceID, 1, buffer_ids); ALDEBUG(alSourceQueueBuffers(m_sourceID, 1, buffer_ids));
m_nextBufferIndex = (m_nextBufferIndex + 1) % m_audioFile->getBufferCount(); m_nextBufferIndex = (m_nextBufferIndex + 1) % m_audioFile->getBufferCount();
} }
@@ -261,7 +261,7 @@ void KRAudioSource::setReferenceDistance(float reference_distance)
m_referenceDistance = reference_distance; m_referenceDistance = reference_distance;
if(m_isPrimed && m_is3d) { if(m_isPrimed && m_is3d) {
getContext().getAudioManager()->makeCurrentContext(); getContext().getAudioManager()->makeCurrentContext();
alSourcef(m_sourceID, AL_REFERENCE_DISTANCE, m_referenceDistance); ALDEBUG(alSourcef(m_sourceID, AL_REFERENCE_DISTANCE, m_referenceDistance));
} }
} }
@@ -275,7 +275,7 @@ void KRAudioSource::setReverb(float reverb)
m_reverb = reverb; m_reverb = reverb;
if(m_isPrimed && m_is3d) { if(m_isPrimed && m_is3d) {
getContext().getAudioManager()->makeCurrentContext(); getContext().getAudioManager()->makeCurrentContext();
alcASASetSourceProc(ALC_ASA_REVERB_SEND_LEVEL, m_sourceID, &m_reverb, sizeof(m_reverb)); ALDEBUG(alcASASetSourceProc(ALC_ASA_REVERB_SEND_LEVEL, m_sourceID, &m_reverb, sizeof(m_reverb)));
} }
} }
@@ -290,7 +290,7 @@ void KRAudioSource::setRolloffFactor(float rolloff_factor)
m_rolloffFactor = rolloff_factor; m_rolloffFactor = rolloff_factor;
if(m_isPrimed && m_is3d) { if(m_isPrimed && m_is3d) {
getContext().getAudioManager()->makeCurrentContext(); getContext().getAudioManager()->makeCurrentContext();
alSourcef(m_sourceID, AL_ROLLOFF_FACTOR, m_rolloffFactor); ALDEBUG(alSourcef(m_sourceID, AL_ROLLOFF_FACTOR, m_rolloffFactor));
} }
} }
@@ -346,10 +346,10 @@ void KRAudioSource::physicsUpdate(float deltaTime)
getContext().getAudioManager()->makeCurrentContext(); getContext().getAudioManager()->makeCurrentContext();
updatePosition(); updatePosition();
ALint processed_count = 0; ALint processed_count = 0;
alGetSourcei(m_sourceID, AL_BUFFERS_PROCESSED, &processed_count); ALDEBUG(alGetSourcei(m_sourceID, AL_BUFFERS_PROCESSED, &processed_count));
while(processed_count-- > 0) { while(processed_count-- > 0) {
ALuint finished_buffer = 0; ALuint finished_buffer = 0;
alSourceUnqueueBuffers(m_sourceID, 1, &finished_buffer); ALDEBUG(alSourceUnqueueBuffers(m_sourceID, 1, &finished_buffer));
delete m_audioBuffers.front(); delete m_audioBuffers.front();
m_audioBuffers.pop(); m_audioBuffers.pop();
queueBuffer(); queueBuffer();
@@ -357,28 +357,28 @@ void KRAudioSource::physicsUpdate(float deltaTime)
ALint val; ALint val;
// Make sure the source is still playing, and restart it if needed. // Make sure the source is still playing, and restart it if needed.
alGetSourcei(m_sourceID, AL_SOURCE_STATE, &val); ALDEBUG(alGetSourcei(m_sourceID, AL_SOURCE_STATE, &val));
if(val != AL_PLAYING) alSourcePlay(m_sourceID); ALDEBUG(if(val != AL_PLAYING) alSourcePlay(m_sourceID));
} }
} }
void KRAudioSource::play() void KRAudioSource::play()
{ {
getContext().getAudioManager()->makeCurrentContext();
prime(); prime();
updatePosition(); updatePosition();
getContext().getAudioManager()->makeCurrentContext();
if(m_is3d) { if(m_is3d) {
alSource3f(m_sourceID, AL_VELOCITY, 0.0f, 0.0f, 0.0f); ALDEBUG(alSource3f(m_sourceID, AL_VELOCITY, 0.0f, 0.0f, 0.0f));
alSourcef(m_sourceID, AL_REFERENCE_DISTANCE, m_referenceDistance); ALDEBUG(alSourcef(m_sourceID, AL_REFERENCE_DISTANCE, m_referenceDistance));
alSourcef(m_sourceID, AL_ROLLOFF_FACTOR, m_rolloffFactor); ALDEBUG(alSourcef(m_sourceID, AL_ROLLOFF_FACTOR, m_rolloffFactor));
alSourcef(m_sourceID, AL_REFERENCE_DISTANCE, m_referenceDistance); ALDEBUG(alcASASetSourceProc(ALC_ASA_REVERB_SEND_LEVEL, m_sourceID, &m_reverb, sizeof(m_reverb)));
alcASASetSourceProc(ALC_ASA_REVERB_SEND_LEVEL, m_sourceID, &m_reverb, sizeof(m_reverb)); ALDEBUG(alSourcei(m_sourceID, AL_SOURCE_RELATIVE, AL_FALSE));
} else { } else {
alSourcei(m_sourceID, AL_SOURCE_RELATIVE, AL_TRUE); ALDEBUG(alSourcei(m_sourceID, AL_SOURCE_RELATIVE, AL_TRUE));
alSource3f(m_sourceID, AL_POSITION, 0.0, 0.0, 0.0); ALDEBUG(alSource3f(m_sourceID, AL_POSITION, 0.0, 0.0, 0.0));
} }
alSourcePlay(m_sourceID); ALDEBUG(alSourcePlay(m_sourceID));
m_playing = true; m_playing = true;
} }
@@ -410,11 +410,11 @@ void KRAudioSource::updatePosition()
ALfloat obstruction = 0.0f; // type ALfloat -100.0 db (most obstruction) - 0.0 db (no obstruction, 0.0 default) ALfloat obstruction = 0.0f; // type ALfloat -100.0 db (most obstruction) - 0.0 db (no obstruction, 0.0 default)
KRVector3 worldPosition = getWorldTranslation(); KRVector3 worldPosition = getWorldTranslation();
alSource3f(m_sourceID, AL_POSITION, worldPosition.x, worldPosition.y, worldPosition.z); ALDEBUG(alSource3f(m_sourceID, AL_POSITION, worldPosition.x, worldPosition.y, worldPosition.z));
alcASASetSourceProc(ALC_ASA_OCCLUSION, m_sourceID, &occlusion, sizeof(occlusion)); ALDEBUG(alcASASetSourceProc(ALC_ASA_OCCLUSION, m_sourceID, &occlusion, sizeof(occlusion)));
alcASASetSourceProc(ALC_ASA_OBSTRUCTION, m_sourceID, &obstruction, sizeof(obstruction)); ALDEBUG(alcASASetSourceProc(ALC_ASA_OBSTRUCTION, m_sourceID, &obstruction, sizeof(obstruction)));
alcASASetSourceProc(ALC_ASA_REVERB_SEND_LEVEL, m_sourceID, &m_reverb, sizeof(m_reverb)); ALDEBUG(alcASASetSourceProc(ALC_ASA_REVERB_SEND_LEVEL, m_sourceID, &m_reverb, sizeof(m_reverb)));
} }
} }

View File

@@ -401,6 +401,11 @@ void KRCamera::createBuffers() {
GLDEBUG(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &renderBufferWidth)); GLDEBUG(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &renderBufferWidth));
GLDEBUG(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &renderBufferHeight)); GLDEBUG(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &renderBufferHeight));
if(renderBufferWidth == 0 || renderBufferHeight == 0) {
renderBufferWidth = 1024; // FINDME - HACK for OSX
renderBufferHeight = 768;
}
if(renderBufferWidth != backingWidth || renderBufferHeight != backingHeight) { if(renderBufferWidth != backingWidth || renderBufferHeight != backingHeight) {
backingWidth = renderBufferWidth; backingWidth = renderBufferWidth;
backingHeight = renderBufferHeight; backingHeight = renderBufferHeight;

View File

@@ -103,6 +103,17 @@ fprintf(stderr, "Error at line number %d, in file %s. glGetError() returned %i f
} \ } \
} }
#define ALDEBUG(x) \
x; \
{ \
GLenum e; \
while( (e=alGetError()) != AL_NO_ERROR) \
{ \
fprintf(stderr, "Error at line number %d, in file %s. alGetError() returned %i for call %s\n",__LINE__, __FILE__, e, #x ); \
} \
}
#define KRMIN(x,y) ((x) < (y) ? (x) : (y)) #define KRMIN(x,y) ((x) < (y) ? (x) : (y))
#define KRMAX(x,y) ((x) > (y) ? (x) : (y)) #define KRMAX(x,y) ((x) > (y) ? (x) : (y))

View File

@@ -63,8 +63,13 @@ using namespace std;
- (id)init - (id)init
{ {
#if TARGET_OS_IPHONE
BOOL isIpad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; BOOL isIpad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
BOOL isRetina = [[UIScreen mainScreen] scale] >= 2.0; BOOL isRetina = [[UIScreen mainScreen] scale] >= 2.0;
#else
BOOL isIpad = false;
BOOL isRetina = false;
#endif
if(isIpad && isRetina) { if(isIpad && isRetina) {
KRContext::KRENGINE_MAX_VBO_HANDLES = 10000; KRContext::KRENGINE_MAX_VBO_HANDLES = 10000;

View File

@@ -31,7 +31,6 @@ KRNode::KRNode(KRScene &scene, std::string name) : KRContextObject(scene.getCont
m_localTranslation = KRVector3::Zero(); m_localTranslation = KRVector3::Zero();
m_parentNode = NULL; m_parentNode = NULL;
m_pScene = &scene; m_pScene = &scene;
getScene().notify_sceneGraphCreate(this);
m_modelMatrixValid = false; m_modelMatrixValid = false;
m_inverseModelMatrixValid = false; m_inverseModelMatrixValid = false;
m_bindPoseMatrixValid = false; m_bindPoseMatrixValid = false;
@@ -52,6 +51,7 @@ void KRNode::addChild(KRNode *child) {
assert(child->m_parentNode == NULL); assert(child->m_parentNode == NULL);
child->m_parentNode = this; child->m_parentNode = this;
m_childNodes.push_back(child); m_childNodes.push_back(child);
getScene().notify_sceneGraphCreate(child);
} }
tinyxml2::XMLElement *KRNode::saveXML(tinyxml2::XMLNode *parent) { tinyxml2::XMLElement *KRNode::saveXML(tinyxml2::XMLNode *parent) {

View File

@@ -23,6 +23,7 @@ class KRTextureManager;
class KRContext; class KRContext;
class KRScene; class KRScene;
class KRAABB; class KRAABB;
class KRNode;
class KRNode : public KRContextObject class KRNode : public KRContextObject
{ {

View File

@@ -763,6 +763,22 @@ void LoadMaterial(KRContext &context, std::vector<KRResource *> &resources, FbxS
// ----====---- Output Material File ----====---- // ----====---- Output Material File ----====----
KRMaterial *new_material = new KRMaterial(context, pMaterial->GetName()); KRMaterial *new_material = new KRMaterial(context, pMaterial->GetName());
std::string name = pMaterial->GetName();
if(boost:starts_with(name, "ab_reflect_")) {
new_material->setAlphaMode(KRMaterial::KRMATERIAL_ALPHA_MODE_BLENDONESIDE);
int underscore_pos = name.find('_', 11);
new_material->setReflectionCube(name.substr(11, underscore_pos - 11));
} else if(boost::starts_with(name, "reflect_")) {
int underscore_pos = name.find('_', 8);
new_material->setReflectionCube(name.substr(8, underscore_pos - 8));
} else if(boost::starts_with(name, "at_")) {
new_material->setAlphaMode(KRMaterial::KRMATERIAL_ALPHA_MODE_TEST);
} else if(boost::starts_with(name, "ab_")) {
new_material->setAlphaMode(KRMaterial::KRMATERIAL_ALPHA_MODE_BLENDONESIDE);
} else if(boost::starts_with(name, "ab2_")) {
new_material->setAlphaMode(KRMAterial::KRMATERIAL_ALPHA_MODE_BLENDTWOSIDE);
}
FbxPropertyT<FbxDouble3> lKFbxDouble3; FbxPropertyT<FbxDouble3> lKFbxDouble3;
FbxPropertyT<FbxDouble> lKFbxDouble1; FbxPropertyT<FbxDouble> lKFbxDouble1;

View File

@@ -49,8 +49,9 @@ const long KRENGINE_OCCLUSION_TEST_EXPIRY = 60;
KRScene::KRScene(KRContext &context, std::string name) : KRResource(context, name) { KRScene::KRScene(KRContext &context, std::string name) : KRResource(context, name) {
m_pFirstLight = NULL; m_pFirstLight = NULL;
m_pRootNode = new KRNode(*this, "scene_root"); m_pRootNode = new KRNode(*this, "scene_root");
notify_sceneGraphCreate(m_pRootNode);
m_skyBoxName = ""; m_skyBoxName = name + "_skybox";
} }
KRScene::~KRScene() { KRScene::~KRScene() {
@@ -68,6 +69,7 @@ void KRScene::renderFrame(float deltaTime) {
} }
camera->renderFrame(deltaTime); camera->renderFrame(deltaTime);
getContext().endFrame(deltaTime); getContext().endFrame(deltaTime);
physicsUpdate(deltaTime);
} }
void KRScene::render(KRCamera *pCamera, std::map<KRAABB, int> &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame) { void KRScene::render(KRCamera *pCamera, std::map<KRAABB, int> &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame) {
@@ -383,7 +385,7 @@ void KRScene::notify_sceneGraphCreate(KRNode *pNode)
{ {
m_nodeTree.add(pNode); m_nodeTree.add(pNode);
if(pNode->hasPhysics()) { if(pNode->hasPhysics()) {
m_physicsNodes.erase(pNode); m_physicsNodes.insert(pNode);
} }
// m_newNodes.insert(pNode); // m_newNodes.insert(pNode);
} }