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
#include "Headers/glSamplerObject.h"

#include "Core/Headers/Console.h"
#include "Core/Headers/ParamHandler.h"
#include "Utility/Headers/Localization.h"
#include "Hardware/Video/OpenGL/Headers/GLWrapper.h"
#include "Hardware/Video/Textures/Headers/TextureDescriptor.h"

glSamplerObject::glSamplerObject() : _samplerID(Divide::GL::_invalidObjectID)
{
	bool availableSamplerObj = (glewIsSupported("GL_ARB_sampler_objects") == GL_TRUE);
	if(!availableSamplerObj){
        ERROR_FN(Locale::get("ERROR_NO_SAMPLER_SUPPORT"));
        assert(availableSamplerObj);
    }
}

glSamplerObject::~glSamplerObject()
{
    Destroy();
}

bool glSamplerObject::Destroy() {
	if(_samplerID > 0 && _samplerID != Divide::GL::_invalidObjectID){
        GLCheck(glDeleteSamplers(1, &_samplerID));
		_samplerID = 0;
    }
	return (_samplerID == 0);
}

bool glSamplerObject::Create(const SamplerDescriptor& descriptor) {

	if(_samplerID == Divide::GL::_invalidObjectID) GLCheck(glGenSamplers(1, &_samplerID));
	
	GLCheck(glSamplerParameterf(_samplerID, GL_TEXTURE_LOD_BIAS, descriptor.biasLOD()));
	GLCheck(glSamplerParameterf(_samplerID, GL_TEXTURE_MIN_LOD, descriptor.minLOD()));
    GLCheck(glSamplerParameterf(_samplerID, GL_TEXTURE_MAX_LOD, descriptor.maxLOD()));
    GLCheck(glSamplerParameteri(_samplerID, GL_TEXTURE_MIN_FILTER, glTextureFilterTable[descriptor.minFilter()]));
    GLCheck(glSamplerParameteri(_samplerID, GL_TEXTURE_MAG_FILTER, glTextureFilterTable[descriptor.magFilter()]));
    GLCheck(glSamplerParameteri(_samplerID, GL_TEXTURE_WRAP_S, glWrapTable[descriptor.wrapU()]));
    GLCheck(glSamplerParameteri(_samplerID, GL_TEXTURE_WRAP_T, glWrapTable[descriptor.wrapV()]));
    GLCheck(glSamplerParameteri(_samplerID, GL_TEXTURE_WRAP_R, glWrapTable[descriptor.wrapW()]));

	if(descriptor._useRefCompare){
		GLCheck(glSamplerParameteri(_samplerID, GL_TEXTURE_COMPARE_MODE,  GL_COMPARE_R_TO_TEXTURE));
		GLCheck(glSamplerParameteri(_samplerID, GL_TEXTURE_COMPARE_FUNC,  glCompareFuncTable[descriptor._cmpFunc]));
		GLCheck(glSamplerParameteri(_samplerID, GL_DEPTH_TEXTURE_MODE,    glImageFormatTable[descriptor._depthCompareMode]));
	}
	

	if (descriptor.anisotrophyLevel() > 1 && descriptor.generateMipMaps()) {
		if(!glewIsSupported("GL_EXT_texture_filter_anisotropic")){
			ERROR_FN(Locale::get("ERROR_NO_ANISO_SUPPORT"));
		}else{
			U8 anisoLevel = std::min<I32>((I32)descriptor.anisotrophyLevel(), ParamHandler::getInstance().getParam<U8>("rendering.anisotropicFilteringLevel"));
			GLCheck(glSamplerParameterf(_samplerID, GL_TEXTURE_MAX_ANISOTROPY_EXT, anisoLevel));
		}
	}
    //GLCheck(glSamplerParameterfv(_samplerID, GL_TEXTURE_BORDER_COLOR, &glm::vec4(0.0f)[0]));
	return true;
}

void glSamplerObject::Bind(GLuint textureUnit) const{
    GLCheck(glBindSampler(textureUnit, _samplerID));
}

void glSamplerObject::Unbind(GLuint textureUnit) const{
	GLCheck(glBindSampler(textureUnit, 0));
}

void glSamplerObject::Bind() const{
	GLCheck(glBindSampler(GL_API::getActiveTextureUnit(), _samplerID));
}

void glSamplerObject::Unbind() const{
	GLCheck(glBindSampler(GL_API::getActiveTextureUnit(), 0));
}

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