Developer Documentation
Loading...
Searching...
No Matches
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
67namespace ACG {
68namespace SceneGraph {
69
70
71//== CLASS DEFINITION =========================================================
72
73
81class ACGDLLEXPORT ShaderNode : public BaseNode
82{
83public:
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
143private :
144 // Path to the shaders ( if set ). If empty shaders will not be used.
145 std::string shaderDir_;
146
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::SceneGraph::ShaderNode ShaderNode
Simple Name for ShaderNode.
GLSL fragment shader.
GLSL program class.
GLSL vertex shader.
Definition GLSLShader.hh:95
PickTarget
What target to use for picking.
Definition PickTarget.hh:74
Namespace providing different geometric functions concerning angles.