From f847b89f5a2d0afbe512bd10894c327bec0a8cc8 Mon Sep 17 00:00:00 2001 From: kearwood Date: Thu, 12 Apr 2012 19:43:08 +0000 Subject: [PATCH] Implemented KRContext class to reduce the parameter count of method calls --HG-- extra : convert_revision : svn%3A7752d6cf-9f14-4ad2-affc-04f1e67b81a5/trunk%4041 --- KREngine/KREngine.xcodeproj/project.pbxproj | 58 ++++++++----- .../KREngine/Classes/KRBoundingVolume.cpp | 4 +- KREngine/KREngine/Classes/KRBoundingVolume.h | 3 +- KREngine/KREngine/Classes/KRContext.cpp | 81 +++++++++++++++++++ KREngine/KREngine/Classes/KRContext.h | 39 +++++++++ KREngine/KREngine/Classes/KREngine.h | 16 +--- KREngine/KREngine/Classes/KREngine.mm | 75 ++++------------- KREngine/KREngine/Classes/KRInstance.cpp | 19 ++--- KREngine/KREngine/Classes/KRInstance.h | 7 +- KREngine/KREngine/Classes/KRMaterial.cpp | 14 ++-- KREngine/KREngine/Classes/KRMaterial.h | 3 +- KREngine/KREngine/Classes/KRModel.cpp | 33 ++++---- KREngine/KREngine/Classes/KRModel.h | 7 +- KREngine/KREngine/Classes/KRModelManager.cpp | 8 +- KREngine/KREngine/Classes/KRModelManager.h | 6 +- KREngine/KREngine/Classes/KRNode.cpp | 14 ++-- KREngine/KREngine/Classes/KRNode.h | 7 +- KREngine/KREngine/Classes/KRScene.cpp | 8 +- KREngine/KREngine/Classes/KRScene.h | 4 +- KREngine/KREngine/Classes/KRSceneManager.cpp | 3 +- KREngine/KREngine/Classes/KRSceneManager.h | 2 +- objview/Classes/KRObjViewGLView.mm | 70 ++++++++-------- 22 files changed, 295 insertions(+), 186 deletions(-) create mode 100644 KREngine/KREngine/Classes/KRContext.cpp create mode 100644 KREngine/KREngine/Classes/KRContext.h diff --git a/KREngine/KREngine.xcodeproj/project.pbxproj b/KREngine/KREngine.xcodeproj/project.pbxproj index 2b5d3ed..871dc69 100644 --- a/KREngine/KREngine.xcodeproj/project.pbxproj +++ b/KREngine/KREngine.xcodeproj/project.pbxproj @@ -30,7 +30,6 @@ E461A176152E5C5600F2044A /* KRPointLight.h in Headers */ = {isa = PBXBuildFile; fileRef = E461A157152E555400F2044A /* KRPointLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; E461A177152E5C6600F2044A /* KRMat4.h in Headers */ = {isa = PBXBuildFile; fileRef = E491017613C99BDC0098455B /* KRMat4.h */; settings = {ATTRIBUTES = (Public, ); }; }; E461A17A152E5C9100F2044A /* KRMat4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E491017713C99BDC0098455B /* KRMat4.cpp */; }; - E46C214415364BC8009CABF3 /* tinyxml2_readme.txt in Resources */ = {isa = PBXBuildFile; fileRef = E46C214115364BC8009CABF3 /* tinyxml2_readme.txt */; }; E46C214515364BC8009CABF3 /* tinyxml2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E46C214215364BC8009CABF3 /* tinyxml2.cpp */; }; E46C214615364BC8009CABF3 /* tinyxml2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E46C214215364BC8009CABF3 /* tinyxml2.cpp */; }; E46C214715364BC8009CABF3 /* tinyxml2.h in Headers */ = {isa = PBXBuildFile; fileRef = E46C214315364BC8009CABF3 /* tinyxml2.h */; }; @@ -48,6 +47,10 @@ E47C25A913F4F6DD00FF4370 /* KRShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E47C25A813F4F6DD00FF4370 /* KRShader.cpp */; }; E48B3CBD14393DF5000C50E2 /* KRCamera.h in Headers */ = {isa = PBXBuildFile; fileRef = E48B3CBC14393DF5000C50E2 /* KRCamera.h */; }; E48B3CC014393E30000C50E2 /* KRCamera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E48B3CBF14393E2F000C50E2 /* KRCamera.cpp */; }; + E48C696F15374F5B00232E28 /* KRContext.h in Headers */ = {isa = PBXBuildFile; fileRef = E48C696E15374F5A00232E28 /* KRContext.h */; }; + E48C697015374F5B00232E28 /* KRContext.h in Headers */ = {isa = PBXBuildFile; fileRef = E48C696E15374F5A00232E28 /* KRContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E48C697215374F7E00232E28 /* KRContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E48C697115374F7E00232E28 /* KRContext.cpp */; }; + E48C697315374F7E00232E28 /* KRContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E48C697115374F7E00232E28 /* KRContext.cpp */; }; E491018713C99BDC0098455B /* KREngine.mm in Sources */ = {isa = PBXBuildFile; fileRef = E491016F13C99BDC0098455B /* KREngine.mm */; }; E491018A13C99BDC0098455B /* KREngine.h in Headers */ = {isa = PBXBuildFile; fileRef = E491017213C99BDC0098455B /* KREngine.h */; settings = {ATTRIBUTES = (Public, ); }; }; E491018E13C99BDC0098455B /* KRMat4.h in Headers */ = {isa = PBXBuildFile; fileRef = E491017613C99BDC0098455B /* KRMat4.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -90,6 +93,10 @@ E4BBBB9F1512A4B100F43B5B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4BBBB941512A45500F43B5B /* Cocoa.framework */; }; E4BBBBA71512A6DC00F43B5B /* KRVector3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E491017F13C99BDC0098455B /* KRVector3.cpp */; }; E4D0683F1512A790005FFBEB /* KRVector3.h in Headers */ = {isa = PBXBuildFile; fileRef = E491017E13C99BDC0098455B /* KRVector3.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4D13364153767ED0070068C /* KRShaderManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E47C25A613F4F6AB00FF4370 /* KRShaderManager.cpp */; settings = {ATTRIBUTES = (Public, ); }; }; + E4D13365153767FF0070068C /* KRShaderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E47C25A113F4F65A00FF4370 /* KRShaderManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4D133661537685A0070068C /* KRShader.h in Headers */ = {isa = PBXBuildFile; fileRef = E47C25A413F4F66F00FF4370 /* KRShader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E4D13367153768610070068C /* KRShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E47C25A813F4F6DD00FF4370 /* KRShader.cpp */; settings = {ATTRIBUTES = (Public, ); }; }; E4F711A51512BB56007EE923 /* libfbxsdk-2012.2-static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4F711A41512BB56007EE923 /* libfbxsdk-2012.2-static.a */; }; E4F975321536220900FD60B2 /* KRNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F975311536220900FD60B2 /* KRNode.h */; }; E4F975331536220900FD60B2 /* KRNode.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F975311536220900FD60B2 /* KRNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -161,6 +168,8 @@ E47C25A813F4F6DD00FF4370 /* KRShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = KRShader.cpp; path = Classes/KRShader.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; E48B3CBC14393DF5000C50E2 /* KRCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = KRCamera.h; path = Classes/KRCamera.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; E48B3CBF14393E2F000C50E2 /* KRCamera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = KRCamera.cpp; path = Classes/KRCamera.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E48C696E15374F5A00232E28 /* KRContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KRContext.h; path = Classes/KRContext.h; sourceTree = ""; }; + E48C697115374F7E00232E28 /* KRContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KRContext.cpp; path = Classes/KRContext.cpp; sourceTree = ""; }; E491016113C99B9E0098455B /* libKREngine.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libKREngine.a; sourceTree = BUILT_PRODUCTS_DIR; }; E491016413C99B9E0098455B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; E491016813C99B9E0098455B /* KREngine-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "KREngine-Prefix.pch"; sourceTree = ""; }; @@ -252,8 +261,8 @@ E461A170152E598200F2044A /* Resources */ = { isa = PBXGroup; children = ( - E4F9755615363AA500FD60B2 /* Scene */, - E461A174152E5A1300F2044A /* Models */, + E48C696C15374A1500232E28 /* Scene Graph */, + E461A174152E5A1300F2044A /* Meshes */, E461A172152E59BC00F2044A /* Materials */, E497B949151BCEE900D3DC67 /* KRResource.h */, E497B94C151BCF2500D3DC67 /* KRResource.cpp */, @@ -302,13 +311,13 @@ name = Math; sourceTree = ""; }; - E461A174152E5A1300F2044A /* Models */ = { + E461A174152E5A1300F2044A /* Meshes */ = { isa = PBXGroup; children = ( E49E79FC15126146009CF99C /* KRMesh.h */, E49E79FE1512615F009CF99C /* KRMesh.cpp */, ); - name = Models; + name = Meshes; sourceTree = ""; }; E46C214015364BB8009CABF3 /* tinyxml2 */ = { @@ -321,6 +330,20 @@ name = tinyxml2; sourceTree = ""; }; + E48C696C15374A1500232E28 /* Scene Graph */ = { + isa = PBXGroup; + children = ( + E414BAE11435557300A668C4 /* KRInstance.h */, + E414BAE41435558800A668C4 /* KRInstance.cpp */, + E461A171152E599E00F2044A /* Lights */, + E4F975311536220900FD60B2 /* KRNode.h */, + E4F975351536221C00FD60B2 /* KRNode.cpp */, + E414BAE6143557D200A668C4 /* KRScene.h */, + E414BAE81435585A00A668C4 /* KRScene.cpp */, + ); + name = "Scene Graph"; + sourceTree = ""; + }; E491015613C99B9D0098455B = { isa = PBXGroup; children = ( @@ -395,6 +418,8 @@ E46DBE841512B9E200D59F86 /* KREngine-common.h */, E46C214915364DDB009CABF3 /* KRSceneManager.h */, E46C214A15364DEC009CABF3 /* KRSceneManager.cpp */, + E48C696E15374F5A00232E28 /* KRContext.h */, + E48C697115374F7E00232E28 /* KRContext.cpp */, ); name = Classes; sourceTree = ""; @@ -443,20 +468,6 @@ path = ..; sourceTree = ""; }; - E4F9755615363AA500FD60B2 /* Scene */ = { - isa = PBXGroup; - children = ( - E414BAE11435557300A668C4 /* KRInstance.h */, - E414BAE41435558800A668C4 /* KRInstance.cpp */, - E461A171152E599E00F2044A /* Lights */, - E4F975311536220900FD60B2 /* KRNode.h */, - E4F975351536221C00FD60B2 /* KRNode.cpp */, - E414BAE6143557D200A668C4 /* KRScene.h */, - E414BAE81435585A00A668C4 /* KRScene.cpp */, - ); - name = Scene; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -485,6 +496,7 @@ E461A168152E570700F2044A /* KRSpotLight.h in Headers */, E4F975321536220900FD60B2 /* KRNode.h in Headers */, E46C214715364BC8009CABF3 /* tinyxml2.h in Headers */, + E48C696F15374F5B00232E28 /* KRContext.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -508,10 +520,13 @@ E46DBE851512B9FA00D59F86 /* KREngine-common.h in Headers */, E4F9754C153632F000FD60B2 /* KRCamera.h in Headers */, E4F975501536333500FD60B2 /* KRModel.h in Headers */, + E4D133661537685A0070068C /* KRShader.h in Headers */, E461A153152E54B500F2044A /* KRLight.h in Headers */, E4F97552153633EF00FD60B2 /* KRMaterialManager.h in Headers */, E461A176152E5C5600F2044A /* KRPointLight.h in Headers */, E4F975541536340400FD60B2 /* KRTexture.h in Headers */, + E48C697015374F5B00232E28 /* KRContext.h in Headers */, + E4D13365153767FF0070068C /* KRShaderManager.h in Headers */, E461A15D152E563100F2044A /* KRDirectionalLight.h in Headers */, E461A169152E570700F2044A /* KRSpotLight.h in Headers */, E46C214815364BC8009CABF3 /* tinyxml2.h in Headers */, @@ -590,7 +605,6 @@ buildActionMask = 2147483647; files = ( E4BBBB8A1512A40300F43B5B /* InfoPlist.strings in Resources */, - E46C214415364BC8009CABF3 /* tinyxml2_readme.txt in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -627,6 +641,7 @@ E4F975361536221C00FD60B2 /* KRNode.cpp in Sources */, E46C214515364BC8009CABF3 /* tinyxml2.cpp in Sources */, E46C214B15364DEC009CABF3 /* KRSceneManager.cpp in Sources */, + E48C697215374F7E00232E28 /* KRContext.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -656,8 +671,11 @@ E4F9754315362D0F00FD60B2 /* KRInstance.cpp in Sources */, E4F975371536221C00FD60B2 /* KRNode.cpp in Sources */, E4F9754E1536331D00FD60B2 /* KRTextureManager.cpp in Sources */, + E4D13367153768610070068C /* KRShader.cpp in Sources */, E46C214615364BC8009CABF3 /* tinyxml2.cpp in Sources */, + E4D13364153767ED0070068C /* KRShaderManager.cpp in Sources */, E46C214C15364DEC009CABF3 /* KRSceneManager.cpp in Sources */, + E48C697315374F7E00232E28 /* KRContext.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/KREngine/KREngine/Classes/KRBoundingVolume.cpp b/KREngine/KREngine/Classes/KRBoundingVolume.cpp index 52f7e80..e69d77c 100644 --- a/KREngine/KREngine/Classes/KRBoundingVolume.cpp +++ b/KREngine/KREngine/Classes/KRBoundingVolume.cpp @@ -193,8 +193,8 @@ bool KRBoundingVolume::test_intersect(const KRBoundingVolume &p) const { } -KRMat4 KRBoundingVolume::calcShadowProj(KRScene *pScene, KRModelManager *pModelManager, GLfloat sun_yaw, GLfloat sun_pitch) const { - KRBoundingVolume sceneVolume = pScene->getExtents(pModelManager); +KRMat4 KRBoundingVolume::calcShadowProj(KRScene *pScene, KRContext *pContext, GLfloat sun_yaw, GLfloat sun_pitch) const { + KRBoundingVolume sceneVolume = pScene->getExtents(pContext); KRMat4 shadowvp; shadowvp.rotate(sun_pitch, X_AXIS); diff --git a/KREngine/KREngine/Classes/KRBoundingVolume.h b/KREngine/KREngine/Classes/KRBoundingVolume.h index adf2899..32eb828 100644 --- a/KREngine/KREngine/Classes/KRBoundingVolume.h +++ b/KREngine/KREngine/Classes/KRBoundingVolume.h @@ -41,6 +41,7 @@ #import "KRModelManager.h" class KRScene; +class KRContext; class KRBoundingVolume { public: @@ -55,7 +56,7 @@ public: KRBoundingVolume get_union(const KRBoundingVolume &p) const; bool test_intersect(const KRBoundingVolume &p) const; - KRMat4 calcShadowProj(KRScene *pScene, KRModelManager *pModelManager, GLfloat sun_yaw, GLfloat sun_pitch) const; + KRMat4 calcShadowProj(KRScene *pScene, KRContext *pContext, GLfloat sun_yaw, GLfloat sun_pitch) const; private: KRVector3 m_vertices[8]; }; diff --git a/KREngine/KREngine/Classes/KRContext.cpp b/KREngine/KREngine/Classes/KRContext.cpp new file mode 100644 index 0000000..dcc3978 --- /dev/null +++ b/KREngine/KREngine/Classes/KRContext.cpp @@ -0,0 +1,81 @@ +// +// KRContext.cpp +// KREngine +// +// Created by Kearwood Gilbert on 12-04-12. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#include + +#include "KRContext.h" + +KRContext::KRContext(const GLchar *szVertShaderSource, const GLchar *szFragShaderSource) { + m_pShaderManager = new KRShaderManager(szVertShaderSource, szFragShaderSource); + m_pTextureManager = new KRTextureManager(); + m_pMaterialManager = new KRMaterialManager(m_pTextureManager, m_pShaderManager); + m_pModelManager = new KRModelManager(); + m_pSceneManager = new KRSceneManager(); +} + +KRContext::~KRContext() { + if(m_pSceneManager) { + delete m_pSceneManager; + m_pSceneManager = NULL; + } + + if(m_pModelManager) { + delete m_pModelManager; + m_pModelManager = NULL; + } + + if(m_pTextureManager) { + delete m_pTextureManager; + m_pTextureManager = NULL; + } + + if(m_pMaterialManager) { + delete m_pMaterialManager; + m_pMaterialManager = NULL; + } + + if(m_pShaderManager) { + delete m_pShaderManager; + m_pShaderManager = NULL; + } +} + + +KRSceneManager *KRContext::getSceneManager() { + return m_pSceneManager; +} +KRTextureManager *KRContext::getTextureManager() { + return m_pTextureManager; +} +KRMaterialManager *KRContext::getMaterialManager() { + return m_pMaterialManager; +} +KRShaderManager *KRContext::getShaderManager() { + return m_pShaderManager; +} +KRModelManager *KRContext::getModelManager() { + return m_pModelManager; +} + +void KRContext::loadResource(std::string path) { + std::string name = KRResource::GetFileBase(path); + std::string extension = KRResource::GetFileExtension(path); + if(extension.compare("krobject") == 0) { + m_pModelManager->loadModel(name.c_str(), path.c_str()); + } else if(extension.compare("krscene") == 0) { + m_pSceneManager->loadScene(name.c_str(), path.c_str()); +#if TARGET_OS_IPHONE + } else if(extension.compare("pvr") == 0) { + m_pTextureManager->loadTexture(name.c_str(), path.c_str()); +#endif + } else if(extension.compare("mtl") == 0) { + m_pMaterialManager->loadFile(path.c_str()); + } else { + fprintf(stderr, "KRContext::loadResource - Unknown resource file type: %s\n", path.c_str()); + } +} \ No newline at end of file diff --git a/KREngine/KREngine/Classes/KRContext.h b/KREngine/KREngine/Classes/KRContext.h new file mode 100644 index 0000000..65fc651 --- /dev/null +++ b/KREngine/KREngine/Classes/KRContext.h @@ -0,0 +1,39 @@ +// +// KRContext.h +// KREngine +// +// Created by Kearwood Gilbert on 12-04-12. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + +#ifndef KREngine_KRContext_h +#define KREngine_KRContext_h + +#import "KRSceneManager.h" +#import "KRTextureManager.h" +#import "KRMaterialManager.h" +#import "KRShaderManager.h" +#import "KRModelManager.h" + +class KRContext { +public: + KRContext(const GLchar *szVertShaderSource, const GLchar *szFragShaderSource); + ~KRContext(); + + void loadResource(std::string path); + + KRSceneManager *getSceneManager(); + KRTextureManager *getTextureManager(); + KRMaterialManager *getMaterialManager(); + KRShaderManager *getShaderManager(); + KRModelManager *getModelManager(); + +private: + KRSceneManager *m_pSceneManager; + KRTextureManager *m_pTextureManager; + KRMaterialManager *m_pMaterialManager; + KRShaderManager *m_pShaderManager; + KRModelManager *m_pModelManager; +}; + +#endif diff --git a/KREngine/KREngine/Classes/KREngine.h b/KREngine/KREngine/Classes/KREngine.h index a96d8bf..9c75509 100644 --- a/KREngine/KREngine/Classes/KREngine.h +++ b/KREngine/KREngine/Classes/KREngine.h @@ -35,11 +35,7 @@ #import "KRVector3.h" #import "KRModel.h" #import "KRScene.h" -#import "KRTextureManager.h" -#import "KRMaterialManager.h" -#import "KRShaderManager.h" -#import "KRModelManager.h" -#import "KRSceneManager.h" +#import "KRContext.h" #import "KRCamera.h" #import "KREngine-common.h" @@ -81,11 +77,7 @@ typedef enum KREngineParameterType {KRENGINE_PARAMETER_INT, KRENGINE_PARAMETER_F GLuint m_postShaderProgram; GLuint m_shadowShaderProgram; - KRSceneManager *m_pSceneManager; - KRTextureManager *m_pTextureManager; - KRMaterialManager *m_pMaterialManager; - KRShaderManager *m_pShaderManager; - KRModelManager *m_pModelManager; + KRContext *m_pContext; int m_iFrame; @@ -96,6 +88,8 @@ typedef enum KREngineParameterType {KRENGINE_PARAMETER_INT, KRENGINE_PARAMETER_F } +@property(nonatomic, readonly) KRContext *context; + - (id)initForWidth: (GLuint)width Height: (GLuint)height; - (BOOL)loadVertexShader:(NSString *)vertexShaderName fragmentShader:(NSString *)fragmentShaderName forProgram:(GLuint *)programPointer withOptions:(NSString *)options; @@ -103,8 +97,6 @@ typedef enum KREngineParameterType {KRENGINE_PARAMETER_INT, KRENGINE_PARAMETER_F - (void)renderShadowBufferNumber: (int)iShadow ForScene: (KRScene *)pScene; - (void)renderScene: (KRScene *)pScene WithViewMatrix: (KRMat4)viewMatrix LightDirection: (KRVector3)lightDirection CameraPosition: (KRVector3)cameraPosition; -- (KRModelManager *)getModelManager; -- (KRSceneManager *)getSceneManager; - (void)invalidateShadowBuffers; - (void)allocateShadowBuffers; diff --git a/KREngine/KREngine/Classes/KREngine.mm b/KREngine/KREngine/Classes/KREngine.mm index 843e4da..b9c7375 100644 --- a/KREngine/KREngine/Classes/KREngine.mm +++ b/KREngine/KREngine/Classes/KREngine.mm @@ -53,6 +53,7 @@ using namespace std; @end @implementation KREngine +@synthesize context = m_pContext; double const PI = 3.141592653589793f; - (id)initForWidth: (GLuint)width Height: (GLuint)height @@ -79,11 +80,7 @@ double const PI = 3.141592653589793f; GLchar * szVertShaderSource = (GLchar *)[[NSString stringWithContentsOfFile:vertShaderPathname encoding:NSUTF8StringEncoding error:nil] UTF8String]; GLchar * szFragShaderSource = (GLchar *)[[NSString stringWithContentsOfFile:fragShaderPathname encoding:NSUTF8StringEncoding error:nil] UTF8String]; - m_pShaderManager = new KRShaderManager(szVertShaderSource, szFragShaderSource); - m_pTextureManager = new KRTextureManager(); - m_pMaterialManager = new KRMaterialManager(m_pTextureManager, m_pShaderManager); - m_pModelManager = new KRModelManager(m_pMaterialManager); - m_pSceneManager = new KRSceneManager(); + m_pContext = new KRContext(szVertShaderSource, szFragShaderSource); if (![self createBuffers] || ![self loadShaders] /*|| ![self loadObjects]*/ ) { @@ -226,12 +223,12 @@ double const PI = 3.141592653589793f; KRMat4 newShadowMVP; if(shadowMaxDepths[m_cShadowBuffers - 1][iShadow] == 0.0) { - KRBoundingVolume ext = KRBoundingVolume(pScene->getExtents(m_pModelManager)); + KRBoundingVolume ext = KRBoundingVolume(pScene->getExtents(m_pContext)); - newShadowMVP = ext.calcShadowProj(pScene, m_pModelManager, sun_yaw, sun_pitch); + newShadowMVP = ext.calcShadowProj(pScene, m_pContext, sun_yaw, sun_pitch); } else { KRBoundingVolume frustrumSliceVolume = KRBoundingVolume(viewMatrix, m_camera.perspective_fov, m_camera.perspective_aspect, m_camera.perspective_nearz + (m_camera.perspective_farz - m_camera.perspective_nearz) * shadowMinDepths[m_cShadowBuffers - 1][iShadow], m_camera.perspective_nearz + (m_camera.perspective_farz - m_camera.perspective_nearz) * shadowMaxDepths[m_cShadowBuffers - 1][iShadow]); - newShadowMVP = frustrumSliceVolume.calcShadowProj(pScene, m_pModelManager, sun_yaw, sun_pitch); + newShadowMVP = frustrumSliceVolume.calcShadowProj(pScene, m_pContext, sun_yaw, sun_pitch); } if(!(shadowmvpmatrix[iShadow] == newShadowMVP)) { @@ -331,8 +328,7 @@ double const PI = 3.141592653589793f; KRVector3 cameraPosition; KRVector3 lightDirection; KRBoundingVolume shadowVolume = KRBoundingVolume(vertices); - pScene->render(&m_camera, m_pModelManager, shadowVolume, m_pMaterialManager, true, shadowmvpmatrix[iShadow], cameraPosition, lightDirection, shadowmvpmatrix, NULL, 0, m_pShaderManager, m_pTextureManager); - + pScene->render(&m_camera, m_pContext, shadowVolume, true, shadowmvpmatrix[iShadow], cameraPosition, lightDirection, shadowmvpmatrix, NULL, m_cShadowBuffers); glViewport(0, 0, 768, 1024); } @@ -357,7 +353,7 @@ double const PI = 3.141592653589793f; glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); KRBoundingVolume frustrumVolume = KRBoundingVolume(viewMatrix, m_camera.perspective_fov, m_camera.perspective_aspect, m_camera.perspective_nearz, m_camera.perspective_farz); - pScene -> render(&m_camera, m_pModelManager, frustrumVolume, m_pMaterialManager, false, viewMatrix, cameraPosition, lightDirection, shadowmvpmatrix, shadowDepthTexture, m_cShadowBuffers, m_pShaderManager, m_pTextureManager); + pScene -> render(&m_camera, m_pContext, frustrumVolume, false, viewMatrix, cameraPosition, lightDirection, shadowmvpmatrix, shadowDepthTexture, m_cShadowBuffers); } - (BOOL)compileShader:(GLuint *)shader type:(GLenum)type file:(NSString *)file withOptions: (NSString *)options @@ -540,49 +536,16 @@ double const PI = 3.141592653589793f; - (BOOL)loadResource:(NSString *)path { - NSString *name = [[path lastPathComponent] stringByDeletingPathExtension]; - if([path hasSuffix: @".krobject"]) { - NSLog(@"object: %@", path); - m_pModelManager->loadModel([name UTF8String], [path UTF8String]); - } else if([path hasSuffix: @".krscene"]) { - NSLog(@"scene: %@", path); - m_pSceneManager->loadScene([name UTF8String], [path UTF8String]); - } else if([path hasSuffix: @".pvr"]) { - NSLog(@"texture: %@", path); - m_pTextureManager->loadTexture([name UTF8String], [path UTF8String]); - } else if([path hasSuffix: @".mtl"]) { - NSLog(@"material: %@", path); - m_pMaterialManager->loadFile([path UTF8String]); - } + m_pContext->loadResource([path UTF8String]); return TRUE; } - (void)dealloc { - if(m_pSceneManager) { - delete m_pSceneManager; - m_pSceneManager = NULL; - } - - if(m_pModelManager) { - delete m_pModelManager; - m_pModelManager = NULL; - } - - if(m_pTextureManager) { - delete m_pTextureManager; - m_pTextureManager = NULL; - } - - if(m_pMaterialManager) { - delete m_pMaterialManager; - m_pMaterialManager = NULL; - } - - if(m_pShaderManager) { - delete m_pShaderManager; - m_pShaderManager = NULL; + if(m_pContext) { + delete m_pContext; + m_pContext = NULL; } [self invalidatePostShader]; @@ -725,7 +688,7 @@ double const PI = 3.141592653589793f; const char *szText = [debug_text UTF8String]; if(*szText) { - KRTexture *pFontTexture = m_pTextureManager->getTexture("font"); + KRTexture *pFontTexture = m_pContext->getTextureManager()->getTexture("font"); glDisable(GL_DEPTH_TEST); glUseProgram(m_postShaderProgram); @@ -783,7 +746,7 @@ double const PI = 3.141592653589793f; -(int)getParameterCount { - return 30; + return 31; } -(NSString *)getParameterNameWithIndex: (int)i @@ -1085,13 +1048,13 @@ double const PI = 3.141592653589793f; -(double)getParameterMinWithIndex: (int)i { - double minValues[30] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; + double minValues[31] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; return minValues[i]; } -(double)getParameterMaxWithIndex: (int)i { - double maxValues[30] = {PI, 2.0f * PI, PI, 3.0f, 1.0f, 1.0f, 1.0f, 1.0f, 3.0f, 3.0f, 3.0f, 3.0f, 3.0f, 3.0f, 2.0f, 1.0f, 1.0f, 1.0f, 5.0f, 1.0f, 0.5f, 1.0f, 2.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; + double maxValues[31] = {PI, 2.0f * PI, PI, 3.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 3.0f, 3.0f, 3.0f, 3.0f, 3.0f, 3.0f, 2.0f, 1.0f, 1.0f, 1.0f, 5.0f, 1.0f, 0.5f, 1.0f, 2.0f, 2.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; return maxValues[i]; } @@ -1105,14 +1068,6 @@ double const PI = 3.141592653589793f; } } -- (KRModelManager *)getModelManager { - return m_pModelManager; -} - -- (KRSceneManager *)getSceneManager { - return m_pSceneManager; -} - - (void)invalidateShadowBuffers { for(int i=0; i < m_cShadowBuffers; i++) { shadowValid[i] = false; diff --git a/KREngine/KREngine/Classes/KRInstance.cpp b/KREngine/KREngine/Classes/KRInstance.cpp index 14b5d05..da5d5fb 100644 --- a/KREngine/KREngine/Classes/KRInstance.cpp +++ b/KREngine/KREngine/Classes/KRInstance.cpp @@ -31,6 +31,7 @@ #include #import "KRInstance.h" +#import "KRContext.h" #include KRInstance::KRInstance(std::string instance_name, std::string model_name, const KRMat4 modelMatrix, std::string light_map) : KRNode(instance_name) { @@ -64,16 +65,16 @@ KRMat4 &KRInstance::getModelMatrix() { #if TARGET_OS_IPHONE -void KRInstance::render(KRCamera *pCamera, KRModelManager *pModelManager, KRBoundingVolume &frustrumVolume, KRMaterialManager *pMaterialManager, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager) { +void KRInstance::render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolume &frustrumVolume, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers) { if(m_pModel == NULL) { - m_pModel = pModelManager->getModel(m_model_name.c_str()); + m_pModel = pContext->getModelManager()->getModel(m_model_name.c_str()); } - if(m_pModel != NULL && (getExtents(pModelManager).test_intersect(frustrumVolume) || bRenderShadowMap)) { + if(m_pModel != NULL && (getExtents(pContext).test_intersect(frustrumVolume) || bRenderShadowMap)) { if(m_pLightMap == NULL && m_lightMap.size()) { - m_pLightMap = pTextureManager->getTexture(m_lightMap.c_str()); + m_pLightMap = pContext->getTextureManager()->getTexture(m_lightMap.c_str()); } if(cShadowBuffers == 0 && m_pLightMap && pCamera->bEnableLightMap && !bRenderShadowMap) { @@ -97,19 +98,19 @@ void KRInstance::render(KRCamera *pCamera, KRModelManager *pModelManager, KRBoun KRVector3 cameraPosObject = inverseModelMatrix.dot(cameraPosition); KRVector3 lightDirObject = inverseModelMatrix.dot(lightDirection); - m_pModel->render(pCamera, pMaterialManager, bRenderShadowMap, mvpmatrix, cameraPosObject, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, pShaderManager, pTextureManager, m_pLightMap); + m_pModel->render(pCamera, pContext, bRenderShadowMap, mvpmatrix, cameraPosObject, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, m_pLightMap); } - KRNode::render(pCamera, pModelManager, frustrumVolume, pMaterialManager, bRenderShadowMap, viewMatrix, cameraPosition, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, pShaderManager, pTextureManager); + KRNode::render(pCamera, pContext, frustrumVolume, bRenderShadowMap, viewMatrix, cameraPosition, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers); } #endif -void KRInstance::calcExtents(KRModelManager *pModelManager) { - KRNode::calcExtents(pModelManager); +void KRInstance::calcExtents(KRContext *pContext) { + KRNode::calcExtents(pContext); if(m_pModel == NULL) { - m_pModel = pModelManager->getModel(m_model_name.c_str()); + m_pModel = pContext->getModelManager()->getModel(m_model_name.c_str()); } assert(m_pModel != NULL); diff --git a/KREngine/KREngine/Classes/KRInstance.h b/KREngine/KREngine/Classes/KRInstance.h index 757844b..56d7a36 100644 --- a/KREngine/KREngine/Classes/KRInstance.h +++ b/KREngine/KREngine/Classes/KRInstance.h @@ -44,6 +44,9 @@ #import "KRCamera.h" #import "KRModelManager.h" #import "KRNode.h" +#import "KRContext.h" +#import "KRModel.h" +#import "KRTexture.h" class KRBoundingVolume; @@ -58,10 +61,10 @@ public: #if TARGET_OS_IPHONE - virtual void render(KRCamera *pCamera, KRModelManager *pModelManager, KRBoundingVolume &frustrumVolume, KRMaterialManager *pMaterialManager, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager); + virtual void render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolume &frustrumVolume, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers); #endif - virtual void calcExtents(KRModelManager *pModelManager); + virtual void calcExtents(KRContext *pContext); KRMat4 &getModelMatrix(); diff --git a/KREngine/KREngine/Classes/KRMaterial.cpp b/KREngine/KREngine/Classes/KRMaterial.cpp index bbe69d9..8173218 100644 --- a/KREngine/KREngine/Classes/KRMaterial.cpp +++ b/KREngine/KREngine/Classes/KRMaterial.cpp @@ -37,6 +37,8 @@ #include #include +#import "KRcontext.h" + KRMaterial::KRMaterial(const char *szName) : KRResource(szName) { strcpy(m_szName, szName); m_pAmbientMap = NULL; @@ -156,21 +158,21 @@ bool KRMaterial::isTransparent() { return m_tr != 0.0; } #if TARGET_OS_IPHONE -void KRMaterial::bind(KRMaterial **prevBoundMaterial, char *szPrevShaderKey, KRCamera *pCamera, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager, KRTexture *pLightMap) { +void KRMaterial::bind(KRMaterial **prevBoundMaterial, char *szPrevShaderKey, KRCamera *pCamera, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRContext *pContext, KRTexture *pLightMap) { bool bSameMaterial = *prevBoundMaterial == this; bool bLightMap = pLightMap && pCamera->bEnableLightMap; if(!m_pAmbientMap && m_ambientMap.size()) { - m_pAmbientMap = pTextureManager->getTexture(m_ambientMap.c_str()); + m_pAmbientMap = pContext->getTextureManager()->getTexture(m_ambientMap.c_str()); } if(!m_pDiffuseMap && m_diffuseMap.size()) { - m_pDiffuseMap = pTextureManager->getTexture(m_diffuseMap.c_str()); + m_pDiffuseMap = pContext->getTextureManager()->getTexture(m_diffuseMap.c_str()); } if(!m_pNormalMap && m_normalMap.size()) { - m_pNormalMap = pTextureManager->getTexture(m_normalMap.c_str()); + m_pNormalMap = pContext->getTextureManager()->getTexture(m_normalMap.c_str()); } if(!m_pSpecularMap && m_specularMap.size()) { - m_pSpecularMap = pTextureManager->getTexture(m_specularMap.c_str()); + m_pSpecularMap = pContext->getTextureManager()->getTexture(m_specularMap.c_str()); } @@ -185,7 +187,7 @@ void KRMaterial::bind(KRMaterial **prevBoundMaterial, char *szPrevShaderKey, KRC bool bNormalMap = m_pNormalMap != NULL && pCamera->bEnableNormalMap; bool bSpecMap = m_pSpecularMap != NULL && pCamera->bEnableSpecMap; - KRShader *pShader = pShaderManager->getShader(pCamera, bDiffuseMap, bNormalMap, bSpecMap, cShadowBuffers, bLightMap, m_diffuseMapScale != default_scale && bDiffuseMap, m_specularMapScale != default_scale && bSpecMap, m_normalMapScale != default_scale && bNormalMap, m_diffuseMapOffset != default_offset && bDiffuseMap, m_specularMapOffset != default_offset && bSpecMap, m_normalMapOffset != default_offset && bNormalMap); + KRShader *pShader = pContext->getShaderManager()->getShader(pCamera, bDiffuseMap, bNormalMap, bSpecMap, cShadowBuffers, bLightMap, m_diffuseMapScale != default_scale && bDiffuseMap, m_specularMapScale != default_scale && bSpecMap, m_normalMapScale != default_scale && bNormalMap, m_diffuseMapOffset != default_offset && bDiffuseMap, m_specularMapOffset != default_offset && bSpecMap, m_normalMapOffset != default_offset && bNormalMap); bool bSameShader = strcmp(pShader->getKey(), szPrevShaderKey) == 0; if(!bSameShader) { diff --git a/KREngine/KREngine/Classes/KRMaterial.h b/KREngine/KREngine/Classes/KRMaterial.h index be98c26..d006021 100644 --- a/KREngine/KREngine/Classes/KRMaterial.h +++ b/KREngine/KREngine/Classes/KRMaterial.h @@ -50,6 +50,7 @@ using std::list; class KRTextureManager; +class KRContext; class KRMaterial : public KRResource { public: @@ -75,7 +76,7 @@ public: char *getName(); #if TARGET_OS_IPHONE - void bind(KRMaterial **prevBoundMaterial, char *szPrevShaderKey, KRCamera *pCamera, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager, KRTexture *pLightMap); + void bind(KRMaterial **prevBoundMaterial, char *szPrevShaderKey, KRCamera *pCamera, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRContext *pContext, KRTexture *pLightMap); #endif diff --git a/KREngine/KREngine/Classes/KRModel.cpp b/KREngine/KREngine/Classes/KRModel.cpp index 5b14d50..be0c137 100644 --- a/KREngine/KREngine/Classes/KRModel.cpp +++ b/KREngine/KREngine/Classes/KRModel.cpp @@ -44,24 +44,18 @@ #include "KRVector3.h" #import "KRShader.h" #import "KRShaderManager.h" +#import "KRContext.h" - -KRModel::KRModel(std::string name, std::string path, KRMaterialManager *pMaterialManager) { +KRModel::KRModel(std::string name, std::string path) { m_name = name; - loadPack(path, pMaterialManager); + loadPack(path); } -void KRModel::loadPack(std::string path, KRMaterialManager *pMaterialManager) { +void KRModel::loadPack(std::string path) { + m_materials.clear(); + m_uniqueMaterials.clear(); m_pMesh = new KRMesh(KRResource::GetFileBase(path)); m_pMesh->loadPack(path); - - vector submeshes = m_pMesh->getSubmeshes(); - - for(std::vector::iterator itr = submeshes.begin(); itr != submeshes.end(); itr++) { - KRMaterial *pMaterial = pMaterialManager->getMaterial((*itr)->szMaterialName); - m_materials.push_back(pMaterial); - m_uniqueMaterials.insert(pMaterial); - } } std::string KRModel::getName() { @@ -73,7 +67,18 @@ KRModel::~KRModel() { } #if TARGET_OS_IPHONE -void KRModel::render(KRCamera *pCamera, KRMaterialManager *pMaterialManager, bool bRenderShadowMap, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager, KRTexture *pLightMap) { +void KRModel::render(KRCamera *pCamera, KRContext *pContext, bool bRenderShadowMap, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRTexture *pLightMap) { + + if(m_materials.size() == 0) { + vector submeshes = m_pMesh->getSubmeshes(); + + for(std::vector::iterator itr = submeshes.begin(); itr != submeshes.end(); itr++) { + KRMaterial *pMaterial = pContext->getMaterialManager()->getMaterial((*itr)->szMaterialName); + m_materials.push_back(pMaterial); + m_uniqueMaterials.insert(pMaterial); + } + } + KRMaterial *pPrevBoundMaterial = NULL; int iPrevBuffer = -1; char szPrevShaderKey[128]; @@ -99,7 +104,7 @@ void KRModel::render(KRCamera *pCamera, KRMaterialManager *pMaterialManager, boo KRMaterial *pMaterial = m_materials[iSubmesh]; if(pMaterial != NULL && pMaterial == (*mat_itr)) { - pMaterial->bind(&pPrevBoundMaterial, szPrevShaderKey, pCamera, mvpMatrix, cameraPosition, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, pShaderManager, pTextureManager, pLightMap); + pMaterial->bind(&pPrevBoundMaterial, szPrevShaderKey, pCamera, mvpMatrix, cameraPosition, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, pContext, pLightMap); m_pMesh->renderSubmesh(iSubmesh, &iPrevBuffer); } } diff --git a/KREngine/KREngine/Classes/KRModel.h b/KREngine/KREngine/Classes/KRModel.h index 832cb73..a0e6bbd 100644 --- a/KREngine/KREngine/Classes/KRModel.h +++ b/KREngine/KREngine/Classes/KRModel.h @@ -34,6 +34,7 @@ #import #import "KRMesh.h" #import "KRVector2.h" +#import "KRcontext.h" #import "KREngine-common.h" @@ -49,12 +50,12 @@ using std::set; class KRModel { public: - KRModel(std::string name, std::string path, KRMaterialManager *pMaterialManager); + KRModel(std::string name, std::string path); ~KRModel(); #if TARGET_OS_IPHONE - void render(KRCamera *pCamera, KRMaterialManager *pMaterialManager, bool bRenderShadowMap, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager, KRTexture *pLightMap); + void render(KRCamera *pCamera, KRContext *pContext, bool bRenderShadowMap, KRMat4 &mvpMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRTexture *pLightMap); #endif @@ -62,7 +63,7 @@ public: std::string getName(); private: - void loadPack(std::string path, KRMaterialManager *pMaterialManager); + void loadPack(std::string path); vector m_materials; set m_uniqueMaterials; diff --git a/KREngine/KREngine/Classes/KRModelManager.cpp b/KREngine/KREngine/Classes/KRModelManager.cpp index 8999f75..6a969a9 100644 --- a/KREngine/KREngine/Classes/KRModelManager.cpp +++ b/KREngine/KREngine/Classes/KRModelManager.cpp @@ -31,8 +31,10 @@ #include "KRModelManager.h" -KRModelManager::KRModelManager(KRMaterialManager *pMaterialManager) { - m_pMaterialManager = pMaterialManager; +#import "KRModel.h" + +KRModelManager::KRModelManager() { + } KRModelManager::~KRModelManager() { @@ -43,7 +45,7 @@ KRModelManager::~KRModelManager() { } KRModel *KRModelManager::loadModel(const char *szName, const char *szPath) { - KRModel *pModel = new KRModel(szName, szPath, m_pMaterialManager); + KRModel *pModel = new KRModel(szName, szPath); m_models[szName] = pModel; return pModel; } diff --git a/KREngine/KREngine/Classes/KRModelManager.h b/KREngine/KREngine/Classes/KRModelManager.h index 711768d..4f32dcd 100644 --- a/KREngine/KREngine/Classes/KRModelManager.h +++ b/KREngine/KREngine/Classes/KRModelManager.h @@ -34,7 +34,8 @@ #import "KREngine-common.h" -#include "KRModel.h" +class KRContext; +class KRModel; #include #import @@ -42,7 +43,7 @@ using std::map; class KRModelManager { public: - KRModelManager(KRMaterialManager *pMaterialManager); + KRModelManager(); ~KRModelManager(); KRModel *loadModel(const char *szName, const char *szPath); @@ -54,7 +55,6 @@ public: private: std::map m_models; - KRMaterialManager *m_pMaterialManager; }; #endif diff --git a/KREngine/KREngine/Classes/KRNode.cpp b/KREngine/KREngine/Classes/KRNode.cpp index 6174a9f..69444da 100644 --- a/KREngine/KREngine/Classes/KRNode.cpp +++ b/KREngine/KREngine/Classes/KRNode.cpp @@ -142,11 +142,11 @@ KRNode *KRNode::LoadXML(tinyxml2::XMLElement *e) { #if TARGET_OS_IPHONE -void KRNode::render(KRCamera *pCamera, KRModelManager *pModelManager, KRBoundingVolume &frustrumVolume, KRMaterialManager *pMaterialManager, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager) { +void KRNode::render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolume &frustrumVolume, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers) { for(std::vector::iterator itr=m_childNodes.begin(); itr < m_childNodes.end(); ++itr) { KRNode *child = (*itr); - child->render(pCamera, pModelManager, frustrumVolume, pMaterialManager, bRenderShadowMap, viewMatrix, cameraPosition, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, pShaderManager, pTextureManager); + child->render(pCamera, pContext, frustrumVolume, bRenderShadowMap, viewMatrix, cameraPosition, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers); } } @@ -162,21 +162,21 @@ void KRNode::clearExtents() { } } -KRBoundingVolume KRNode::getExtents(KRModelManager *pModelManager) { +KRBoundingVolume KRNode::getExtents(KRContext *pContext) { if(!m_pExtents) { - calcExtents(pModelManager); + calcExtents(pContext); } return *m_pExtents; } -void KRNode::calcExtents(KRModelManager *pModelManager) { +void KRNode::calcExtents(KRContext *pContext) { clearExtents(); for(std::vector::iterator itr=m_childNodes.begin(); itr < m_childNodes.end(); ++itr) { KRNode *child = (*itr); if(m_pExtents) { - *m_pExtents = m_pExtents->get_union(child->getExtents(pModelManager)); + *m_pExtents = m_pExtents->get_union(child->getExtents(pContext)); } else { - m_pExtents = new KRBoundingVolume(child->getExtents(pModelManager)); + m_pExtents = new KRBoundingVolume(child->getExtents(pContext)); } } } diff --git a/KREngine/KREngine/Classes/KRNode.h b/KREngine/KREngine/Classes/KRNode.h index 2e0af3a..1d78dfd 100644 --- a/KREngine/KREngine/Classes/KRNode.h +++ b/KREngine/KREngine/Classes/KRNode.h @@ -19,6 +19,7 @@ class KRModelManager; class KRMaterialManager; class KRMat4; class KRTextureManager; +class KRContext; class KRNode { @@ -43,11 +44,11 @@ public: const KRVector3 &getLocalRotation(); void clearExtents(); - virtual void calcExtents(KRModelManager *pModelManager); - KRBoundingVolume getExtents(KRModelManager *pModelManager); + virtual void calcExtents(KRContext *Context); + KRBoundingVolume getExtents(KRContext *pContext); #if TARGET_OS_IPHONE - virtual void render(KRCamera *pCamera, KRModelManager *pModelManager, KRBoundingVolume &frustrumVolume, KRMaterialManager *pMaterialManager, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager); + virtual void render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolume &frustrumVolume, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers); #endif diff --git a/KREngine/KREngine/Classes/KRScene.cpp b/KREngine/KREngine/Classes/KRScene.cpp index 29fef6d..557f1e4 100644 --- a/KREngine/KREngine/Classes/KRScene.cpp +++ b/KREngine/KREngine/Classes/KRScene.cpp @@ -48,7 +48,7 @@ KRScene::~KRScene() { #if TARGET_OS_IPHONE -void KRScene::render(KRCamera *pCamera, KRModelManager *pModelManager, KRBoundingVolume &frustrumVolume, KRMaterialManager *pMaterialManager, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager) { +void KRScene::render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolume &frustrumVolume, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers) { if(cShadowBuffers > 0 && !bRenderShadowMap) { glActiveTexture(GL_TEXTURE3); @@ -77,13 +77,13 @@ void KRScene::render(KRCamera *pCamera, KRModelManager *pModelManager, KRBoundin glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } - m_pRootNode->render(pCamera, pModelManager, frustrumVolume, pMaterialManager, bRenderShadowMap, viewMatrix, cameraPosition, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers, pShaderManager, pTextureManager); + m_pRootNode->render(pCamera, pContext, frustrumVolume, bRenderShadowMap, viewMatrix, cameraPosition, lightDirection, pShadowMatrices, shadowDepthTextures, cShadowBuffers); } #endif -KRBoundingVolume KRScene::getExtents(KRModelManager *pModelManager) { - return m_pRootNode->getExtents(pModelManager); +KRBoundingVolume KRScene::getExtents(KRContext *pContext) { + return m_pRootNode->getExtents(pContext); } diff --git a/KREngine/KREngine/Classes/KRScene.h b/KREngine/KREngine/Classes/KRScene.h index b31a10b..707f6fa 100644 --- a/KREngine/KREngine/Classes/KRScene.h +++ b/KREngine/KREngine/Classes/KRScene.h @@ -61,11 +61,11 @@ public: #if TARGET_OS_IPHONE - void render(KRCamera *pCamera, KRModelManager *pModelManager, KRBoundingVolume &frustrumVolume, KRMaterialManager *pMaterialManager, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers, KRShaderManager *pShaderManager, KRTextureManager *pTextureManager); + void render(KRCamera *pCamera, KRContext *pContext, KRBoundingVolume &frustrumVolume, bool bRenderShadowMap, KRMat4 &viewMatrix, KRVector3 &cameraPosition, KRVector3 &lightDirection, KRMat4 *pShadowMatrices, GLuint *shadowDepthTextures, int cShadowBuffers); #endif - KRBoundingVolume getExtents(KRModelManager *pModelManager); + KRBoundingVolume getExtents(KRContext *pContext); private: KRNode *m_pRootNode; KRBoundingVolume *m_pExtents; diff --git a/KREngine/KREngine/Classes/KRSceneManager.cpp b/KREngine/KREngine/Classes/KRSceneManager.cpp index daf8524..1b2c5d0 100644 --- a/KREngine/KREngine/Classes/KRSceneManager.cpp +++ b/KREngine/KREngine/Classes/KRSceneManager.cpp @@ -29,7 +29,8 @@ // or implied, of Kearwood Gilbert. // -#include "KRSceneManager.h" +#import "KRSceneManager.h" +#import "KRScene.h" KRSceneManager::KRSceneManager() { } diff --git a/KREngine/KREngine/Classes/KRSceneManager.h b/KREngine/KREngine/Classes/KRSceneManager.h index 9f41c66..a64deee 100644 --- a/KREngine/KREngine/Classes/KRSceneManager.h +++ b/KREngine/KREngine/Classes/KRSceneManager.h @@ -34,7 +34,7 @@ #import "KREngine-common.h" -#include "KRScene.h" +class KRScene; #include #import diff --git a/objview/Classes/KRObjViewGLView.mm b/objview/Classes/KRObjViewGLView.mm index 12481eb..fe49755 100644 --- a/objview/Classes/KRObjViewGLView.mm +++ b/objview/Classes/KRObjViewGLView.mm @@ -102,40 +102,46 @@ NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSFileManager* fileManager = [NSFileManager defaultManager]; - for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { - if([fileName hasSuffix: @".scene"]) { - NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; - [renderEngine loadResource: path]; - } - } for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { - if([fileName hasSuffix: @".pvr"]) { - NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; - [renderEngine loadResource: path]; - } - } - - for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { - if([fileName hasSuffix: @".mtl"]) { - NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; - [renderEngine loadResource: path]; - } - } - - for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { - if([fileName hasSuffix: @".krobject"]) { - NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; - [renderEngine loadResource: path]; - } - } - - for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { - if([fileName hasSuffix: @".krscene"]) { - NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; - [renderEngine loadResource: path]; - } + NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; + [renderEngine loadResource: path]; } +// +// for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { +// if([fileName hasSuffix: @".scene"]) { +// NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; +// [renderEngine loadResource: path]; +// } +// } +// +// for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { +// if([fileName hasSuffix: @".pvr"]) { +// NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; +// [renderEngine loadResource: path]; +// } +// } +// +// for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { +// if([fileName hasSuffix: @".mtl"]) { +// NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; +// [renderEngine loadResource: path]; +// } +// } +// +// for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { +// if([fileName hasSuffix: @".krobject"]) { +// NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; +// [renderEngine loadResource: path]; +// } +// } +// +// for (NSString* fileName in [fileManager contentsOfDirectoryAtPath: documentsDirectory error:nil]) { +// if([fileName hasSuffix: @".krscene"]) { +// NSString* path = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileName]; +// [renderEngine loadResource: path]; +// } +// } [renderEngine setNearZ: 25.0]; [renderEngine setFarZ: 5000.0]; @@ -236,7 +242,7 @@ - (KRScene *)getScene; { - return renderEngine.getSceneManager->getFirstScene(); + return renderEngine.context->getSceneManager()->getFirstScene(); } #pragma mark -