Subversion Repository Public Repository

Divide-Framework

This repository has no backups
This repository's network speed is throttled to 100KB/sec

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "Headers/SceneManager.h"
#include "Headers/AIManager.h"

#include "SceneList.h"
#include "Geometry/Importer/Headers/DVDConverter.h"

SceneManager::SceneManager() : FrameListener(),
							   _activeScene(NULL),
							   _init(false)
{
	DVDConverter::createInstance();
	AIManager::createInstance();
}

SceneManager::~SceneManager(){
	PRINT_FN(Locale::get("SCENE_MANAGER_DELETE"));
	PRINT_FN(Locale::get("SCENE_MANAGER_REMOVE_SCENES"));
	for_each(SceneMap::value_type& it, _sceneMap){
		it.second->unload();
		SAFE_DELETE(it.second);
	}
	_sceneMap.clear();
	//Destroy the model loader;
	DVDConverter::getInstance().DestroyInstance();
}

bool SceneManager::init(){
	REGISTER_FRAME_LISTENER(&(this->getInstance()));
	_init = true;
	return true;
}

bool SceneManager::load(const std::string& sceneName, const vec2<U16>& resolution, CameraManager* const cameraMgr){
	assert(_init == true);
	PRINT_FN(Locale::get("SCENE_MANAGER_LOAD_SCENE_DATA"));
	//Initialize the model importer:
	if(!DVDConverter::getInstance().init()){
		return false;
	}
	XML::loadScene(sceneName,*this);
	if(!_activeScene){
		return false;
	}
	cacheResolution(resolution);
	_activeScene->preLoad();
	_activeScene->loadXMLAssets();
	return _activeScene->load(sceneName, cameraMgr);
}

Scene* SceneManager::createScene(const std::string& name){
	Scene* scene = NULL;

	if(!name.empty())
		scene = _sceneFactory[name]();
	
	if(scene != NULL)
		_sceneMap.insert(std::make_pair(name, scene));

	return scene;
}

bool SceneManager::framePreRenderStarted(const FrameEvent& evt){
	_activeScene->renderState().getCamera().renderLookAt();
	return true;
}

void SceneManager::render(const RenderStage& stage) {
	assert(_activeScene != NULL);

	if(_renderFunction.empty()){
		if(_activeScene->renderCallback().empty()){
			_renderFunction = DELEGATE_BIND(&SceneGraph::update, _activeScene->getSceneGraph());
		}else{
			_renderFunction = _activeScene->renderCallback();
		}
	}

	GFXDevice& GFX = GFX_DEVICE;
	GFX.setRenderStage(stage);
	GFX.render(_renderFunction,_activeScene->renderState());

	if(bitCompare(stage,FINAL_STAGE) || bitCompare(stage,DEFERRED_STAGE)){
		// Draw bounding boxes, skeletons, axis gizmo, etc.
		GFX.debugDraw();
		// Preview depthmaps if needed
		LightManager::getInstance().previewShadowMaps();
		// Show navmeshes
		AIManager::getInstance().debugDraw(false);
	}
}

Commits for Divide-Framework/trunk/Source Code/Managers/SceneManager.cpp

Diff revisions: vs.
Revision Author Commited Message
168 Diff Diff k1ngp1n picture k1ngp1n Sat 26 Oct, 2013 19:03:21 +0000

- Reworked the Camera class[[BR]]
— Now fully quaternion based [[BR]]
— Basic camera types added but not used yet (third person, first person, orbit) [[BR]]
- Cleaned up Material and Texture handling [[BR]]
- Added clipping plane support [[BR]]
— Similar to OpenGL fixed-function clip planes but fully shader driven [[BR]]
— Added a new class, “Plane”, that helps define clip planes [[BR]]
- Optimized the Singleton class to allow faster “getInstance” calls without performance penalties [[BR]]
-- “createInstance” must be called for each singleton class before usage. Or “gerOrCreateInstance” can be used, which is basically the former “getInstance” implementation [[BR]]
- Improved console logging by changing some heap allocations to stack and removing dependencies on the std::string class [[BR]]
- Added a lot of performance optimizations related to coding standards and redundant calculations [[BR]]
— e.g. Frustum AABB check didn’t need to recompute the AABB points as they were calculated already [[BR]]
— e.g. A vector did not need to be set to 0 on initialization as that is already it’s default state on creation [[BR]]
— e.g. Faster Framerate and Timing calculations by using less member variables that are not needed outsied of calling functions [[BR]]
- The SceneState now contains the SceneRenderState and is passed on to the SceneGraph’s update calls [[BR]]
- Better material export/import to/from XML format [[BR]]
- More bug fixes and cleanups [[BR]]

166 Diff Diff k1ngp1n picture k1ngp1n Fri 19 Jul, 2013 12:13:08 +0000

[Ionut] [[BR]]
- Moved the debug rendering so that it renders properly when post processing is enabled [[BR]]
- Added a shader hack to avoid including debug elements to the bloom pre-render step [[BR]]

152 Diff Diff k1ngp1n picture k1ngp1n Thu 20 Jun, 2013 14:23:31 +0000

[Ionut] [[BR]]
- New rendering pipeline (experimental and unstable): [[BR]]
— OpenGL 3.x clean context (glLight commands are still used for now, but UBO support is there, but not used yet) [[BR]]
— Custom matrix stacks and UBO based shader data (UBOs cause some link errors on some nVidia cards)[[BR]]
— Multi-threaded texture loading and shader compilation (mt shader compilation disabled for now. needs more tests) [[BR]]
— VAO rendering is self contained (no more enable/disable calls before a draw request) [[BR]]
— Render instance class used for rendering information [[BR]]
[[BR]]
- New unique ID generation base class: GUIDWrapper. Each class that derives from this, gets an application wide unique id on construction [[BR]]
- Added base code for an in-game editor using CEGUI [[BR]]
- Replaced some mutex locks with lockless data structures or atomic data [[BR]]
- CEGUI 0.8.2, FTGL-GL3 and GLIM 0.4 modified to support GLEW_MX if defined [[BR]]
- Dropped VS2008 support [[BR]]
- Networking library, server framework and ReCast files are now projects inside the Divide Framework solution [[BR]]
- New console command “setFov” that modifies the horizontal FoV value in realtime [[BR]]
- New console command “recompileShader” that reparses shader files, recompiles shaders and relinks shader programs who’s names match or contain the argument string [[BR]]
- New debug utility: axis angle drawn in corner of the screen if needed [[BR]]
- More ‘const’-s pasted around the code, more loop performance tweaks (allocations before a loop, tighter loops, etc), more utility member functions added to various classes [[BR]]

151 Diff Diff k1ngp1n picture k1ngp1n Tue 07 May, 2013 00:00:52 +0000

[Ionut] [[BR]]
- Better ReCast integration [[BR]]
— Any entity can be used as an obstacle in the NavMesh if that’s specified in each scene’s assets.xml file for said entity [[BR]]
— New console command, “createNavMesh”, that passes geometry data to ReCast [[BR]]
-— NavMesh generation is not yet complete [[BR]]
- Better PhysX integration [[BR]]
— Each scene passes data to and gets data from the Physics API better and safer[[BR]]
- Multi-threaded support extended: [[BR]]
— Event class replaced with Task [[BR]]
— Kernel uses a threadpool for scene tasks [[BR]]
— Each task can be added to a different threadpool if needed [[BR]]
— Most critical sections use the new boost::atomic wrapper for thread safety [[BR]]
- Rendering system updated [[BR]]
— VBO’s keep track of the geometry type internally [[BR]]
— Rendering by specific element list is internal to the VBO [[BR]]
— VBO’s can draw a “lite” version that doesn’t send Tangent, BiTangent and TexCoord data for depth rendering (disabled) [[BR]]
- Reflectors now offer a preview of the generated reflective texture if needed [[BR]]
- Buttons are now added and rendered by CEGUI [[BR]]
[[BR]]
Deprecation: [[BR]]
- Removed fixed pipeline material system [[BR]]
- Removed BoundingBox late update system [[BR]]
- Shadow references in the material system are now depth references [[BR]]
[[BR]]
Bug fixes: [[BR]]
- Problematic FBO double bind check removed [[BR]]
- Faster terrain rendering via chunk size selection through each scene’s terrain.xml[[BR]]
- Rendering is paused when the window is minimized [[BR]]
- CEGUI and impostors now render properly in deferred rendering mode [[BR]]
- Fixed various level 4 (VS2008) warnings [[BR]]
- Better state management and cleaning [[BR]]
- Better SceneGraph node management and trasformation/AABB update calls [[BR]]
- AITenisScene has proper collisions now [[BR]]

146 Diff Diff k1ngp1n picture k1ngp1n Wed 10 Apr, 2013 13:20:15 +0000

[Ionut] [[BR]]
*Final LightBranch updates 2/3 : Main trunk merge and build test (VC90, VC100, gDebugger) [[BR]]
-Merged light branch with trunk [[BR]]
-Deleted light branch [[BR]]

121 Diff Diff k1ngp1n picture k1ngp1n Sun 10 Jun, 2012 16:40:45 +0000

[Ionut] [[BR]]
-Added basic localization support [[BR]]
-Added cross-platform INI parsing [[BR]]
-Moved ReCast+Detour to LIBS folder [[BR]]

120 Diff Diff k1ngp1n picture k1ngp1n Sat 09 Jun, 2012 20:44:43 +0000

[Ionut] [[BR]]
-Added a new class, “SceneState” which holds information that does not affect scene logic such as wind and fog information, visibility toggles etc [[BR]]
--“Scene” is new derived from this state as well as from “Resource” [[BR]]
-Cleaned up “SceneManager” and “Scene” classes for fewer virtual call lookups and easier interfaces [[BR]]
-Each scene now loads it’s own XML files (moved from “Kernel” [[BR]]
-Scene’s are now auto-registered to the SceneManager’s scene-factory via a call to “REGISTER_SCENE” [[BR]]
-Added error codes for various initialization steps [[BR]]
-Reworked object selection and deletion (still not tested) [[BR]]
-fog can now be toggled on and off via “config.xml” [[BR]]

118 Diff Diff k1ngp1n picture k1ngp1n Thu 07 Jun, 2012 18:25:10 +0000

[Ionut] [[BR]]
-Decoupled “Scene” and “SceneManager” from “InputManager” [[BR]]
--All input events are routed through the “Kernel” now [[BR]]
--Renamed “InputManager” to “InputInterface” [[BR]]
-Decoupled “Application” class from the rest of the engine except for the “Kernel” and “GUI” (for resize callbacks) [[BR]]
-Added cached resolution values to classes so no queries to “Application” are needed anymore [[BR]]
-Added a missing option from “config.xml” to enable or disable animations [[BR]]
Forgot to commit changed scene xml’s after the romanian>english translation [[BR]]
-All window dimension references are renamed to resolution and all variables related to it are now U16’s as floats are irrelevant (what’s a half pixel? for examle) [[BR]]
-GUI resize callback is now called from “GFXDevice” instead of “GLWrapper” (will be moved to “Kernel” soon together with the “PostFX” resize callback) [[BR]]

117 Diff Diff k1ngp1n picture k1ngp1n Tue 05 Jun, 2012 17:30:40 +0000

[Ionut] [[BR]]
-Separated responsibilities between “Application” and “Kernel” [[BR]]
--“Application” handles data such as window dimensions, logs, “ParamHandler” etc [[BR]]
--“Kernel” handles the main loop, SFX, GFX, physics, sceneManager etc updates [[BR]]
---“Kernel” is now a “Core” component [[BR]]
-Reduced coupling between some classes by passing more info via parameters rather than relying on singleton access [[BR]]
--Ex: eyePos in “Terrain”,“Water” and “Trigger” classes is now passed as a "vec3<F32>" on render call rather than querying “CameraManager” [[BR]]
-Reworked “GLWrapper” shutdown routine [[BR]]
Singleton witch hunt [[BR]]
-“Kernel” is no longer a singleton and it’s initialized on application startup in the “Application” class[[BR]]
-“CameraManager” is no longer a singleton and it’s instantiated in the kernel [[BR]]

116 k1ngp1n picture k1ngp1n Mon 04 Jun, 2012 22:27:07 +0000

[Ionut] [[BR]]
-Removed now useless “BaseCache” class as a simple unordered_map in each manager-type class is all that’s needed [[BR]]
-Moved loading responsibility from each Resource implementation to each "ImplResourceLoader<T>" class (defaults via macro’s are available for convenience) [[BR]]
--Resources now have a “setInitialData” method for setting post-load values [[BR]]
--Also added a loader for Particle Emitters [[BR]]
-Added a new class, “HardwareResource” (for textures, shaders, etc) that needs special loading routines to facilitate future multi-threaded asset streaming [[BR]]
--HardwareResource’s have a “generateHWResource” that should be called after threaded loading routines join with main thread [[BR]]
-Renamed “Guardian” class to “Kernel” as that’s what it’s new responsibility will be in future revisions [[BR]]
-Added the “threadpool” library from here: http://threadpool.sourceforge.net/ (not used yet) [[BR]]
-Added some more macro’s and cleanups [[BR]]