File: geometryshader.h

package info (click to toggle)
meshlab 2020.09%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 45,124 kB
  • sloc: cpp: 400,238; ansic: 31,952; javascript: 1,578; sh: 387; yacc: 238; lex: 139; python: 86; makefile: 29
file content (158 lines) | stat: -rw-r--r-- 3,743 bytes parent folder | download | duplicates (6)
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#ifndef GLW_GEOMETRYSHADER_H
#define GLW_GEOMETRYSHADER_H

#include "./shader.h"

namespace glw
{

class GeometryShaderArguments : public ShaderArguments
{
	public:

		typedef ShaderArguments       BaseType;
		typedef GeometryShaderArguments ThisType;

		GeometryShaderArguments(void)
			: BaseType()
		{
			;
		}

		void clear(void)
		{
			BaseType::clear();
		}
};

class GeometryShader : public Shader
{
	friend class Context;

	public:

		typedef Shader       BaseType;
		typedef GeometryShader ThisType;

		virtual Type type(void) const
		{
			return GeometryShaderType;
		}

	protected:

		GeometryShader(Context * ctx)
			: BaseType(ctx)
		{
			;
		}

		virtual GLenum shaderType(void) const
		{
			return GL_GEOMETRY_SHADER;
		}

		bool create(const GeometryShaderArguments & args)
		{
			return BaseType::create(args);
		}
};

namespace detail { template <> struct BaseOf <GeometryShader> { typedef Shader Type; }; };
typedef   detail::ObjectSharedPointerTraits  <GeometryShader> ::Type GeometryShaderPtr;

class SafeGeometryShader : public SafeShader
{
	friend class Context;
	friend class BoundGeometryShader;

	public:

		typedef SafeShader       BaseType;
		typedef SafeGeometryShader ThisType;

	protected:

		SafeGeometryShader(const GeometryShaderPtr & geometryShader)
			: BaseType(geometryShader)
		{
			;
		}

		const GeometryShaderPtr & object(void) const
		{
			return static_cast<const GeometryShaderPtr &>(BaseType::object());
		}

		GeometryShaderPtr & object(void)
		{
			return static_cast<GeometryShaderPtr &>(BaseType::object());
		}
};

namespace detail { template <> struct BaseOf     <SafeGeometryShader> { typedef SafeShader Type; }; };
namespace detail { template <> struct ObjectBase <SafeGeometryShader> { typedef GeometryShader     Type; }; };
namespace detail { template <> struct ObjectSafe <GeometryShader    > { typedef SafeGeometryShader Type; }; };
typedef   detail::ObjectSharedPointerTraits      <SafeGeometryShader> ::Type GeometryShaderHandle;

class GeometryShaderBindingParams : public ShaderBindingParams
{
	public:

		typedef ShaderBindingParams       BaseType;
		typedef GeometryShaderBindingParams ThisType;

		GeometryShaderBindingParams(void)
			: BaseType(GL_GEOMETRY_SHADER, 0)
		{
			;
		}
};

class BoundGeometryShader : public BoundShader
{
	friend class Context;

	public:

		typedef BoundShader       BaseType;
		typedef BoundGeometryShader ThisType;

		const GeometryShaderHandle & handle(void) const
		{
			return static_cast<const GeometryShaderHandle &>(BaseType::handle());
		}

		GeometryShaderHandle & handle(void)
		{
			return static_cast<GeometryShaderHandle &>(BaseType::handle());
		}

	protected:

		BoundGeometryShader(const GeometryShaderHandle & handle, const ShaderBindingParams & params)
			: BaseType(handle, params)
		{
			;
		}

		const GeometryShaderPtr & object(void) const
		{
			return this->handle()->object();
		}

		GeometryShaderPtr & object(void)
		{
			return this->handle()->object();
		}
};

namespace detail { template <> struct ParamsOf    <BoundGeometryShader> { typedef GeometryShaderBindingParams Type; }; };
namespace detail { template <> struct BaseOf      <BoundGeometryShader> { typedef BoundShader Type; }; };
namespace detail { template <> struct ObjectBase  <BoundGeometryShader> { typedef GeometryShader      Type; }; };
namespace detail { template <> struct ObjectBound <GeometryShader     > { typedef BoundGeometryShader Type; }; };
typedef   detail::ObjectSharedPointerTraits       <BoundGeometryShader> ::Type  BoundGeometryShaderHandle;

};

#endif // GLW_GEOMETRYSHADER_H