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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "Headers/glDeferredBufferObject.h"

#include "Hardware/Video/OpenGL/Headers/glResources.h"
#include "core.h"
#include "Headers/glFrameBufferObject.h"
#include "Hardware/Video/Headers/GFXDevice.h"

glDeferredBufferObject::glDeferredBufferObject() : glFrameBufferObject(FBO_2D_DEFERRED)
{
	_textureType = GL_TEXTURE_2D;
}

bool glDeferredBufferObject::Create(GLushort width,
									GLushort height,
									GLubyte imageLayers){
	D_PRINT_FN(Locale::get("GL_FBO_GEN_DEFERRED"),width,height);
	Destroy();
	_width = width;
	_height = height;
	_useDepthBuffer = true;

	GLCheck(glGenFramebuffers(1, &_frameBufferHandle));
	GLCheck(glGenRenderbuffers(1, &_depthBufferHandle));

	GLCheck(glBindFramebuffer(GL_FRAMEBUFFER, _frameBufferHandle));

	TextureDescriptor albedo   = _attachement[TextureDescriptor::Color0];
	TextureDescriptor position = _attachement[TextureDescriptor::Color1];
	TextureDescriptor normals  = _attachement[TextureDescriptor::Color2];
	TextureDescriptor blend    = _attachement[TextureDescriptor::Color3];

    //Depth Buffer
	GLCheck(glBindRenderbuffer(GL_RENDERBUFFER, _depthBufferHandle));
	GLCheck(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24,width, height));
	GLCheck(glFramebufferRenderbufferEXT(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER, _depthBufferHandle));
	GLCheck(glBindRenderbuffer(GL_RENDERBUFFER,0));

	GLCheck(glGenTextures(4, _textureId));

    //Albedo
	GLCheck(glBindTexture(_textureType, _textureId[0]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_MAG_FILTER, glTextureFilterTable[albedo.getSampler().magFilter()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_MIN_FILTER, glTextureFilterTable[albedo.getSampler().minFilter()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_WRAP_S, glWrapTable[albedo.getSampler().wrapU()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_WRAP_T, glWrapTable[albedo.getSampler().wrapV()]));

	GLCheck(glTexImage2D(_textureType,  0, glImageFormatTable[albedo._internalFormat],
						 width, height, 0, glImageFormatTable[albedo._format],
						 glDataFormat[albedo._dataType], NULL));

    //Positions
	GLCheck(glBindTexture(_textureType, _textureId[1]));

	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_MAG_FILTER, glTextureFilterTable[position.getSampler().magFilter()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_MIN_FILTER, glTextureFilterTable[position.getSampler().minFilter()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_WRAP_S, glWrapTable[position.getSampler().wrapU()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_WRAP_T, glWrapTable[position.getSampler().wrapV()]));

	GLCheck(glTexImage2D(_textureType,  0, glImageFormatTable[position._internalFormat],
						 width, height, 0, glImageFormatTable[position._format],
						 glDataFormat[position._dataType], NULL));

    //Normals
	GLCheck(glBindTexture(_textureType, _textureId[2]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_MAG_FILTER, glTextureFilterTable[normals.getSampler().magFilter()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_MIN_FILTER, glTextureFilterTable[normals.getSampler().minFilter()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_WRAP_S, glWrapTable[normals.getSampler().wrapU()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_WRAP_T, glWrapTable[normals.getSampler().wrapV()]));

	GLCheck(glTexImage2D(_textureType,  0, glImageFormatTable[normals._internalFormat],
						 width, height, 0, glImageFormatTable[normals._format],
						 glDataFormat[normals._dataType], NULL));

    //Blend
 	GLCheck(glBindTexture(_textureType, _textureId[3]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_MAG_FILTER, glTextureFilterTable[blend.getSampler().magFilter()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_MIN_FILTER, glTextureFilterTable[blend.getSampler().minFilter()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_WRAP_S, glWrapTable[blend.getSampler().wrapU()]));
	GLCheck(glTexParameterf(_textureType, GL_TEXTURE_WRAP_T, glWrapTable[blend.getSampler().wrapV()]));

	GLCheck(glTexImage2D(_textureType,  0, glImageFormatTable[blend._internalFormat],
						 width, height, 0, glImageFormatTable[blend._format],
						 glDataFormat[blend._dataType], NULL));

	GLCheck(glBindTexture(_textureType,0));

    for(U8 i = 0; i < 4; i++){
	    GLCheck(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, _textureType, _textureId[i], 0));
    }

	checkStatus();
	GLCheck(glBindFramebuffer(GL_FRAMEBUFFER, 0));

	return true;
}

void glDeferredBufferObject::Begin(GLubyte nFace) const {
	assert(nFace<6);
    GL_API::setViewport(vec4<U32>(0,0,_width,_height));
	GLCheck(glBindFramebuffer(GL_FRAMEBUFFER, _frameBufferHandle));
	GLenum buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };
	GLCheck(glDrawBuffers(4, buffers));
	GLCheck(glClear(_clearBufferMask));
	GL_API::clearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearColor.a );
}

Commits for Divide-Framework/trunk/Source Code/Hardware/Video/OpenGL/Buffers/FrameBufferObject/glDeferredBufferObject.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]]

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

123 k1ngp1n picture k1ngp1n Tue 12 Jun, 2012 16:52:41 +0000

[Ionut] [[BR]]
-Split FBO’s in 3: RenderToTexture, RenderToDepth and RenderToDeferred (experimental) [[BR]]