Separating projects into separate workspaces
--HG-- rename : KREngine/3rdparty/forsyth/forsyth.cpp => 3rdparty/forsyth/forsyth.cpp rename : KREngine/3rdparty/forsyth/forsyth.h => 3rdparty/forsyth/forsyth.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTArray.h => 3rdparty/pvrtexlib/include/PVRTArray.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTDecompress.h => 3rdparty/pvrtexlib/include/PVRTDecompress.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTError.h => 3rdparty/pvrtexlib/include/PVRTError.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTGlobal.h => 3rdparty/pvrtexlib/include/PVRTGlobal.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTMap.h => 3rdparty/pvrtexlib/include/PVRTMap.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTString.h => 3rdparty/pvrtexlib/include/PVRTString.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTTexture.h => 3rdparty/pvrtexlib/include/PVRTTexture.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTexture.h => 3rdparty/pvrtexlib/include/PVRTexture.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureDefines.h => 3rdparty/pvrtexlib/include/PVRTextureDefines.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureFormat.h => 3rdparty/pvrtexlib/include/PVRTextureFormat.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureHeader.h => 3rdparty/pvrtexlib/include/PVRTextureHeader.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureUtilities.h => 3rdparty/pvrtexlib/include/PVRTextureUtilities.h rename : KREngine/3rdparty/pvrtexlib/include/PVRTextureVersion.h => 3rdparty/pvrtexlib/include/PVRTextureVersion.h rename : KREngine/3rdparty/pvrtexlib/static_osx/libPVRTexLib.a => 3rdparty/pvrtexlib/static_osx/libPVRTexLib.a rename : KREngine/3rdparty/tinyxml2/tinyxml2.cpp => 3rdparty/tinyxml2/tinyxml2.cpp rename : KREngine/3rdparty/tinyxml2/tinyxml2.h => 3rdparty/tinyxml2/tinyxml2.h rename : KREngine/3rdparty/tinyxml2/tinyxml2_readme.txt => 3rdparty/tinyxml2/tinyxml2_readme.txt rename : KREngine/Kraken.xcodeproj/project.pbxproj => Kraken.xcodeproj/project.pbxproj rename : KREngine/Kraken.xcodeproj/project.xcworkspace/contents.xcworkspacedata => Kraken.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename : KREngine/kraken/KRAABB.cpp => kraken/KRAABB.cpp rename : KREngine/kraken/KRAABB.h => kraken/KRAABB.h rename : KREngine/kraken/KRAmbientZone.cpp => kraken/KRAmbientZone.cpp rename : KREngine/kraken/KRAmbientZone.h => kraken/KRAmbientZone.h rename : KREngine/kraken/KRAnimation.cpp => kraken/KRAnimation.cpp rename : KREngine/kraken/KRAnimation.h => kraken/KRAnimation.h rename : KREngine/kraken/KRAnimationAttribute.cpp => kraken/KRAnimationAttribute.cpp rename : KREngine/kraken/KRAnimationAttribute.h => kraken/KRAnimationAttribute.h rename : KREngine/kraken/KRAnimationCurve.cpp => kraken/KRAnimationCurve.cpp rename : KREngine/kraken/KRAnimationCurve.h => kraken/KRAnimationCurve.h rename : KREngine/kraken/KRAnimationCurveManager.cpp => kraken/KRAnimationCurveManager.cpp rename : KREngine/kraken/KRAnimationCurveManager.h => kraken/KRAnimationCurveManager.h rename : KREngine/kraken/KRAnimationLayer.cpp => kraken/KRAnimationLayer.cpp rename : KREngine/kraken/KRAnimationLayer.h => kraken/KRAnimationLayer.h rename : KREngine/kraken/KRAnimationManager.cpp => kraken/KRAnimationManager.cpp rename : KREngine/kraken/KRAnimationManager.h => kraken/KRAnimationManager.h rename : KREngine/kraken/KRAudioBuffer.cpp => kraken/KRAudioBuffer.cpp rename : KREngine/kraken/KRAudioBuffer.h => kraken/KRAudioBuffer.h rename : KREngine/kraken/KRAudioManager.cpp => kraken/KRAudioManager.cpp rename : KREngine/kraken/KRAudioManager.h => kraken/KRAudioManager.h rename : KREngine/kraken/KRAudioSample.cpp => kraken/KRAudioSample.cpp rename : KREngine/kraken/KRAudioSample.h => kraken/KRAudioSample.h rename : KREngine/kraken/KRAudioSource.cpp => kraken/KRAudioSource.cpp rename : KREngine/kraken/KRAudioSource.h => kraken/KRAudioSource.h rename : KREngine/kraken/KRBehavior.cpp => kraken/KRBehavior.cpp rename : KREngine/kraken/KRBehavior.h => kraken/KRBehavior.h rename : KREngine/kraken/KRBone.cpp => kraken/KRBone.cpp rename : KREngine/kraken/KRBone.h => kraken/KRBone.h rename : KREngine/kraken/KRBundle.cpp => kraken/KRBundle.cpp rename : KREngine/kraken/KRBundle.h => kraken/KRBundle.h rename : KREngine/kraken/KRBundleManager.cpp => kraken/KRBundleManager.cpp rename : KREngine/kraken/KRBundleManager.h => kraken/KRBundleManager.h rename : KREngine/kraken/KRCamera.cpp => kraken/KRCamera.cpp rename : KREngine/kraken/KRCamera.h => kraken/KRCamera.h rename : KREngine/kraken/KRCollider.cpp => kraken/KRCollider.cpp rename : KREngine/kraken/KRCollider.h => kraken/KRCollider.h rename : KREngine/kraken/KRContext.cpp => kraken/KRContext.cpp rename : KREngine/kraken/KRContext.h => kraken/KRContext.h rename : KREngine/kraken/KRContextObject.cpp => kraken/KRContextObject.cpp rename : KREngine/kraken/KRContextObject.h => kraken/KRContextObject.h rename : KREngine/kraken/KRDataBlock.cpp => kraken/KRDataBlock.cpp rename : KREngine/kraken/KRDataBlock.h => kraken/KRDataBlock.h rename : KREngine/kraken/KRDirectionalLight.cpp => kraken/KRDirectionalLight.cpp rename : KREngine/kraken/KRDirectionalLight.h => kraken/KRDirectionalLight.h rename : KREngine/kraken/KREngine-common.h => kraken/KREngine-common.h rename : KREngine/kraken/KREngine.h => kraken/KREngine.h rename : KREngine/kraken/KREngine.mm => kraken/KREngine.mm rename : KREngine/kraken/KRFloat.cpp => kraken/KRFloat.cpp rename : KREngine/kraken/KRFloat.h => kraken/KRFloat.h rename : KREngine/kraken/KRHitInfo.cpp => kraken/KRHitInfo.cpp rename : KREngine/kraken/KRHitInfo.h => kraken/KRHitInfo.h rename : KREngine/kraken/KRLODGroup.cpp => kraken/KRLODGroup.cpp rename : KREngine/kraken/KRLODGroup.h => kraken/KRLODGroup.h rename : KREngine/kraken/KRLODSet.cpp => kraken/KRLODSet.cpp rename : KREngine/kraken/KRLODSet.h => kraken/KRLODSet.h rename : KREngine/kraken/KRLight.cpp => kraken/KRLight.cpp rename : KREngine/kraken/KRLight.h => kraken/KRLight.h rename : KREngine/kraken/KRLocator.cpp => kraken/KRLocator.cpp rename : KREngine/kraken/KRLocator.h => kraken/KRLocator.h rename : KREngine/kraken/KRMat4.cpp => kraken/KRMat4.cpp rename : KREngine/kraken/KRMat4.h => kraken/KRMat4.h rename : KREngine/kraken/KRMaterial.cpp => kraken/KRMaterial.cpp rename : KREngine/kraken/KRMaterial.h => kraken/KRMaterial.h rename : KREngine/kraken/KRMaterialManager.cpp => kraken/KRMaterialManager.cpp rename : KREngine/kraken/KRMaterialManager.h => kraken/KRMaterialManager.h rename : KREngine/kraken/KRMesh.cpp => kraken/KRMesh.cpp rename : KREngine/kraken/KRMesh.h => kraken/KRMesh.h rename : KREngine/kraken/KRMeshCube.cpp => kraken/KRMeshCube.cpp rename : KREngine/kraken/KRMeshCube.h => kraken/KRMeshCube.h rename : KREngine/kraken/KRMeshManager.cpp => kraken/KRMeshManager.cpp rename : KREngine/kraken/KRMeshManager.h => kraken/KRMeshManager.h rename : KREngine/kraken/KRMeshQuad.cpp => kraken/KRMeshQuad.cpp rename : KREngine/kraken/KRMeshQuad.h => kraken/KRMeshQuad.h rename : KREngine/kraken/KRMeshSphere.cpp => kraken/KRMeshSphere.cpp rename : KREngine/kraken/KRMeshSphere.h => kraken/KRMeshSphere.h rename : KREngine/kraken/KRMeshStreamer.mm => kraken/KRMeshStreamer.mm rename : KREngine/kraken/KRModel.cpp => kraken/KRModel.cpp rename : KREngine/kraken/KRModel.h => kraken/KRModel.h rename : KREngine/kraken/KRNode.cpp => kraken/KRNode.cpp rename : KREngine/kraken/KRNode.h => kraken/KRNode.h rename : KREngine/kraken/KROctree.cpp => kraken/KROctree.cpp rename : KREngine/kraken/KROctree.h => kraken/KROctree.h rename : KREngine/kraken/KROctreeNode.cpp => kraken/KROctreeNode.cpp rename : KREngine/kraken/KROctreeNode.h => kraken/KROctreeNode.h rename : KREngine/kraken/KRParticleSystem.cpp => kraken/KRParticleSystem.cpp rename : KREngine/kraken/KRParticleSystem.h => kraken/KRParticleSystem.h rename : KREngine/kraken/KRParticleSystemNewtonian.cpp => kraken/KRParticleSystemNewtonian.cpp rename : KREngine/kraken/KRParticleSystemNewtonian.h => kraken/KRParticleSystemNewtonian.h rename : KREngine/kraken/KRPointLight.cpp => kraken/KRPointLight.cpp rename : KREngine/kraken/KRPointLight.h => kraken/KRPointLight.h rename : KREngine/kraken/KRQuaternion.cpp => kraken/KRQuaternion.cpp rename : KREngine/kraken/KRQuaternion.h => kraken/KRQuaternion.h rename : KREngine/kraken/KRRenderSettings.cpp => kraken/KRRenderSettings.cpp rename : KREngine/kraken/KRRenderSettings.h => kraken/KRRenderSettings.h rename : KREngine/kraken/KRResource+blend.cpp => kraken/KRResource+blend.cpp rename : KREngine/kraken/KRResource+blend.h => kraken/KRResource+blend.h rename : KREngine/kraken/KRResource+fbx.cpp => kraken/KRResource+fbx.cpp rename : KREngine/kraken/KRResource+obj.cpp => kraken/KRResource+obj.cpp rename : KREngine/kraken/KRResource.cpp => kraken/KRResource.cpp rename : KREngine/kraken/KRResource.h => kraken/KRResource.h rename : KREngine/kraken/KRReverbZone.cpp => kraken/KRReverbZone.cpp rename : KREngine/kraken/KRReverbZone.h => kraken/KRReverbZone.h rename : KREngine/kraken/KRScene.cpp => kraken/KRScene.cpp rename : KREngine/kraken/KRScene.h => kraken/KRScene.h rename : KREngine/kraken/KRSceneManager.cpp => kraken/KRSceneManager.cpp rename : KREngine/kraken/KRSceneManager.h => kraken/KRSceneManager.h rename : KREngine/kraken/KRShader.cpp => kraken/KRShader.cpp rename : KREngine/kraken/KRShader.h => kraken/KRShader.h rename : KREngine/kraken/KRShaderManager.cpp => kraken/KRShaderManager.cpp rename : KREngine/kraken/KRShaderManager.h => kraken/KRShaderManager.h rename : KREngine/kraken/KRSpotLight.cpp => kraken/KRSpotLight.cpp rename : KREngine/kraken/KRSpotLight.h => kraken/KRSpotLight.h rename : KREngine/kraken/KRSprite.cpp => kraken/KRSprite.cpp rename : KREngine/kraken/KRSprite.h => kraken/KRSprite.h rename : KREngine/kraken/KRStockGeometry.h => kraken/KRStockGeometry.h rename : KREngine/kraken/KRStreamer.h => kraken/KRStreamer.h rename : KREngine/kraken/KRStreamer.mm => kraken/KRStreamer.mm rename : KREngine/kraken/KRTexture.cpp => kraken/KRTexture.cpp rename : KREngine/kraken/KRTexture.h => kraken/KRTexture.h rename : KREngine/kraken/KRTexture2D.cpp => kraken/KRTexture2D.cpp rename : KREngine/kraken/KRTexture2D.h => kraken/KRTexture2D.h rename : KREngine/kraken/KRTextureAnimated.cpp => kraken/KRTextureAnimated.cpp rename : KREngine/kraken/KRTextureAnimated.h => kraken/KRTextureAnimated.h rename : KREngine/kraken/KRTextureCube.cpp => kraken/KRTextureCube.cpp rename : KREngine/kraken/KRTextureCube.h => kraken/KRTextureCube.h rename : KREngine/kraken/KRTextureKTX.cpp => kraken/KRTextureKTX.cpp rename : KREngine/kraken/KRTextureKTX.h => kraken/KRTextureKTX.h rename : KREngine/kraken/KRTextureManager.cpp => kraken/KRTextureManager.cpp rename : KREngine/kraken/KRTextureManager.h => kraken/KRTextureManager.h rename : KREngine/kraken/KRTexturePVR.cpp => kraken/KRTexturePVR.cpp rename : KREngine/kraken/KRTexturePVR.h => kraken/KRTexturePVR.h rename : KREngine/kraken/KRTextureStreamer.mm => kraken/KRTextureStreamer.mm rename : KREngine/kraken/KRTextureTGA.cpp => kraken/KRTextureTGA.cpp rename : KREngine/kraken/KRTextureTGA.h => kraken/KRTextureTGA.h rename : KREngine/kraken/KRTriangle3.cpp => kraken/KRTriangle3.cpp rename : KREngine/kraken/KRTriangle3.h => kraken/KRTriangle3.h rename : KREngine/kraken/KRUnknown.cpp => kraken/KRUnknown.cpp rename : KREngine/kraken/KRUnknown.h => kraken/KRUnknown.h rename : KREngine/kraken/KRUnknownManager.cpp => kraken/KRUnknownManager.cpp rename : KREngine/kraken/KRUnknownManager.h => kraken/KRUnknownManager.h rename : KREngine/kraken/KRVector2.cpp => kraken/KRVector2.cpp rename : KREngine/kraken/KRVector2.h => kraken/KRVector2.h rename : KREngine/kraken/KRVector3.cpp => kraken/KRVector3.cpp rename : KREngine/kraken/KRVector3.h => kraken/KRVector3.h rename : KREngine/kraken/KRVector4.cpp => kraken/KRVector4.cpp rename : KREngine/kraken/KRVector4.h => kraken/KRVector4.h rename : KREngine/kraken/KRViewport.cpp => kraken/KRViewport.cpp rename : KREngine/kraken/KRViewport.h => kraken/KRViewport.h rename : KREngine/kraken_ios/Kraken-Prefix.pch => kraken_ios/Kraken-Prefix.pch rename : KREngine/kraken_osx/Kraken-Info.plist => kraken_osx/Kraken-Info.plist rename : KRWorldBuilder/KRWorldBuilder/en.lproj/InfoPlist.strings => kraken_osx/en.lproj/InfoPlist.strings rename : KREngine/kraken_osx/kraken-prefix.pch => kraken_osx/kraken-prefix.pch rename : KREngine/kraken_osx/krengine_osx.h => kraken_osx/krengine_osx.h rename : KREngine/kraken_osx/krengine_osx.mm => kraken_osx/krengine_osx.mm rename : KREngine/kraken_standard_assets/hrtf_kemar.krbundle => kraken_standard_assets/hrtf_kemar.krbundle rename : KREngine/kraken_standard_assets_osx/Resources-Info.plist => kraken_standard_assets_ios/Resources-Info.plist rename : KREngine/kraken_standard_assets_ios/Shaders/ObjectShader.fsh => kraken_standard_assets_ios/Shaders/ObjectShader.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/ObjectShader.vsh => kraken_standard_assets_ios/Shaders/ObjectShader.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/PostShader.fsh => kraken_standard_assets_ios/Shaders/PostShader.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/PostShader_osx.vsh => kraken_standard_assets_ios/Shaders/PostShader.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/ShadowShader_osx.fsh => kraken_standard_assets_ios/Shaders/ShadowShader.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/ShadowShader.vsh => kraken_standard_assets_ios/Shaders/ShadowShader.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/debug_font.fsh => kraken_standard_assets_ios/Shaders/debug_font.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/debug_font_osx.vsh => kraken_standard_assets_ios/Shaders/debug_font.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/dust_particle.fsh => kraken_standard_assets_ios/Shaders/dust_particle.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.vsh => kraken_standard_assets_ios/Shaders/dust_particle.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/flare.fsh => kraken_standard_assets_ios/Shaders/flare.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/flare.vsh => kraken_standard_assets_ios/Shaders/flare.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_directional_osx.fsh => kraken_standard_assets_ios/Shaders/light_directional.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh => kraken_standard_assets_ios/Shaders/light_directional.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_osx.fsh => kraken_standard_assets_ios/Shaders/light_point.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_osx.vsh => kraken_standard_assets_ios/Shaders/light_point.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.fsh => kraken_standard_assets_ios/Shaders/light_point_inside.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh => kraken_standard_assets_ios/Shaders/light_point_inside.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/occlusion_test.fsh => kraken_standard_assets_ios/Shaders/occlusion_test.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/occlusion_test.vsh => kraken_standard_assets_ios/Shaders/occlusion_test.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/simple_blit_osx.fsh => kraken_standard_assets_ios/Shaders/simple_blit.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/simple_blit.vsh => kraken_standard_assets_ios/Shaders/simple_blit.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/sky_box.fsh => kraken_standard_assets_ios/Shaders/sky_box.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/sky_box.vsh => kraken_standard_assets_ios/Shaders/sky_box.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/sprite_osx.fsh => kraken_standard_assets_ios/Shaders/sprite.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/sprite_osx.vsh => kraken_standard_assets_ios/Shaders/sprite.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/visualize_overlay_osx.fsh => kraken_standard_assets_ios/Shaders/visualize_overlay.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/visualize_overlay.vsh => kraken_standard_assets_ios/Shaders/visualize_overlay.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/volumetric_fog.fsh => kraken_standard_assets_ios/Shaders/volumetric_fog.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.vsh => kraken_standard_assets_ios/Shaders/volumetric_fog.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.fsh => kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.vsh => kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.vsh rename : KREngine/kraken_standard_assets_ios/font.pvr => kraken_standard_assets_ios/font.pvr rename : KREngine/kraken_standard_assets_osx/Resources-Info.plist => kraken_standard_assets_osx/Resources-Info.plist rename : KREngine/kraken_standard_assets_osx/Shaders/ObjectShader_osx.fsh => kraken_standard_assets_osx/Shaders/ObjectShader_osx.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/ObjectShader.vsh => kraken_standard_assets_osx/Shaders/ObjectShader_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/PostShader_osx.fsh => kraken_standard_assets_osx/Shaders/PostShader_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/PostShader_osx.vsh => kraken_standard_assets_osx/Shaders/PostShader_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/ShadowShader_osx.fsh => kraken_standard_assets_osx/Shaders/ShadowShader_osx.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/ShadowShader.vsh => kraken_standard_assets_osx/Shaders/ShadowShader_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/debug_font_osx.fsh => kraken_standard_assets_osx/Shaders/debug_font_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/debug_font_osx.vsh => kraken_standard_assets_osx/Shaders/debug_font_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.fsh => kraken_standard_assets_osx/Shaders/dust_particle_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/dust_particle_osx.vsh => kraken_standard_assets_osx/Shaders/dust_particle_osx.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/flare.fsh => kraken_standard_assets_osx/Shaders/flare_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/flare_osx.vsh => kraken_standard_assets_osx/Shaders/flare_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_directional_osx.fsh => kraken_standard_assets_osx/Shaders/light_directional_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh => kraken_standard_assets_osx/Shaders/light_directional_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.fsh => kraken_standard_assets_osx/Shaders/light_point_inside_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh => kraken_standard_assets_osx/Shaders/light_point_inside_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_osx.fsh => kraken_standard_assets_osx/Shaders/light_point_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/light_point_osx.vsh => kraken_standard_assets_osx/Shaders/light_point_osx.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/occlusion_test.fsh => kraken_standard_assets_osx/Shaders/occlusion_test_osx.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/occlusion_test.vsh => kraken_standard_assets_osx/Shaders/occlusion_test_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/simple_blit_osx.fsh => kraken_standard_assets_osx/Shaders/simple_blit_osx.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/simple_blit.vsh => kraken_standard_assets_osx/Shaders/simple_blit_osx.vsh rename : KREngine/kraken_standard_assets_ios/Shaders/sky_box.fsh => kraken_standard_assets_osx/Shaders/sky_box_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/sky_box_osx.vsh => kraken_standard_assets_osx/Shaders/sky_box_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/sprite_osx.fsh => kraken_standard_assets_osx/Shaders/sprite_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/sprite_osx.vsh => kraken_standard_assets_osx/Shaders/sprite_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/visualize_overlay_osx.fsh => kraken_standard_assets_osx/Shaders/visualize_overlay_osx.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/visualize_overlay.vsh => kraken_standard_assets_osx/Shaders/visualize_overlay_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.fsh => kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.fsh rename : KREngine/kraken_standard_assets_ios/Shaders/volumetric_fog_downsampled.vsh => kraken_standard_assets_osx/Shaders/volumetric_fog_downsampled_osx.vsh rename : KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.fsh => kraken_standard_assets_osx/Shaders/volumetric_fog_osx.fsh rename : KREngine/kraken_standard_assets_osx/Shaders/volumetric_fog_osx.vsh => kraken_standard_assets_osx/Shaders/volumetric_fog_osx.vsh rename : KREngine/kraken_standard_assets_osx/font.tga => kraken_standard_assets_osx/font.tga
This commit is contained in:
484
kraken/KRTextureManager.cpp
Normal file
484
kraken/KRTextureManager.cpp
Normal file
@@ -0,0 +1,484 @@
|
||||
//
|
||||
// KRTextureManager.cpp
|
||||
// KREngine
|
||||
//
|
||||
// Copyright 2012 Kearwood Gilbert. All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without modification, are
|
||||
// permitted provided that the following conditions are met:
|
||||
//
|
||||
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
// conditions and the following disclaimer.
|
||||
//
|
||||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
// of conditions and the following disclaimer in the documentation and/or other materials
|
||||
// provided with the distribution.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY KEARWOOD GILBERT ''AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KEARWOOD GILBERT OR
|
||||
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
//
|
||||
// The views and conclusions contained in the software and documentation are those of the
|
||||
// authors and should not be interpreted as representing official policies, either expressed
|
||||
// or implied, of Kearwood Gilbert.
|
||||
//
|
||||
|
||||
#include "KREngine-common.h"
|
||||
#include "KRTextureManager.h"
|
||||
#include "KRContext.h"
|
||||
#include "KRTexture2D.h"
|
||||
#include "KRTexturePVR.h"
|
||||
#include "KRTextureTGA.h"
|
||||
#include "KRTextureKTX.h"
|
||||
#include "KRTextureCube.h"
|
||||
#include "KRTextureAnimated.h"
|
||||
#include "KRContext.h"
|
||||
|
||||
KRTextureManager::KRTextureManager(KRContext &context) : KRContextObject(context) {
|
||||
m_textureMemUsed = 0;
|
||||
|
||||
for(int iTexture=0; iTexture<KRENGINE_MAX_TEXTURE_UNITS; iTexture++) {
|
||||
m_boundTextures[iTexture] = NULL;
|
||||
m_boundTextureHandles[iTexture] = 0;
|
||||
}
|
||||
m_memoryTransferredThisFrame = 0;
|
||||
m_streamerComplete = true;
|
||||
|
||||
_clearGLState();
|
||||
}
|
||||
|
||||
KRTextureManager::~KRTextureManager() {
|
||||
for(unordered_map<std::string, KRTexture *>::iterator itr = m_textures.begin(); itr != m_textures.end(); ++itr){
|
||||
delete (*itr).second;
|
||||
}
|
||||
}
|
||||
|
||||
void KRTextureManager::_clearGLState()
|
||||
{
|
||||
for(int i=0; i < KRENGINE_MAX_TEXTURE_UNITS; i++) {
|
||||
m_wrapModeS[i] = 0;
|
||||
m_wrapModeT[i] = 0;
|
||||
m_maxAnisotropy[i] = -1.0f;
|
||||
selectTexture(i, NULL, 0.0f, KRTexture::TEXTURE_USAGE_NONE);
|
||||
}
|
||||
|
||||
m_iActiveTexture = -1;
|
||||
}
|
||||
|
||||
void KRTextureManager::_setActiveTexture(int i)
|
||||
{
|
||||
if(m_iActiveTexture != i) {
|
||||
m_iActiveTexture = i;
|
||||
GLDEBUG(glActiveTexture(GL_TEXTURE0 + i));
|
||||
}
|
||||
}
|
||||
|
||||
void KRTextureManager::_setWrapModeS(GLuint i, GLuint wrap_mode)
|
||||
{
|
||||
if(m_wrapModeS[i] != wrap_mode) {
|
||||
_setActiveTexture(i);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_mode);
|
||||
m_wrapModeS[i] = wrap_mode;
|
||||
}
|
||||
}
|
||||
|
||||
void KRTextureManager::_setMaxAnisotropy(int i, float max_anisotropy)
|
||||
{
|
||||
if(m_maxAnisotropy[i] != max_anisotropy) {
|
||||
_setActiveTexture(i);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy);
|
||||
m_maxAnisotropy[i] = max_anisotropy;
|
||||
}
|
||||
}
|
||||
|
||||
void KRTextureManager::setMaxAnisotropy(float max_anisotropy)
|
||||
{
|
||||
for(int i=0; i < KRENGINE_MAX_TEXTURE_UNITS; i++) {
|
||||
_setMaxAnisotropy(i, max_anisotropy);
|
||||
}
|
||||
}
|
||||
|
||||
void KRTextureManager::_setWrapModeT(GLuint i, GLuint wrap_mode)
|
||||
{
|
||||
if(m_wrapModeT[i] != wrap_mode) {
|
||||
_setActiveTexture(i);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_mode);
|
||||
m_wrapModeT[i] = wrap_mode;
|
||||
}
|
||||
}
|
||||
|
||||
KRTexture *KRTextureManager::loadTexture(const char *szName, const char *szExtension, KRDataBlock *data) {
|
||||
KRTexture *pTexture = NULL;
|
||||
|
||||
std::string lowerName = szName;
|
||||
std::transform(lowerName.begin(), lowerName.end(),
|
||||
lowerName.begin(), ::tolower);
|
||||
|
||||
std::string lowerExtension = szExtension;
|
||||
std::transform(lowerExtension.begin(), lowerExtension.end(),
|
||||
lowerExtension.begin(), ::tolower);
|
||||
|
||||
|
||||
if(strcmp(szExtension, "pvr") == 0) {
|
||||
pTexture = new KRTexturePVR(getContext(), data, szName);
|
||||
} else if(strcmp(szExtension, "tga") == 0) {
|
||||
pTexture = new KRTextureTGA(getContext(), data, szName);
|
||||
} else if(strcmp(szExtension, "ktx") == 0) {
|
||||
pTexture = new KRTextureKTX(getContext(), data, szName);
|
||||
}
|
||||
|
||||
if(pTexture) {
|
||||
m_textures[lowerName] = pTexture;
|
||||
}
|
||||
return pTexture;
|
||||
}
|
||||
|
||||
KRTexture *KRTextureManager::getTextureCube(const char *szName) {
|
||||
std::string lowerName = szName;
|
||||
std::transform(lowerName.begin(), lowerName.end(),
|
||||
lowerName.begin(), ::tolower);
|
||||
|
||||
unordered_map<std::string, KRTexture *>::iterator itr = m_textures.find(lowerName);
|
||||
if(itr == m_textures.end()) {
|
||||
|
||||
// Defer resolving the texture cube until its referenced textures are ready
|
||||
const GLenum TARGETS[6] = {
|
||||
GL_TEXTURE_CUBE_MAP_POSITIVE_X,
|
||||
GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
|
||||
GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
|
||||
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
|
||||
GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
|
||||
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
|
||||
};
|
||||
|
||||
const char *SUFFIXES[6] = {
|
||||
"_positive_x",
|
||||
"_negative_x",
|
||||
"_positive_y",
|
||||
"_negative_y",
|
||||
"_positive_z",
|
||||
"_negative_z"
|
||||
};
|
||||
bool found_all = true;
|
||||
for(int i=0; i<6; i++) {
|
||||
std::string faceName = lowerName + SUFFIXES[i];
|
||||
KRTexture *faceTexture = dynamic_cast<KRTexture2D *>(getContext().getTextureManager()->getTexture(faceName));
|
||||
if(faceTexture == NULL) {
|
||||
found_all = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(found_all) {
|
||||
KRTextureCube *pTexture = new KRTextureCube(getContext(), lowerName);
|
||||
|
||||
m_textures[lowerName] = pTexture;
|
||||
return pTexture;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
return (*itr).second;
|
||||
}
|
||||
}
|
||||
|
||||
KRTexture *KRTextureManager::getTexture(const std::string &name) {
|
||||
|
||||
std::string lowerName = name;
|
||||
std::transform(lowerName.begin(), lowerName.end(),
|
||||
lowerName.begin(), ::tolower);
|
||||
|
||||
unordered_map<std::string, KRTexture *>::iterator itr = m_textures.find(lowerName);
|
||||
if(itr == m_textures.end()) {
|
||||
if(lowerName.length() <= 8) {
|
||||
return NULL;
|
||||
} else if(lowerName.compare(0, 8, "animate:", 0, 8) == 0) {
|
||||
// This is an animated texture, create KRTextureAnimated's on-demand
|
||||
KRTextureAnimated *pTexture = new KRTextureAnimated(getContext(), lowerName);
|
||||
m_textures[lowerName] = pTexture;
|
||||
return pTexture;
|
||||
} else {
|
||||
// Not found
|
||||
// fprintf(stderr, "ERROR: Texture not found: %s\n", name.c_str());
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
return (*itr).second;
|
||||
}
|
||||
}
|
||||
|
||||
void KRTextureManager::selectTexture(int iTextureUnit, KRTexture *pTexture, float lod_coverage, KRTexture::texture_usage_t textureUsage) {
|
||||
bool is_animated = false;
|
||||
if(pTexture) {
|
||||
pTexture->resetPoolExpiry(lod_coverage, textureUsage);
|
||||
if(pTexture->isAnimated()) is_animated = true;
|
||||
}
|
||||
|
||||
if(m_boundTextures[iTextureUnit] != pTexture || is_animated) {
|
||||
|
||||
if(pTexture != NULL) {
|
||||
_setActiveTexture(iTextureUnit);
|
||||
pTexture->bind(iTextureUnit);
|
||||
} else {
|
||||
selectTexture(GL_TEXTURE_2D, iTextureUnit, 0);
|
||||
}
|
||||
m_boundTextures[iTextureUnit] = pTexture;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool KRTextureManager::selectTexture(GLenum target, int iTextureUnit, int iTextureHandle)
|
||||
{
|
||||
if(m_boundTextureHandles[iTextureUnit] != iTextureHandle) {
|
||||
m_boundTextureHandles[iTextureUnit] = iTextureHandle;
|
||||
_setActiveTexture(iTextureUnit);
|
||||
glBindTexture(target, iTextureHandle);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
long KRTextureManager::getMemUsed() {
|
||||
return m_textureMemUsed;
|
||||
}
|
||||
|
||||
long KRTextureManager::getMemActive() {
|
||||
long mem_active = 0;
|
||||
for(std::set<KRTexture *>::iterator itr=m_activeTextures.begin(); itr != m_activeTextures.end(); itr++) {
|
||||
KRTexture *activeTexture = *itr;
|
||||
mem_active += activeTexture->getMemSize();
|
||||
}
|
||||
|
||||
return mem_active;
|
||||
}
|
||||
|
||||
void KRTextureManager::startFrame(float deltaTime)
|
||||
{
|
||||
_clearGLState();
|
||||
|
||||
// TODO - Implement proper double-buffering to reduce copy operations
|
||||
m_streamerFenceMutex.lock();
|
||||
|
||||
if(m_streamerComplete) {
|
||||
assert(m_activeTextures_streamer_copy.size() == 0); // The streamer should have emptied this if it really did complete
|
||||
|
||||
const long KRENGINE_TEXTURE_EXPIRY_FRAMES = 10;
|
||||
|
||||
std::set<KRTexture *> expiredTextures;
|
||||
for(std::set<KRTexture *>::iterator itr=m_activeTextures.begin(); itr != m_activeTextures.end(); itr++) {
|
||||
KRTexture *activeTexture = *itr;
|
||||
activeTexture->_swapHandles();
|
||||
if(activeTexture->getLastFrameUsed() + KRENGINE_TEXTURE_EXPIRY_FRAMES < getContext().getCurrentFrame()) {
|
||||
// Expire textures that haven't been used in a long time
|
||||
expiredTextures.insert(activeTexture);
|
||||
activeTexture->releaseHandles();
|
||||
} else {
|
||||
float priority = activeTexture->getStreamPriority();
|
||||
m_activeTextures_streamer_copy.push_back(std::pair<float, KRTexture *>(priority, activeTexture));
|
||||
}
|
||||
}
|
||||
for(std::set<KRTexture *>::iterator itr=expiredTextures.begin(); itr != expiredTextures.end(); itr++) {
|
||||
m_activeTextures.erase(*itr);
|
||||
}
|
||||
|
||||
if(m_activeTextures_streamer_copy.size() > 0) {
|
||||
m_streamerComplete = false;
|
||||
}
|
||||
}
|
||||
|
||||
m_streamerFenceMutex.unlock();
|
||||
|
||||
m_memoryTransferredThisFrame = 0;
|
||||
}
|
||||
|
||||
void KRTextureManager::endFrame(float deltaTime)
|
||||
{
|
||||
for(int iTexture=0; iTexture < KRENGINE_MAX_TEXTURE_UNITS; iTexture++) {
|
||||
if(m_boundTextures[iTexture]) {
|
||||
m_boundTextures[iTexture]->resetPoolExpiry(0.0f, KRTexture::TEXTURE_USAGE_NONE); // Even if the same texture is bound, ensure that they don't expire from the texture pool while in use
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KRTextureManager::doStreaming(long &memoryRemaining, long &memoryRemainingThisFrame)
|
||||
{
|
||||
|
||||
// TODO - Implement proper double-buffering to reduce copy operations
|
||||
m_streamerFenceMutex.lock();
|
||||
m_activeTextures_streamer = std::move(m_activeTextures_streamer_copy);
|
||||
m_streamerFenceMutex.unlock();
|
||||
|
||||
if(m_activeTextures_streamer.size() > 0) {
|
||||
balanceTextureMemory(memoryRemaining, memoryRemainingThisFrame);
|
||||
|
||||
m_streamerFenceMutex.lock();
|
||||
m_streamerComplete = true;
|
||||
m_streamerFenceMutex.unlock();
|
||||
} else {
|
||||
memoryRemaining -= getMemUsed();
|
||||
}
|
||||
}
|
||||
|
||||
void KRTextureManager::balanceTextureMemory(long &memoryRemaining, long &memoryRemainingThisFrame)
|
||||
{
|
||||
// Balance texture memory by reducing and increasing the maximum mip-map level of both active and inactive textures
|
||||
// Favour performance over maximum texture resolution when memory is insufficient for textures at full resolution.
|
||||
|
||||
/*
|
||||
NEW ALGORITHM:
|
||||
|
||||
Textures are assigned a “weight” by tuneable criteria:
|
||||
- Area of screen coverage taken by objects containing material (more accurate and generic than distance)
|
||||
- Type of texture (separate weight for normal, diffuse, spec maps)
|
||||
- Last used time (to keep textures loaded for recently seen objects that are outside of the view frustum)
|
||||
Those factors combine together to give a “weight”, which represents a proportion relative to all other textures weights
|
||||
Mipmap levels are stripped off of each texture until they occupy the amount of memory they should proportionally have
|
||||
This is in contrast to the global ceiling of texture resolution that slowly drops until the textures fit
|
||||
|
||||
*/
|
||||
|
||||
// ---------------
|
||||
|
||||
//long MAX_STREAM_TIME = 66;
|
||||
//long startTime = getContext().getAbsoluteTimeMilliseconds();
|
||||
|
||||
std::sort(m_activeTextures_streamer.begin(), m_activeTextures_streamer.end(), std::greater<std::pair<float, KRTexture *>>());
|
||||
|
||||
for(auto itr=m_activeTextures_streamer.begin(); itr != m_activeTextures_streamer.end(); itr++) {
|
||||
KRTexture *texture = (*itr).second;
|
||||
int min_mip_level = KRMAX(getContext().KRENGINE_MIN_TEXTURE_DIM, texture->getMinMipMap());
|
||||
long minLodMem = texture->getMemRequiredForSize(min_mip_level);
|
||||
memoryRemaining -= minLodMem;
|
||||
|
||||
if(memoryRemainingThisFrame > minLodMem && texture->getNewLodMaxDim() < min_mip_level) {
|
||||
memoryRemainingThisFrame -= minLodMem;
|
||||
texture->resize(min_mip_level);
|
||||
}
|
||||
}
|
||||
|
||||
//long minMipTime = getContext().getAbsoluteTimeMilliseconds() - startTime;
|
||||
|
||||
std::vector<int> mipPercents = {75, 75, 50, 50, 50};
|
||||
int mip_drop = -1;
|
||||
auto mip_itr = mipPercents.begin();
|
||||
long memoryRemainingThisMip = 0;
|
||||
|
||||
for(auto itr=m_activeTextures_streamer.begin(); itr != m_activeTextures_streamer.end(); itr++) {
|
||||
if(memoryRemainingThisMip <= 0) {
|
||||
if(mip_itr == mipPercents.end()) {
|
||||
break;
|
||||
} else {
|
||||
memoryRemainingThisMip = memoryRemaining / 100L * (long)(*mip_itr);
|
||||
mip_drop++;
|
||||
mip_itr++;
|
||||
}
|
||||
}
|
||||
|
||||
KRTexture *texture = (*itr).second;
|
||||
int min_mip_level = KRMAX(getContext().KRENGINE_MIN_TEXTURE_DIM, texture->getMinMipMap());
|
||||
int max_mip_level = KRMIN(getContext().KRENGINE_MAX_TEXTURE_DIM, texture->getMaxMipMap());
|
||||
int target_mip_level = (max_mip_level >> mip_drop);
|
||||
long targetMem = texture->getMemRequiredForSize(target_mip_level);
|
||||
long additionalMemRequired = targetMem - texture->getMemRequiredForSize(min_mip_level);
|
||||
memoryRemainingThisMip -= additionalMemRequired;
|
||||
memoryRemaining -= additionalMemRequired;
|
||||
if(memoryRemainingThisMip > 0 && memoryRemainingThisFrame > targetMem) {
|
||||
int current_mip_level = texture->getNewLodMaxDim();
|
||||
if(current_mip_level == (target_mip_level >> 1) || target_mip_level < current_mip_level) {
|
||||
memoryRemainingThisFrame -= targetMem;
|
||||
texture->resize(target_mip_level);
|
||||
} else if(current_mip_level == (target_mip_level >> 2)) {
|
||||
memoryRemainingThisFrame -= texture->getMemRequiredForSize(target_mip_level >> 1);
|
||||
texture->resize(target_mip_level >> 1);
|
||||
} else if(current_mip_level < (target_mip_level >> 2)) {
|
||||
memoryRemainingThisFrame -= texture->getMemRequiredForSize(target_mip_level >> 2);
|
||||
texture->resize(target_mip_level >> 2);
|
||||
}
|
||||
}
|
||||
|
||||
//if(getContext().getAbsoluteTimeMilliseconds() - startTime > MAX_STREAM_TIME) {
|
||||
// return; // Bail out early if we spend too long
|
||||
//}
|
||||
}
|
||||
|
||||
glFlush();
|
||||
|
||||
//long streamerTime = getContext().getAbsoluteTimeMilliseconds() - startTime;
|
||||
//fprintf(stderr, "%i / %i\n", (int)minMipTime, (int)streamerTime);
|
||||
|
||||
}
|
||||
|
||||
long KRTextureManager::getMemoryTransferedThisFrame()
|
||||
{
|
||||
return m_memoryTransferredThisFrame;
|
||||
}
|
||||
|
||||
void KRTextureManager::addMemoryTransferredThisFrame(long memoryTransferred)
|
||||
{
|
||||
m_memoryTransferredThisFrame += memoryTransferred;
|
||||
}
|
||||
|
||||
void KRTextureManager::memoryChanged(long memoryDelta)
|
||||
{
|
||||
m_textureMemUsed += memoryDelta;
|
||||
//fprintf(stderr, "Texture Memory: %ld / %i\n", (long)m_textureMemUsed, KRContext::KRENGINE_GPU_MEM_MAX);
|
||||
}
|
||||
|
||||
unordered_map<std::string, KRTexture *> &KRTextureManager::getTextures()
|
||||
{
|
||||
return m_textures;
|
||||
}
|
||||
|
||||
void KRTextureManager::compress(bool premultiply_alpha)
|
||||
{
|
||||
std::vector<KRTexture *> textures_to_remove;
|
||||
std::vector<KRTexture *> textures_to_add;
|
||||
|
||||
for(unordered_map<std::string, KRTexture *>::iterator itr=m_textures.begin(); itr != m_textures.end(); itr++) {
|
||||
KRTexture *texture = (*itr).second;
|
||||
KRTexture *compressed_texture = texture->compress(premultiply_alpha);
|
||||
if(compressed_texture) {
|
||||
textures_to_remove.push_back(texture);
|
||||
textures_to_add.push_back(compressed_texture);
|
||||
} else {
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
|
||||
for(std::vector<KRTexture *>::iterator itr = textures_to_remove.begin(); itr != textures_to_remove.end(); itr++) {
|
||||
KRTexture *texture = *itr;
|
||||
std::string lowerName = texture->getName();
|
||||
std::transform(lowerName.begin(), lowerName.end(),
|
||||
lowerName.begin(), ::tolower);
|
||||
m_textures.erase(lowerName);
|
||||
delete texture;
|
||||
}
|
||||
|
||||
for(std::vector<KRTexture *>::iterator itr = textures_to_add.begin(); itr != textures_to_add.end(); itr++) {
|
||||
KRTexture *texture = *itr;
|
||||
std::string lowerName = texture->getName();
|
||||
std::transform(lowerName.begin(), lowerName.end(),
|
||||
lowerName.begin(), ::tolower);
|
||||
m_textures[lowerName] = texture;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::set<KRTexture *> &KRTextureManager::getActiveTextures()
|
||||
{
|
||||
return m_activeTextures;
|
||||
}
|
||||
|
||||
void KRTextureManager::primeTexture(KRTexture *texture)
|
||||
{
|
||||
if(m_activeTextures.find(texture) == m_activeTextures.end()) {
|
||||
m_activeTextures.insert(texture);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user