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
#include "Core/Resources/Headers/ResourceLoader.h"

#include "Core/Headers/ParamHandler.h"
#include "Managers/Headers/SceneManager.h"
#include "Hardware/Video/Headers/GFXDevice.h"
#include "Environment/Terrain/Headers/Terrain.h"
#include "Environment/Terrain/Headers/TerrainDescriptor.h"
#include "Geometry/Material/Headers/Material.h"

Terrain* ImplResourceLoader<Terrain>::operator()() {
	Terrain* ptr = New Terrain();
    if(!load(ptr,_descriptor.getName())){
        SAFE_DELETE(ptr);
    }

	return ptr;
}

template<>
bool ImplResourceLoader<Terrain>::load(Terrain* const res, const std::string& name) {
    res->setState(RES_LOADING);

	vectorImpl<TerrainDescriptor*>& terrains = GET_ACTIVE_SCENE()->getTerrainInfoArray();
	PRINT_FN(Locale::get("TERRAIN_LOAD_START"),name.c_str());

	TerrainDescriptor* terrain = NULL;
	for(U8 i = 0; i < terrains.size(); i++)
		if(name.compare(terrains[i]->getVariable("terrainName")) == 0){
			terrain = terrains[i];
			break;
		}
	if(!terrain) return false;
	SamplerDescriptor terrainDiffuseSampler;
	terrainDiffuseSampler.setWrapMode(TEXTURE_REPEAT);

	ResourceDescriptor terrainMaterial("terrainMaterial");
	res->setMaterial(CreateResource<Material>(terrainMaterial));
	res->getMaterial()->setDiffuse(WHITE());
	res->getMaterial()->setAmbient(WHITE() / 3);
	res->getMaterial()->setSpecular(vec4<F32>(0.1f, 0.1f, 0.1f, 1.0f));
	res->getMaterial()->setShininess(20.0f);
	res->getMaterial()->addShaderDefines("COMPUTE_TBN");
	res->getMaterial()->setShaderProgram("terrain");
    res->getMaterial()->setShaderProgram("terrain.Depth",DEPTH_STAGE);
	res->getMaterial()->setShaderLoadThreaded(false);

	ResourceDescriptor textureNormalMap("Terrain Normal Map");
	textureNormalMap.setResourceLocation(terrain->getVariable("normalMap"));
	ResourceDescriptor textureRedTexture("Terrain Red Texture");
	textureRedTexture.setResourceLocation(terrain->getVariable("redTexture"));
	ResourceDescriptor textureGreenTexture("Terrain Green Texture");
	textureGreenTexture.setResourceLocation(terrain->getVariable("greenTexture"));
	ResourceDescriptor textureBlueTexture("Terrain Blue Texture");
	textureBlueTexture.setResourceLocation(terrain->getVariable("blueTexture"));
	ResourceDescriptor textureWaterCaustics("Terrain Water Caustics");
	textureWaterCaustics.setResourceLocation(terrain->getVariable("waterCaustics"));
	ResourceDescriptor textureTextureMap("Terrain Texture Map");
	textureTextureMap.setResourceLocation(terrain->getVariable("textureMap"));
	textureTextureMap.setPropertyDescriptor<SamplerDescriptor>(terrainDiffuseSampler);

	res->addTexture(Terrain::TERRAIN_TEXTURE_DIFFUSE, CreateResource<Texture>(textureTextureMap));
	res->addTexture(Terrain::TERRAIN_TEXTURE_NORMALMAP, CreateResource<Texture>(textureNormalMap));
	res->addTexture(Terrain::TERRAIN_TEXTURE_CAUSTICS, CreateResource<Texture>(textureWaterCaustics));
	res->addTexture(Terrain::TERRAIN_TEXTURE_RED, CreateResource<Texture>(textureRedTexture));
	res->addTexture(Terrain::TERRAIN_TEXTURE_GREEN, CreateResource<Texture>(textureGreenTexture));
	res->addTexture(Terrain::TERRAIN_TEXTURE_BLUE, CreateResource<Texture>(textureBlueTexture));

	std::string alphaTextureFile = terrain->getVariable("alphaTexture");
	if(alphaTextureFile.compare(ParamHandler::getInstance().getParam<std::string>("assetsLocation") + "/none") != 0){
		ResourceDescriptor textureAlphaTexture("Terrain Alpha Texture");
		textureAlphaTexture.setResourceLocation(alphaTextureFile);
		res->addTexture(Terrain::TERRAIN_TEXTURE_ALPHA, CreateResource<Texture>(textureAlphaTexture));
		res->getMaterial()->addShaderDefines("USE_ALPHA_TEXTURE");
	}

	res->loadVisualResources();

	if(res->loadThreadedResources(terrain)){
		PRINT_FN(Locale::get("TERRAIN_LOAD_END"), name.c_str());
		return true;
	}

	ERROR_FN(Locale::get("ERROR_TERRAIN_LOAD"), name.c_str());
    return false;
}

Commits for Divide-Framework/trunk/Source Code/Core/Resources/ConcreteLoaders/TerrainLoaderImpl.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]]

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]]

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]]

116 Diff Diff 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]]

114 k1ngp1n picture k1ngp1n Sat 02 Jun, 2012 13:03:01 +0000

[Ionut][[BR]]
-First steps in moving away from a generalized “ResourceManager”: [[BR]]
--Added templated resource loaders (Core\Resources\ConcreteLoaders). Just add a new loader for a new resource type and it’s ready for use [[BR]]
---Next step involves moving loading responsibility from the resource itself to the resource loader that handles it’s creation [[BR]]
--Renamed the ResourceManager to ResourceCache and limited it’s responsibility from general resource operations to a more standard abstract template factory with cache [[BR]]
---Manager base class is renamed to BaseCache as it’s a wrapper for a cache map in essence [[BR]]
---Next step involves adding a ResourceCache per scene (dropping Singleton status) with the possibility of sharing resources between them (to avoid reloading existing resources for a new scene) [[BR]]
-Translated AITenisScene and PingPongScene source code to english [[BR]]