Developer Documentation

ShaderNode.hh
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4 * Copyright (c) 2001-2015, RWTH-Aachen University *
5 * Department of Computer Graphics and Multimedia *
6 * All rights reserved. *
7 * www.openflipper.org *
8 * *
9 *---------------------------------------------------------------------------*
10 * This file is part of OpenFlipper. *
11 *---------------------------------------------------------------------------*
12 * *
13 * Redistribution and use in source and binary forms, with or without *
14 * modification, are permitted provided that the following conditions *
15 * are met: *
16 * *
17 * 1. Redistributions of source code must retain the above copyright notice, *
18 * this list of conditions and the following disclaimer. *
19 * *
20 * 2. Redistributions in binary form must reproduce the above copyright *
21 * notice, this list of conditions and the following disclaimer in the *
22 * documentation and/or other materials provided with the distribution. *
23 * *
24 * 3. Neither the name of the copyright holder nor the names of its *
25 * contributors may be used to endorse or promote products derived from *
26 * this software without specific prior written permission. *
27 * *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40 \*===========================================================================*/
41
42
43
44
45
46
47 //=============================================================================
48 //
49 // CLASS ShaderNode
50 //
51 //=============================================================================
52
53 #ifndef ACG_SHADER_NODE_HH
54 #define ACG_SHADER_NODE_HH
55
56
57 //== INCLUDES =================================================================
58
59 #include "BaseNode.hh"
60 #include <string>
61
62 #include "../ShaderUtils/GLSLShader.hh"
63 #include <ACG/Scenegraph/DrawModes.hh>
64
65 //== NAMESPACES ===============================================================
66
67 namespace ACG {
68 namespace SceneGraph {
69
70
71 //== CLASS DEFINITION =========================================================
72
73
81 class ACGDLLEXPORT ShaderNode : public BaseNode
82 {
83 public:
84
86 ShaderNode( BaseNode* _parent = 0,
87 const std::string& _name = "<ShaderNode>" );
88
90 virtual ~ShaderNode();
91
92
93 ACG_CLASSNAME(ShaderNode);
94
96 void enter(GLState& /*_state*/, const DrawModes::DrawMode& _drawmode) override;
98 void leave(GLState& /*_state*/, const DrawModes::DrawMode& _drawmode) override;
99
101 void enterPick(GLState& /*_state*/, PickTarget _target, const DrawModes::DrawMode& _drawmode) override;
103 void leavePick(GLState& /*_state*/, PickTarget _target, const DrawModes::DrawMode& _drawmode) override;
104
105
107 void setShaderDir( std::string _shaderDir);
108
109 std::string shaderDir() { return shaderDir_; };
110
111 std::string vertexShaderName(DrawModes::DrawMode _drawmode, bool _pick = false);
112
113 std::string fragmentShaderName(DrawModes::DrawMode _drawmode, bool _pick = false);
114
118 void disableShader (DrawModes::DrawMode _drawmode);
119
128 void setShader( DrawModes::DrawMode _drawmode ,
129 const std::string& _vertexShader,
130 const std::string& _fragmentShader,
131 std::string _pickVertexShader = "",
132 std::string _pickFragmentShader = "");
133
135 GLSL::PtrProgram getShader( DrawModes::DrawMode _drawmode, bool _pick = false);
136
138 bool hasShader( DrawModes::DrawMode _drawmode, bool _pick = false);
139
141 DrawModes::DrawMode availableDrawModes() const override;
142
143 private :
144 // Path to the shaders ( if set ). If empty shaders will not be used.
145 std::string shaderDir_;
146
147 class ShaderInfo {
148
149 public :
150 ShaderInfo() :
151 vertexShader(0),
152 vertexShaderFile(""),
153 fragmentShader(0),
154 fragmentShaderFile(""),
155 program(0),
156 initialized(false)
157 {
158 };
159
160 GLSL::PtrVertexShader vertexShader;
161 std::string vertexShaderFile;
162
163 GLSL::PtrFragmentShader fragmentShader;
164 std::string fragmentShaderFile;
165
166 GLSL::PtrProgram program;
167
168 bool initialized;
169 };
170
171 std::map< size_t, ShaderInfo> shaders;
172 std::map< size_t, ShaderInfo> pickShaders;
173 };
174
175
176 //=============================================================================
177 } // namespace SceneGraph
178 } // namespace ACG
179 //=============================================================================
180 #endif // ACG_SHADER_NODE_HH defined
181 //=============================================================================
182
ACG::GLState
Definition: GLState.hh:213
ACG
Namespace providing different geometric functions concerning angles.
Definition: BaseObjectData.hh:68
GLSL::FragmentShader
GLSL fragment shader.
Definition: GLSLShader.hh:110
ACG::SceneGraph::ShaderNode
Definition: ShaderNode.hh:81
GLSL::VertexShader
GLSL vertex shader.
Definition: GLSLShader.hh:95
SceneGraph
Definition: QtPrincipalAxisDialog.hh:67
ACG::SceneGraph::PickTarget
PickTarget
What target to use for picking.
Definition: PickTarget.hh:73
GLSL::Program
GLSL program class.
Definition: GLSLShader.hh:211
ACG::SceneGraph::BaseNode
Definition: BaseNode.hh:104
ACG::SceneGraph::DrawModes::DrawMode
Specifies a DrawMode.
Definition: DrawModes.hh:288
ACG::SceneGraph::ShaderNode::ShaderInfo
Definition: ShaderNode.hh:147
ShaderNode
ACG::SceneGraph::ShaderNode ShaderNode
Simple Name for ShaderNode.
Definition: SplatCloudTypes.hh:73