diff --git a/KREngine/kraken/KRAABB.h b/KREngine/kraken/KRAABB.h index 1b67e7c..b48dc4e 100644 --- a/KREngine/kraken/KRAABB.h +++ b/KREngine/kraken/KRAABB.h @@ -55,5 +55,18 @@ public: KRVector3 nearestPoint(const KRVector3 & v) const; }; +namespace std { + template<> + struct hash { + public: + size_t operator()(const KRAABB &s) const + { + size_t h1 = std::hash()(s.min); + size_t h2 = std::hash()(s.max); + return h1 ^ ( h2 << 1 ); + } + }; +} + #endif /* defined(KRAABB_H) */ diff --git a/KREngine/kraken/KRAnimation.cpp b/KREngine/kraken/KRAnimation.cpp index 38af95f..73e2b23 100644 --- a/KREngine/kraken/KRAnimation.cpp +++ b/KREngine/kraken/KRAnimation.cpp @@ -47,7 +47,7 @@ KRAnimation::KRAnimation(KRContext &context, std::string name) : KRResource(cont } KRAnimation::~KRAnimation() { - for(std::map::iterator itr = m_layers.begin(); itr != m_layers.end(); ++itr){ + for(std::unordered_map::iterator itr = m_layers.begin(); itr != m_layers.end(); ++itr){ delete (*itr).second; } } @@ -69,7 +69,7 @@ bool KRAnimation::save(KRDataBlock &data) { animation_node->SetAttribute("auto_play", m_auto_play ? "true" : "false"); animation_node->SetAttribute("duration", m_duration); - for(std::map::iterator itr = m_layers.begin(); itr != m_layers.end(); ++itr){ + for(std::unordered_map::iterator itr = m_layers.begin(); itr != m_layers.end(); ++itr){ (*itr).second->saveXML(animation_node); } @@ -120,7 +120,7 @@ KRAnimation *KRAnimation::Load(KRContext &context, const std::string &name, KRDa } -std::map &KRAnimation::getLayers() +std::unordered_map &KRAnimation::getLayers() { return m_layers; } @@ -139,7 +139,7 @@ void KRAnimation::update(float deltaTime) m_local_time -= m_duration; } - for(std::map::iterator layer_itr = m_layers.begin(); layer_itr != m_layers.end(); layer_itr++) { + for(std::unordered_map::iterator layer_itr = m_layers.begin(); layer_itr != m_layers.end(); layer_itr++) { KRAnimationLayer *layer = (*layer_itr).second; for(std::vector::iterator attribute_itr = layer->getAttributes().begin(); attribute_itr != layer->getAttributes().end(); attribute_itr++) { KRAnimationAttribute *attribute = *attribute_itr; diff --git a/KREngine/kraken/KRAnimation.h b/KREngine/kraken/KRAnimation.h index b84e400..a66891d 100644 --- a/KREngine/kraken/KRAnimation.h +++ b/KREngine/kraken/KRAnimation.h @@ -51,7 +51,7 @@ public: static KRAnimation *Load(KRContext &context, const std::string &name, KRDataBlock *data); void addLayer(KRAnimationLayer *layer); - std::map &getLayers(); + std::unordered_map &getLayers(); KRAnimationLayer *getLayer(const char *szName); void Play(); void Stop(); @@ -62,7 +62,7 @@ public: void setDuration(float duration); bool isPlaying(); private: - std::map m_layers; + std::unordered_map m_layers; bool m_auto_play; bool m_loop; bool m_playing; diff --git a/KREngine/kraken/KRAnimationCurveManager.cpp b/KREngine/kraken/KRAnimationCurveManager.cpp index 73cbbbd..05cec49 100644 --- a/KREngine/kraken/KRAnimationCurveManager.cpp +++ b/KREngine/kraken/KRAnimationCurveManager.cpp @@ -38,7 +38,7 @@ KRAnimationCurveManager::KRAnimationCurveManager(KRContext &context) : KRContext } KRAnimationCurveManager::~KRAnimationCurveManager() { - for(map::iterator itr = m_animationCurves.begin(); itr != m_animationCurves.end(); ++itr){ + for(unordered_map::iterator itr = m_animationCurves.begin(); itr != m_animationCurves.end(); ++itr){ delete (*itr).second; } } @@ -53,7 +53,7 @@ KRAnimationCurve *KRAnimationCurveManager::getAnimationCurve(const char *szName) return m_animationCurves[szName]; } -std::map &KRAnimationCurveManager::getAnimationCurves() { +std::unordered_map &KRAnimationCurveManager::getAnimationCurves() { return m_animationCurves; } diff --git a/KREngine/kraken/KRAnimationCurveManager.h b/KREngine/kraken/KRAnimationCurveManager.h index 6c5f232..5064a01 100644 --- a/KREngine/kraken/KRAnimationCurveManager.h +++ b/KREngine/kraken/KRAnimationCurveManager.h @@ -48,10 +48,10 @@ public: KRAnimationCurve *loadAnimationCurve(const char *szName, KRDataBlock *data); KRAnimationCurve *getAnimationCurve(const char *szName); void addAnimationCurve(KRAnimationCurve *new_animation_curve); - std::map &getAnimationCurves(); + std::unordered_map &getAnimationCurves(); private: - map m_animationCurves; + unordered_map m_animationCurves; }; diff --git a/KREngine/kraken/KRAnimationManager.cpp b/KREngine/kraken/KRAnimationManager.cpp index 25db664..f8d4d50 100644 --- a/KREngine/kraken/KRAnimationManager.cpp +++ b/KREngine/kraken/KRAnimationManager.cpp @@ -38,7 +38,7 @@ KRAnimationManager::KRAnimationManager(KRContext &context) : KRContextObject(con } KRAnimationManager::~KRAnimationManager() { - for(map::iterator itr = m_animations.begin(); itr != m_animations.end(); ++itr){ + for(unordered_map::iterator itr = m_animations.begin(); itr != m_animations.end(); ++itr){ delete (*itr).second; } } @@ -67,7 +67,7 @@ KRAnimation *KRAnimationManager::getAnimation(const char *szName) { return m_animations[szName]; } -std::map &KRAnimationManager::getAnimations() { +std::unordered_map &KRAnimationManager::getAnimations() { return m_animations; } diff --git a/KREngine/kraken/KRAnimationManager.h b/KREngine/kraken/KRAnimationManager.h index 8ae0f17..91e1d9c 100644 --- a/KREngine/kraken/KRAnimationManager.h +++ b/KREngine/kraken/KRAnimationManager.h @@ -48,7 +48,7 @@ public: KRAnimation *loadAnimation(const char *szName, KRDataBlock *data); KRAnimation *getAnimation(const char *szName); void addAnimation(KRAnimation *new_animation); - std::map &getAnimations(); + unordered_map &getAnimations(); void startFrame(float deltaTime); void endFrame(float deltaTime); @@ -56,7 +56,7 @@ public: void updateActiveAnimations(KRAnimation *animation); private: - map m_animations; + unordered_map m_animations; setm_activeAnimations; }; diff --git a/KREngine/kraken/KRAudioManager.cpp b/KREngine/kraken/KRAudioManager.cpp index 1f33246..b3d418a 100644 --- a/KREngine/kraken/KRAudioManager.cpp +++ b/KREngine/kraken/KRAudioManager.cpp @@ -47,7 +47,7 @@ KRAudioManager::KRAudioManager(KRContext &context) : KRContextObject(context) m_anticlick_block = true; mach_timebase_info(&m_timebase_info); - m_audio_engine = KRAKEN_AUDIO_SIREN; + m_audio_engine = KRAKEN_AUDIO_NONE; m_high_quality_hrtf = false; m_listener_scene = NULL; @@ -212,7 +212,7 @@ void KRAudioManager::renderReverbImpulseResponse(int impulse_response_offset, in int impulse_response_channels = 2; for(int channel=0; channel < impulse_response_channels; channel++) { bool first_sample = true; - for(std::map::iterator zone_itr=m_reverb_zone_weights.begin(); zone_itr != m_reverb_zone_weights.end(); zone_itr++) { + for(std::unordered_map::iterator zone_itr=m_reverb_zone_weights.begin(); zone_itr != m_reverb_zone_weights.end(); zone_itr++) { siren_reverb_zone_weight_info zi = (*zone_itr).second; if(zi.reverb_sample) { if(impulse_response_offset < zi.reverb_sample->getFrameCount()) { // Optimization - when mixing multiple impulse responses (i.e. fading between reverb zones), do not process blocks past the end of a shorter impulse response sample when they differ in length @@ -264,7 +264,7 @@ void KRAudioManager::renderReverb() if(&source->getScene() == m_listener_scene) { float containment_factor = 0.0f; - for(std::map::iterator zone_itr=m_reverb_zone_weights.begin(); zone_itr != m_reverb_zone_weights.end(); zone_itr++) { + for(std::unordered_map::iterator zone_itr=m_reverb_zone_weights.begin(); zone_itr != m_reverb_zone_weights.end(); zone_itr++) { siren_reverb_zone_weight_info zi = (*zone_itr).second; float gain = zi.weight * zi.reverb_zone->getReverbGain() * zi.reverb_zone->getContainment(source->getWorldTranslation()); if(gain > containment_factor) containment_factor = gain; @@ -283,7 +283,7 @@ void KRAudioManager::renderReverb() // KRAudioSample *impulse_response = getContext().getAudioManager()->get("hrtf_kemar_H10e040a"); int impulse_response_blocks = 0; - for(std::map::iterator zone_itr=m_reverb_zone_weights.begin(); zone_itr != m_reverb_zone_weights.end(); zone_itr++) { + for(std::unordered_map::iterator zone_itr=m_reverb_zone_weights.begin(); zone_itr != m_reverb_zone_weights.end(); zone_itr++) { siren_reverb_zone_weight_info zi = (*zone_itr).second; if(zi.reverb_sample) { int zone_sample_blocks = zi.reverb_sample->getFrameCount() / KRENGINE_AUDIO_BLOCK_LENGTH + 1; @@ -1208,7 +1208,7 @@ void KRAudioManager::cleanupOpenAL() KRAudioManager::~KRAudioManager() { - for(map::iterator name_itr=m_sounds.begin(); name_itr != m_sounds.end(); name_itr++) { + for(unordered_map::iterator name_itr=m_sounds.begin(); name_itr != m_sounds.end(); name_itr++) { delete (*name_itr).second; } @@ -1272,7 +1272,7 @@ void KRAudioManager::add(KRAudioSample *sound) std::string lower_name = sound->getName(); std::transform(lower_name.begin(), lower_name.end(), lower_name.begin(), ::tolower); - map::iterator name_itr = m_sounds.find(lower_name); + unordered_map::iterator name_itr = m_sounds.find(lower_name); if(name_itr != m_sounds.end()) { delete (*name_itr).second; (*name_itr).second = sound; @@ -1540,8 +1540,8 @@ void KRAudioManager::startFrame(float deltaTime) // Click Removal - Add ramping of gain changes for audio sources that are continuing to play float gain_anticlick = 0.0f; - std::pair > >::iterator, std::multimap > >::iterator> prev_range = m_prev_mapped_sources.equal_range(adjusted_source_dir); - for(std::multimap > >::iterator prev_itr=prev_range.first; prev_itr != prev_range.second; prev_itr++) { + std::pair > >::iterator, std::unordered_multimap > >::iterator> prev_range = m_prev_mapped_sources.equal_range(adjusted_source_dir); + for(std::unordered_multimap > >::iterator prev_itr=prev_range.first; prev_itr != prev_range.second; prev_itr++) { if( (*prev_itr).second.first == source) { gain_anticlick = (*prev_itr).second.second.second; break; @@ -1553,7 +1553,7 @@ void KRAudioManager::startFrame(float deltaTime) } // Click Removal - Map audio sources for ramp-down of gain for audio sources that have been squelched by attenuation - for(std::multimap > >::iterator itr=m_prev_mapped_sources.begin(); itr != m_prev_mapped_sources.end(); itr++) { + for(std::unordered_multimap > >::iterator itr=m_prev_mapped_sources.begin(); itr != m_prev_mapped_sources.end(); itr++) { KRAudioSource *source = (*itr).second.first; float source_prev_gain = (*itr).second.second.second; @@ -1561,9 +1561,9 @@ void KRAudioManager::startFrame(float deltaTime) // Only create ramp-down channels for 3d sources that have been squelched by attenuation; this is not necessary if the sample has completed playing KRVector2 source_position = (*itr).first; - std::pair > >::iterator, std::multimap > >::iterator> new_range = m_mapped_sources.equal_range(source_position); + std::pair > >::iterator, std::unordered_multimap > >::iterator> new_range = m_mapped_sources.equal_range(source_position); bool already_merged = false; - for(std::multimap > >::iterator new_itr=new_range.first; new_itr != new_range.second; new_itr++) { + for(std::unordered_multimap > >::iterator new_itr=new_range.first; new_itr != new_range.second; new_itr++) { if( (*new_itr).second.first == source) { already_merged = true; break; @@ -1588,7 +1588,7 @@ void KRAudioManager::renderAmbient() int output_offset = (m_output_accumulation_block_start) % (KRENGINE_REVERB_MAX_SAMPLES * KRENGINE_MAX_OUTPUT_CHANNELS); float *buffer = m_workspace[0].realp; - for(std::map::iterator zone_itr=m_ambient_zone_weights.begin(); zone_itr != m_ambient_zone_weights.end(); zone_itr++) { + for(std::unordered_map::iterator zone_itr=m_ambient_zone_weights.begin(); zone_itr != m_ambient_zone_weights.end(); zone_itr++) { siren_ambient_zone_weight_info zi = (*zone_itr).second; float gain = (*zone_itr).second.weight * zi.ambient_zone->getAmbientGain() * m_global_ambient_gain * m_global_gain; @@ -1618,7 +1618,7 @@ void KRAudioManager::renderHRTF() for(int channel=0; channel > >::iterator itr=m_mapped_sources.begin(); + std::unordered_multimap > >::iterator itr=m_mapped_sources.begin(); while(itr != m_mapped_sources.end()) { // Batch together sound sources that are emitted from the same direction KRVector2 source_direction = (*itr).first; diff --git a/KREngine/kraken/KRAudioManager.h b/KREngine/kraken/KRAudioManager.h index 1a7d69a..92e83ca 100644 --- a/KREngine/kraken/KRAudioManager.h +++ b/KREngine/kraken/KRAudioManager.h @@ -139,7 +139,7 @@ private: KRVector3 m_listener_forward; KRVector3 m_listener_up; - map m_sounds; + unordered_map m_sounds; std::vector m_bufferPoolIdle; @@ -199,7 +199,7 @@ private: std::vector m_hrtf_sample_locations; float *m_hrtf_data; - map m_hrtf_spectral[2]; + unordered_map m_hrtf_spectral[2]; KRVector2 getNearestHRTFSample(const KRVector2 &dir); void getHRTFMix(const KRVector2 &dir, KRVector2 &hrtf1, KRVector2 &hrtf2, KRVector2 &hrtf3, KRVector2 &hrtf4, float &mix1, float &mix2, float &mix3, float &mix4); @@ -207,17 +207,17 @@ private: DSPSplitComplex getHRTFSpectral(const KRVector2 &hrtf_dir, const int channel); - std::map m_ambient_zone_weights; + std::unordered_map m_ambient_zone_weights; float m_ambient_zone_total_weight = 0.0f; // For normalizing zone weights - std::map m_reverb_zone_weights; + std::unordered_map m_reverb_zone_weights; float m_reverb_zone_total_weight = 0.0f; // For normalizing zone weights boost::signals2::mutex m_mutex; mach_timebase_info_data_t m_timebase_info; - std::multimap > > m_mapped_sources, m_prev_mapped_sources; + std::unordered_multimap > > m_mapped_sources, m_prev_mapped_sources; bool m_anticlick_block; bool m_high_quality_hrtf; // If true, 4 HRTF samples will be interpolated; if false, the nearest HRTF sample will be used without interpolation }; diff --git a/KREngine/kraken/KRBundleManager.cpp b/KREngine/kraken/KRBundleManager.cpp index e902438..83821b3 100644 --- a/KREngine/kraken/KRBundleManager.cpp +++ b/KREngine/kraken/KRBundleManager.cpp @@ -38,7 +38,7 @@ KRBundleManager::KRBundleManager(KRContext &context) : KRContextObject(context) } KRBundleManager::~KRBundleManager() { - for(map::iterator itr = m_bundles.begin(); itr != m_bundles.end(); ++itr){ + for(unordered_map::iterator itr = m_bundles.begin(); itr != m_bundles.end(); ++itr){ delete (*itr).second; } m_bundles.empty(); @@ -55,6 +55,6 @@ KRBundle *KRBundleManager::getBundle(const char *szName) { return m_bundles[szName]; } -std::map KRBundleManager::getBundles() { +std::unordered_map KRBundleManager::getBundles() { return m_bundles; } \ No newline at end of file diff --git a/KREngine/kraken/KRBundleManager.h b/KREngine/kraken/KRBundleManager.h index 687c63e..4721f61 100644 --- a/KREngine/kraken/KRBundleManager.h +++ b/KREngine/kraken/KRBundleManager.h @@ -49,10 +49,10 @@ public: KRBundle *getBundle(const char *szName); std::vector getBundleNames(); - std::map getBundles(); + std::unordered_map getBundles(); private: - std::map m_bundles; + std::unordered_map m_bundles; }; #endif /* defined(KRBUNDLEMANAGER_H) */ diff --git a/KREngine/kraken/KRCamera.cpp b/KREngine/kraken/KRCamera.cpp index 562d601..a05e0b8 100644 --- a/KREngine/kraken/KRCamera.cpp +++ b/KREngine/kraken/KRCamera.cpp @@ -440,7 +440,7 @@ void KRCamera::renderFrame(float deltaTime, GLint renderBufferWidth, GLint rende KRShader *pVisShader = getContext().getShaderManager()->getShader("visualize_overlay", this, std::vector(), 0, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, KRNode::RENDER_PASS_FORWARD_TRANSPARENT); m_pContext->getModelManager()->bindVBO((void *)KRENGINE_VBO_3D_CUBE, KRENGINE_VBO_3D_CUBE_SIZE, NULL, 0, true, false, false, false, false, false, false, true); - for(std::map::iterator itr=m_viewport.getVisibleBounds().begin(); itr != m_viewport.getVisibleBounds().end(); itr++) { + for(std::unordered_map::iterator itr=m_viewport.getVisibleBounds().begin(); itr != m_viewport.getVisibleBounds().end(); itr++) { KRMat4 matModel = KRMat4(); matModel.scale((*itr).first.size() * 0.5f); matModel.translate((*itr).first.center()); diff --git a/KREngine/kraken/KREngine-common.h b/KREngine/kraken/KREngine-common.h index 6c43c66..9102b0a 100644 --- a/KREngine/kraken/KREngine-common.h +++ b/KREngine/kraken/KREngine-common.h @@ -22,6 +22,7 @@ float const D2R = PI * 2 / 360; #include #include #include +#include #include #include #include @@ -51,6 +52,9 @@ using std::string; using std::set; using std::list; using std::map; +using std::unordered_map; +using std::multimap; +using std::unordered_multimap; using std::stack; using std::queue; diff --git a/KREngine/kraken/KRMaterialManager.cpp b/KREngine/kraken/KRMaterialManager.cpp index 58fd0af..6b1a9f8 100644 --- a/KREngine/kraken/KRMaterialManager.cpp +++ b/KREngine/kraken/KRMaterialManager.cpp @@ -73,7 +73,7 @@ KRMaterial *KRMaterialManager::getMaterial(const char *szName) { lowerName.begin(), ::tolower); - map::iterator itr = m_materials.find(lowerName); + unordered_map::iterator itr = m_materials.find(lowerName); if(itr == m_materials.end()) { fprintf(stderr, "Material not found: %s\n", szName); // Not found diff --git a/KREngine/kraken/KRMaterialManager.h b/KREngine/kraken/KRMaterialManager.h index 836e552..993cab1 100644 --- a/KREngine/kraken/KRMaterialManager.h +++ b/KREngine/kraken/KRMaterialManager.h @@ -55,7 +55,7 @@ public: void configure(bool blend_enable, GLenum blend_src, GLenum blend_dest, bool depth_test_enable, GLenum depth_func, bool depth_write_enable); private: - map m_materials; + std::unordered_map m_materials; KRTextureManager *m_pTextureManager; KRShaderManager *m_pShaderManager; diff --git a/KREngine/kraken/KRMeshManager.cpp b/KREngine/kraken/KRMeshManager.cpp index ce12160..4ef2c5f 100644 --- a/KREngine/kraken/KRMeshManager.cpp +++ b/KREngine/kraken/KRMeshManager.cpp @@ -55,7 +55,7 @@ KRMeshManager::KRMeshManager(KRContext &context) : KRContextObject(context) { } KRMeshManager::~KRMeshManager() { - for(std::multimap::iterator itr = m_models.begin(); itr != m_models.end(); ++itr){ + for(std::unordered_multimap::iterator itr = m_models.begin(); itr != m_models.end(); ++itr){ delete (*itr).second; } m_models.empty(); @@ -85,8 +85,8 @@ std::vector KRMeshManager::getModel(const char *szName) { std::vector matching_models; - std::pair::iterator, std::multimap::iterator> range = m_models.equal_range(lowerName); - for(std::multimap::iterator itr_match = range.first; itr_match != range.second; itr_match++) { + std::pair::iterator, std::unordered_multimap::iterator> range = m_models.equal_range(lowerName); + for(std::unordered_multimap::iterator itr_match = range.first; itr_match != range.second; itr_match++) { matching_models.push_back(itr_match->second); } @@ -99,7 +99,7 @@ std::vector KRMeshManager::getModel(const char *szName) { return matching_models; } -std::multimap &KRMeshManager::getModels() { +std::unordered_multimap &KRMeshManager::getModels() { return m_models; } @@ -187,7 +187,7 @@ void KRMeshManager::bindVBO(GLvoid *data, GLsizeiptr size, GLvoid *index_data, G fprintf(stderr, "flushBuffers due to VBO exhaustion...\n"); m_pContext->rotateBuffers(false); } - std::map::iterator first_itr = m_vbosPool.begin(); + std::unordered_map::iterator first_itr = m_vbosPool.begin(); vbo_info_type firstVBO = first_itr->second; #if GL_OES_vertex_array_object GLDEBUG(glDeleteVertexArraysOES(1, &firstVBO.vao_handle)); @@ -324,7 +324,7 @@ long KRMeshManager::getMemUsed() long KRMeshManager::getMemActive() { long mem_active = 0; - for(std::map::iterator itr = m_vbosActive.begin(); itr != m_vbosActive.end(); itr++) { + for(std::unordered_map::iterator itr = m_vbosActive.begin(); itr != m_vbosActive.end(); itr++) { mem_active += (*itr).second.size; } return mem_active; diff --git a/KREngine/kraken/KRMeshManager.h b/KREngine/kraken/KRMeshManager.h index 22b31d8..7eef5f6 100644 --- a/KREngine/kraken/KRMeshManager.h +++ b/KREngine/kraken/KRMeshManager.h @@ -57,7 +57,7 @@ public: void addModel(KRMesh *model); std::vector getModelNames(); - std::multimap &getModels(); + std::unordered_multimap &getModels(); void bindVBO(GLvoid *data, GLsizeiptr size, GLvoid *index_data, GLsizeiptr index_data_size, bool enable_vertex, bool enable_normal, bool enable_tangent, bool enable_uva, bool enable_uvb, bool enable_bone_indexes, bool enable_bone_weights, bool static_vbo); @@ -113,7 +113,7 @@ public: private: - std::multimap m_models; // Multiple models with the same name/key may be inserted, representing multiple LOD levels of the model + std::unordered_multimap m_models; // Multiple models with the same name/key may be inserted, representing multiple LOD levels of the model typedef struct vbo_info { GLuint vbo_handle; @@ -126,8 +126,8 @@ private: long m_vboMemUsed; vbo_info_type m_currentVBO; - std::map m_vbosActive; - std::map m_vbosPool; + std::unordered_map m_vbosActive; + std::unordered_map m_vbosPool; RandomParticleVertexData *m_randomParticleVertexData; VolumetricLightingVertexData *m_volumetricLightingVertexData; diff --git a/KREngine/kraken/KRModel.cpp b/KREngine/kraken/KRModel.cpp index f130359..f781218 100644 --- a/KREngine/kraken/KRModel.cpp +++ b/KREngine/kraken/KRModel.cpp @@ -67,7 +67,7 @@ tinyxml2::XMLElement *KRModel::saveXML( tinyxml2::XMLNode *parent) void KRModel::loadModel() { if(m_models.size() == 0) { std::vector models = m_pContext->getModelManager()->getModel(m_model_name.c_str()); // The model manager returns the LOD levels in sorted order, with the highest detail first - std::map > bones; + std::unordered_map > bones; if(models.size() > 0) { bool all_bones_found = true; for(std::vector::iterator model_itr = models.begin(); model_itr != models.end(); model_itr++) { diff --git a/KREngine/kraken/KRModel.h b/KREngine/kraken/KRModel.h index 08717e7..d312a8d 100644 --- a/KREngine/kraken/KRModel.h +++ b/KREngine/kraken/KRModel.h @@ -63,7 +63,7 @@ public: private: std::vector m_models; - std::map > m_bones; // Outer std::map connects model to set of bones + std::unordered_map > m_bones; // Outer std::map connects model to set of bones KRTexture *m_pLightMap; std::string m_lightMap; std::string m_model_name; diff --git a/KREngine/kraken/KRResource+fbx.cpp b/KREngine/kraken/KRResource+fbx.cpp index 6a3ef6a..7d3d302 100644 --- a/KREngine/kraken/KRResource+fbx.cpp +++ b/KREngine/kraken/KRResource+fbx.cpp @@ -162,11 +162,11 @@ std::vector KRResource::LoadFbx(KRContext &context, const std::str } } - for(std::map::iterator texture_itr = context.getTextureManager()->getTextures().begin(); texture_itr != context.getTextureManager()->getTextures().end(); texture_itr++) { + for(std::unordered_map::iterator texture_itr = context.getTextureManager()->getTextures().begin(); texture_itr != context.getTextureManager()->getTextures().end(); texture_itr++) { resources.push_back((*texture_itr).second); } - for(std::map::iterator mesh_itr = context.getModelManager()->getModels().begin(); mesh_itr != context.getModelManager()->getModels().end(); mesh_itr++) { + for(std::unordered_map::iterator mesh_itr = context.getModelManager()->getModels().begin(); mesh_itr != context.getModelManager()->getModels().end(); mesh_itr++) { resources.push_back((*mesh_itr).second); } diff --git a/KREngine/kraken/KRScene.cpp b/KREngine/kraken/KRScene.cpp index 6137173..8b72703 100644 --- a/KREngine/kraken/KRScene.cpp +++ b/KREngine/kraken/KRScene.cpp @@ -85,13 +85,13 @@ std::set &KRScene::getReverbZones() return m_reverbZoneNodes; } -void KRScene::render(KRCamera *pCamera, std::map &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame) { +void KRScene::render(KRCamera *pCamera, std::unordered_map &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame) { if(new_frame) { // Expire cached occlusion test results. // Cached "failed" results are expired on the next frame (marked with .second of -1) // Cached "success" results are expired after KRENGINE_OCCLUSION_TEST_EXPIRY frames (marked with .second of the last frame std::set expired_visible_bounds; - for(std::map::iterator visible_bounds_itr = visibleBounds.begin(); visible_bounds_itr != visibleBounds.end(); visible_bounds_itr++) { + for(std::unordered_map::iterator visible_bounds_itr = visibleBounds.begin(); visible_bounds_itr != visibleBounds.end(); visible_bounds_itr++) { if((*visible_bounds_itr).second == -1 || (*visible_bounds_itr).second + KRENGINE_OCCLUSION_TEST_EXPIRY < getContext().getCurrentFrame()) { expired_visible_bounds.insert((*visible_bounds_itr).first); } @@ -156,7 +156,7 @@ void KRScene::render(KRCamera *pCamera, std::map &visibleBounds, co } } -void KRScene::render(KROctreeNode *pOctreeNode, std::map &visibleBounds, KRCamera *pCamera, std::vector &lights, const KRViewport &viewport, KRNode::RenderPass renderPass, std::vector &remainingOctrees, std::vector &remainingOctreesTestResults, std::vector &remainingOctreesTestResultsOnly, bool bOcclusionResultsPass, bool bOcclusionTestResultsOnly) +void KRScene::render(KROctreeNode *pOctreeNode, std::unordered_map &visibleBounds, KRCamera *pCamera, std::vector &lights, const KRViewport &viewport, KRNode::RenderPass renderPass, std::vector &remainingOctrees, std::vector &remainingOctreesTestResults, std::vector &remainingOctreesTestResultsOnly, bool bOcclusionResultsPass, bool bOcclusionTestResultsOnly) { if(pOctreeNode) { @@ -226,7 +226,7 @@ void KRScene::render(KROctreeNode *pOctreeNode, std::map &visibleBo if(!bVisible) { // Check if a previous occlusion query has returned true, taking advantage of temporal consistency of visible elements from frame to frame // If the previous frame rendered this octree, then attempt to render it in this frame without performing a pre-occlusion test - std::map::iterator match_itr = visibleBounds.find(octreeBounds); + std::unordered_map::iterator match_itr = visibleBounds.find(octreeBounds); if(match_itr != visibleBounds.end()) { if((*match_itr).second == -1) { // We have already tested these bounds with a negative result diff --git a/KREngine/kraken/KRScene.h b/KREngine/kraken/KRScene.h index dbc80ff..9de3306 100644 --- a/KREngine/kraken/KRScene.h +++ b/KREngine/kraken/KRScene.h @@ -67,9 +67,9 @@ public: bool rayCast(const KRVector3 &v0, const KRVector3 &dir, KRHitInfo &hitinfo, unsigned int layer_mask); void renderFrame(float deltaTime, int width, int height); - void render(KRCamera *pCamera, std::map &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame); + void render(KRCamera *pCamera, std::unordered_map &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame); - void render(KROctreeNode *pOctreeNode, std::map &visibleBounds, KRCamera *pCamera, std::vector &lights, const KRViewport &viewport, KRNode::RenderPass renderPass, std::vector &remainingOctrees, std::vector &remainingOctreesTestResults, std::vector &remainingOctreesTestResultsOnly, bool bOcclusionResultsPass, bool bOcclusionTestResultsOnly); + void render(KROctreeNode *pOctreeNode, std::unordered_map &visibleBounds, KRCamera *pCamera, std::vector &lights, const KRViewport &viewport, KRNode::RenderPass renderPass, std::vector &remainingOctrees, std::vector &remainingOctreesTestResults, std::vector &remainingOctreesTestResultsOnly, bool bOcclusionResultsPass, bool bOcclusionTestResultsOnly); void updateOctree(const KRViewport &viewport); diff --git a/KREngine/kraken/KRSceneManager.cpp b/KREngine/kraken/KRSceneManager.cpp index aacc3f9..2348501 100644 --- a/KREngine/kraken/KRSceneManager.cpp +++ b/KREngine/kraken/KRSceneManager.cpp @@ -36,7 +36,7 @@ KRSceneManager::KRSceneManager(KRContext &context) : KRContextObject(context){ } KRSceneManager::~KRSceneManager() { - for(map::iterator itr = m_scenes.begin(); itr != m_scenes.end(); ++itr){ + for(unordered_map::iterator itr = m_scenes.begin(); itr != m_scenes.end(); ++itr){ delete (*itr).second; } m_scenes.empty(); @@ -53,7 +53,7 @@ KRScene *KRSceneManager::getScene(const char *szName) { } KRScene *KRSceneManager::getFirstScene() { - static std::map::iterator scene_itr = m_scenes.begin(); + static std::unordered_map::iterator scene_itr = m_scenes.begin(); if(scene_itr == m_scenes.end()) { return NULL; } else { @@ -61,7 +61,7 @@ KRScene *KRSceneManager::getFirstScene() { } } -std::map KRSceneManager::getScenes() { +std::unordered_map KRSceneManager::getScenes() { return m_scenes; } diff --git a/KREngine/kraken/KRSceneManager.h b/KREngine/kraken/KRSceneManager.h index 0460680..bd6e78e 100644 --- a/KREngine/kraken/KRSceneManager.h +++ b/KREngine/kraken/KRSceneManager.h @@ -50,11 +50,11 @@ public: KRScene *getFirstScene(); std::vector getSceneNames(); - std::map getScenes(); + std::unordered_map getScenes(); private: - std::map m_scenes; + std::unordered_map m_scenes; }; diff --git a/KREngine/kraken/KRShaderManager.h b/KREngine/kraken/KRShaderManager.h index 3ce0122..1f8383e 100644 --- a/KREngine/kraken/KRShaderManager.h +++ b/KREngine/kraken/KRShaderManager.h @@ -67,11 +67,11 @@ public: long getShaderHandlesUsed(); private: - //std::map m_shaders; + //std::unordered_map m_shaders; std::map >, KRShader *> m_shaders; - std::map m_fragShaderSource; - std::map m_vertShaderSource; + std::unordered_map m_fragShaderSource; + std::unordered_map m_vertShaderSource; KRShader *m_pShader; char m_szCurrentShaderKey[256]; diff --git a/KREngine/kraken/KRTextureManager.cpp b/KREngine/kraken/KRTextureManager.cpp index 814996c..ad80712 100644 --- a/KREngine/kraken/KRTextureManager.cpp +++ b/KREngine/kraken/KRTextureManager.cpp @@ -52,7 +52,7 @@ KRTextureManager::KRTextureManager(KRContext &context) : KRContextObject(context } KRTextureManager::~KRTextureManager() { - for(map::iterator itr = m_textures.begin(); itr != m_textures.end(); ++itr){ + for(unordered_map::iterator itr = m_textures.begin(); itr != m_textures.end(); ++itr){ delete (*itr).second; } } @@ -132,7 +132,7 @@ KRTexture *KRTextureManager::getTextureCube(const char *szName) { std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), ::tolower); - map::iterator itr = m_textures.find(lowerName); + unordered_map::iterator itr = m_textures.find(lowerName); if(itr == m_textures.end()) { KRTextureCube *pTexture = new KRTextureCube(getContext(), lowerName); @@ -148,7 +148,7 @@ KRTexture *KRTextureManager::getTexture(const std::string &name) { std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), ::tolower); - map::iterator itr = m_textures.find(lowerName); + unordered_map::iterator itr = m_textures.find(lowerName); if(itr == m_textures.end()) { if(lowerName.length() <= 8) { return NULL; @@ -328,7 +328,7 @@ void KRTextureManager::memoryChanged(long memoryDelta) m_textureMemUsed += memoryDelta; } -std::map &KRTextureManager::getTextures() +std::unordered_map &KRTextureManager::getTextures() { return m_textures; } @@ -338,7 +338,7 @@ void KRTextureManager::compress() std::vector textures_to_remove; std::vector textures_to_add; - for(std::map::iterator itr=m_textures.begin(); itr != m_textures.end(); itr++) { + for(std::unordered_map::iterator itr=m_textures.begin(); itr != m_textures.end(); itr++) { KRTexture *texture = (*itr).second; KRTexture *compressed_texture = texture->compress(); if(compressed_texture) { diff --git a/KREngine/kraken/KRTextureManager.h b/KREngine/kraken/KRTextureManager.h index 48ac709..1739d55 100644 --- a/KREngine/kraken/KRTextureManager.h +++ b/KREngine/kraken/KRTextureManager.h @@ -62,7 +62,7 @@ public: void startFrame(float deltaTime); void endFrame(float deltaTime); - std::map &getTextures(); + std::unordered_map &getTextures(); void compress(); @@ -81,7 +81,7 @@ private: long m_memoryTransferredThisFrame; - std::map m_textures; + std::unordered_map m_textures; KRTexture *m_boundTextures[KRENGINE_MAX_TEXTURE_UNITS]; GLuint m_wrapModeS[KRENGINE_MAX_TEXTURE_UNITS]; diff --git a/KREngine/kraken/KRUnknownManager.cpp b/KREngine/kraken/KRUnknownManager.cpp index 2909c1e..db01820 100644 --- a/KREngine/kraken/KRUnknownManager.cpp +++ b/KREngine/kraken/KRUnknownManager.cpp @@ -30,6 +30,7 @@ // #include "KRUnknownManager.h" +#include KRUnknownManager::KRUnknownManager(KRContext &context) : KRContextObject(context) { @@ -38,8 +39,8 @@ KRUnknownManager::KRUnknownManager(KRContext &context) : KRContextObject(context KRUnknownManager::~KRUnknownManager() { - for(map >::iterator extension_itr = m_unknowns.begin(); extension_itr != m_unknowns.end(); extension_itr++) { - for(map::iterator name_itr=(*extension_itr).second.begin(); name_itr != (*extension_itr).second.end(); name_itr++) { + for(unordered_map >::iterator extension_itr = m_unknowns.begin(); extension_itr != m_unknowns.end(); extension_itr++) { + for(unordered_map::iterator name_itr=(*extension_itr).second.begin(); name_itr != (*extension_itr).second.end(); name_itr++) { delete (*name_itr).second; } } @@ -53,13 +54,13 @@ void KRUnknownManager::add(KRUnknown *unknown) std::transform(lower_name.begin(), lower_name.end(), lower_name.begin(), ::tolower); std::transform(lower_extension.begin(), lower_extension.end(), lower_extension.begin(), ::tolower); - map >::iterator extension_itr = m_unknowns.find(lower_extension); + unordered_map >::iterator extension_itr = m_unknowns.find(lower_extension); if(extension_itr == m_unknowns.end()) { - m_unknowns[lower_extension] = map(); + m_unknowns[lower_extension] = unordered_map(); extension_itr = m_unknowns.find(lower_extension); } - map::iterator name_itr = (*extension_itr).second.find(lower_name); + unordered_map::iterator name_itr = (*extension_itr).second.find(lower_name); if(name_itr != (*extension_itr).second.end()) { delete (*name_itr).second; (*name_itr).second = unknown; @@ -87,7 +88,7 @@ KRUnknown *KRUnknownManager::get(const std::string &name, const std::string &ext } -const map &KRUnknownManager::get(const std::string &extension) +const unordered_map &KRUnknownManager::get(const std::string &extension) { std::string lower_extension = extension; std::transform(lower_extension.begin(), lower_extension.end(), lower_extension.begin(), ::tolower); diff --git a/KREngine/kraken/KRUnknownManager.h b/KREngine/kraken/KRUnknownManager.h index 0d929b2..05599c6 100644 --- a/KREngine/kraken/KRUnknownManager.h +++ b/KREngine/kraken/KRUnknownManager.h @@ -49,10 +49,10 @@ public: KRUnknown *get(const std::string &name, const std::string &extension); - const map &get(const std::string &extension); + const unordered_map &get(const std::string &extension); private: - map > m_unknowns; + unordered_map > m_unknowns; }; #endif /* defined(KRUNKNOWN_MANAGER_H) */ diff --git a/KREngine/kraken/KRVector2.h b/KREngine/kraken/KRVector2.h index 6af5765..ac74804 100644 --- a/KREngine/kraken/KRVector2.h +++ b/KREngine/kraken/KRVector2.h @@ -90,5 +90,18 @@ private: }; +namespace std { + template<> + struct hash { + public: + size_t operator()(const KRVector2 &s) const + { + size_t h1 = std::hash()(s.x); + size_t h2 = std::hash()(s.y); + return h1 ^ ( h2 << 1 ); + } + }; +}; + #endif diff --git a/KREngine/kraken/KRVector3.h b/KREngine/kraken/KRVector3.h index 26f7150..b33a134 100644 --- a/KREngine/kraken/KRVector3.h +++ b/KREngine/kraken/KRVector3.h @@ -96,4 +96,18 @@ public: void setUniform(GLint location) const; }; +namespace std { + template<> + struct hash { + public: + size_t operator()(const KRVector3 &s) const + { + size_t h1 = std::hash()(s.x); + size_t h2 = std::hash()(s.y); + size_t h3 = std::hash()(s.z); + return h1 ^ ( h2 << 1 ) ^ (h3 << 2); + } + }; +}; + #endif \ No newline at end of file diff --git a/KREngine/kraken/KRViewport.cpp b/KREngine/kraken/KRViewport.cpp index af155e8..13336fd 100644 --- a/KREngine/kraken/KRViewport.cpp +++ b/KREngine/kraken/KRViewport.cpp @@ -156,7 +156,7 @@ void KRViewport::calculateDerivedValues() } -std::map &KRViewport::getVisibleBounds() +std::unordered_map &KRViewport::getVisibleBounds() { return m_visibleBounds; } diff --git a/KREngine/kraken/KRViewport.h b/KREngine/kraken/KRViewport.h index eaa5e0d..c3613c7 100644 --- a/KREngine/kraken/KRViewport.h +++ b/KREngine/kraken/KRViewport.h @@ -41,7 +41,7 @@ public: // Overload assignment operator KRViewport& operator=(const KRViewport &v); - std::map &getVisibleBounds(); + std::unordered_map &getVisibleBounds(); const std::set &getVisibleLights(); void setVisibleLights(const std::set visibleLights); @@ -68,7 +68,7 @@ private: void calculateDerivedValues(); - std::map m_visibleBounds; // AABB's that output fragments in the last frame + std::unordered_map m_visibleBounds; // AABB's that output fragments in the last frame };