File: ccGlFilter.h

package info (click to toggle)
cloudcompare 2.11.3-7.1
  • links: PTS
  • area: main
  • in suites: bookworm
  • size: 58,224 kB
  • sloc: cpp: 229,982; ansic: 30,723; makefile: 84; sh: 20
file content (107 lines) | stat: -rw-r--r-- 3,271 bytes parent folder | download | duplicates (3)
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
106
107
//##########################################################################
//#                                                                        #
//#                               CCFBO                                    #
//#                                                                        #
//#  This program is free software; you can redistribute it and/or modify  #
//#  it under the terms of the GNU Library General Public License as       #
//#  published by the Free Software Foundation; version 2 or later of the License.  #
//#                                                                        #
//#  This program is distributed in the hope that it will be useful,       #
//#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
//#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the          #
//#  GNU General Public License for more details.                          #
//#                                                                        #
//#          COPYRIGHT: EDF R&D / TELECOM ParisTech (ENST-TSI)             #
//#                                                                        #
//##########################################################################

#ifndef CC_GL_FILTER_HEADER
#define CC_GL_FILTER_HEADER

//Qt
#include <QString>

//! Default GL filter interface
/** A GL filter is a combination of shaders applied to
	textures (typically the rendered scene), typically
	through intensive use of Frame Buffer Objects.
**/
class ccGlFilter
{
public:

	//! Default constructor
	ccGlFilter(QString description)
		: m_isValid(false)
		, m_description(description)
	{}

	//! Default destructor
	virtual ~ccGlFilter() {}

	//! Returns filter name
	inline virtual QString getDescription() const { return m_description; }

	//! Cloning mechanism
	virtual ccGlFilter* clone() const = 0;

	//! Initializes GL filter
	/** Must support reinit!
		\param width texture/screen width
		\param height texture/screen height
		\param shadersPath path where shader files are stored
		\param error error string (if an error occurred)
		\return success
		**/
	virtual bool init(	unsigned width,
						unsigned height,
						QString shadersPath,
						QString& error) = 0;

	//! Minimal set of 3D viewport parameters that can be used by shaders
	struct ViewportParameters
	{
		//! Default constructor
		ViewportParameters()
			: zoom(1.0)
			, perspectiveMode(false)
			, zNear(0.0)
			, zFar(1.0)
		{}

		//! Zoom
		double zoom;
		//! Whether perspective mode is enabled or not
		bool perspectiveMode;
		//! Near clipping plane position (perspective mode only)
		double zNear;
		//! Far clipping plane position (perspective mode only)
		double zFar;
	};

	//! Applies filter to texture (depth + color)
	virtual void shade(	unsigned texDepth,
						unsigned texColor,
						ViewportParameters& parameters) = 0;

	//! Returns resulting texture
	virtual unsigned getTexture() = 0;

protected: //methods

	//! Sets whether the filter is valid
	inline void setValid(bool state) { m_isValid = state; }

	//! Returns whether the filter is valid
	inline bool isValid() const { return m_isValid; }

protected:

	//! Filter validity
	bool m_isValid;

	//! Filter description
	QString m_description;
};

#endif