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
#include "Headers/Kernel.h"
#include "Headers/Application.h"
#include "Core/Headers/ParamHandler.h"
#include "Utility/Headers/MemoryTracker.h"
#include "Hardware/Video/Headers/GFXDevice.h"

namespace Divide {

#if defined(_DEBUG)
    bool MemoryManager::MemoryTracker::Ready = false;
    MemoryManager::MemoryTracker MemoryManager::AllocTracer;
#endif

Application::Application() : _kernel(nullptr),
                             _hasFocus(true)
{
	//MemoryTracker::Ready = false; //< faster way of disabling memory tracking
	_requestShutdown = false;
	_mainLoopActive = false;
	_mainLoopPaused = false;
    _threadId = std::this_thread::get_id();
    _errorCode = NO_ERR;
    ParamHandler::createInstance();
    Console::createInstance();
    ApplicationTimer::createInstance();
}

Application::~Application(){
#if defined(_DEBUG)
    MemoryManager::MemoryTracker::Ready = false;
	bool leakDetected = false;
	size_t sizeLeaked = 0;
    stringImpl allocLog = MemoryManager::AllocTracer.Dump( leakDetected, sizeLeaked );
	if ( leakDetected ) {
		ERROR_FN(Locale::get( "ERROR_MEMORY_NEW_DELETE_MISMATCH" ),
                 static_cast<I32>(std::ceil(sizeLeaked / 1024.0f)));
	}
	std::ofstream memLog;
	memLog.open( _memLogBuffer.c_str() );
	memLog << allocLog.c_str();
	memLog.close();
#endif
	PRINT_FN( Locale::get( "STOP_APPLICATION" ) );
	ParamHandler::destroyInstance();
	Console::destroyInstance();
	ApplicationTimer::destroyInstance();
}

ErrorCode Application::initialize(const stringImpl& entryPoint, I32 argc, char **argv){
    assert(!entryPoint.empty());
    //Read language table
    ParamHandler::getInstance().setDebugOutput(false);
    //Print a copyright notice in the log file
    Console::getInstance().printCopyrightNotice();
    CONSOLE_TIMESTAMP_ON();
    PRINT_FN(Locale::get("START_APPLICATION"));
    //Create a new kernel
    _kernel = MemoryManager_NEW Kernel(argc, argv, this->getInstance());
    assert(_kernel != nullptr);
    //and load it via an XML file config
    return _kernel->initialize(entryPoint);
}

void Application::run(){
    _kernel->runLogicLoop();
}

void Application::snapCursorToPosition(U16 x, U16 y) const {
    _kernel->setCursorPosition(x, y);
}

void Application::deinitialize() {
	PRINT_FN( Locale::get( "STOP_KERNEL" ) );
    MemoryManager::DELETE( _kernel );
	for ( DELEGATE_CBK<>& cbk : _shutdownCallback ) {
		cbk();
	}
}

};

Commits for Divide-Framework/trunk/Source Code/Core/Application.cpp

Diff revisions: vs.
Revision Author Commited Message
331 Diff Diff IonutCava picture IonutCava Sat 06 Dec, 2014 20:53:45 +0000

[Ionut]
- Limited line length to 132 characters to improve readability and diff-comparisons
- Refactored memory allocation/deallocation functions
- Fixed a few compatibility issues with HashMap.h
- Fixed a bug in GPU Skinning shaders (cast a float to int)

325 Diff Diff IonutCava picture IonutCava Wed 17 Sep, 2014 20:06:13 +0000

[Ionut]
- Reworked transform system:
— Parent transform chain system moved from Transform class to the PhysicsComponent
— PhysicsComponent now returns all transform values needed both global and local (still needs heavy optimization and caching)

- Reworked SceneGraph node management:
— Proper ref counting of SceneNodes and proper removing of resource (ResourceCache is now empty on destruction, as it should be)
— Removed parent transform tracking as that’s the PhysicsComponent’s responsibility
— Only nodes loaded via the ResourceCache are allowed to be added to the SceneGraph (added proper loaders for Impostors, Sky, etc)

- Optimized some of the math classes (mat4, mat3)

324 Diff Diff IonutCava picture IonutCava Sun 14 Sep, 2014 14:01:39 +0000

[Ionut]
- New memory management system (no custom allocators in this commit)
— Memory tracer to detect memory leaks on shutdown (from: https://www.relisoft.com/book/tech/9new.html)
— SAFE_DELETE_XYZ are now inline template functions not macros
— ASSERTION system now supports logging and message boxes and continue on error configurable for each build type
— Fixed a lot of memory leaks detected by the new system (some still remain)

- Added SRGB support (part 1)
— Albedo textures are loaded as SRGB (make sure resources are SRGB)
— Shaders output gamma corrected colors
— Moved terrain textures back to 2 array system (albedo and normal maps, albedo maps using a SRGB sampler)

- Sky is now loaded via the ResourceCache system
- Added include safeguards in shader atoms

322 Diff Diff IonutCava picture IonutCava Sat 06 Sep, 2014 20:33:47 +0000

[Ionut]
- Refactored most of Boost related code to be C++11 based
— Boost is only used for ThreadPool, Mutex handling, XML parsing and networking (ASIO)
— Function binds, threads, regex, NonCopyable base, Hashing algorithms and more are now using C++11 libraries
- Replaced all FOR_EACH calls with standard, range, “for” calls

321 Diff Diff IonutCava picture IonutCava Wed 03 Sep, 2014 22:05:15 +0000

[Ionut]
- Added support (and enabled by default) for the EASTL library (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html / https://github.com/paulhodge/EASTL)
— Strings, vectors and hash_maps can be combined from EASTL, STL and Boost (not all combinations work. e.g. EASTL strings with STL/Boost containers due to the lack of a proper hash function)

318 Diff Diff IonutCava picture IonutCava Sat 30 Aug, 2014 17:35:53 +0000

[Ionut]
- Wrapped the entire code in a “Divide” namespace
- VertexBuffers now call “shrink_to_fit” on all internal data storage
- Improved some vector performance by preferring “emplace_back” instead of “push_back” + proepr usage of reserve / resize
- Wrapped OIS specific types and classes in Divide::Input namespace
- Added the messageBox.layout file (forgot it in the previous few commits)

316 Diff Diff IonutCava picture IonutCava Mon 25 Aug, 2014 22:04:03 +0000

[Ionut]
- Cleaned up AI classes
- Added basic Order <-> Goal system

314 Diff Diff IonutCava picture IonutCava Sun 24 Aug, 2014 19:54:33 +0000

[Ionut]
- More AI work
- Added some needed audio dlls

303 Diff Diff IonutCava picture IonutCava Sat 09 Aug, 2014 19:12:32 +0000

[Ionut]
- Fixed mouse movement (change resolution callback properly informs inputInterface of the new window’s width and height)
- Fixed immediate mode emulation rendering (destroyed index buffers for some reason)
- Added axis gizmos for Scene / Scene + Selected Object / Scene + All object cycled via the F5 key in debug

293 k1ngp1n picture k1ngp1n Tue 29 Jul, 2014 20:01:28 +0000

[Ionut]
- Code cleanup and comments in GLFWWrapper (for starters. more to follow)
- Reworked main loop logic (no more delegates and rendering api querying)
- Replaced all GLvoid with regular void
- replaced all boost::this_thread::sleep (deprecated calls) with boost::this_thread::sleep_for