Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
PerPixelProcessingBase.hh
1 /*
2  This file is part of the BIAS library (Basic ImageAlgorithmS).
3 
4  Copyright (C) 2003-2009 (see file CONTACT for details)
5  Multimediale Systeme der Informationsverarbeitung
6  Institut fuer Informatik
7  Christian-Albrechts-Universitaet Kiel
8 
9 
10  BIAS is free software; you can redistribute it and/or modify
11  it under the terms of the GNU Lesser General Public License as published by
12  the Free Software Foundation; either version 2.1 of the License, or
13  (at your option) any later version.
14 
15  BIAS is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with BIAS; if not, write to the Free Software
22  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23  */
24 
25 #ifndef __PERPIXEL_PROCESSING_BASE_HH__
26 #define __PERPIXEL_PROCESSING_BASE_HH__
27 
28 #include <OpenGLFramework/Base/glfTexture2D.hh>
29 #include <OpenGLFramework/Base/glfBatch.hh>
30 #include <OpenGLFramework/Base/glfScreen.hh>
31 #include <OpenGLFramework/Base/glfFramebufferObject.hh>
32 #include <OpenGLFramework/Utils/Primitives.hh>
33 
34 #include <bias_config.h>
35 
36 namespace BIAS {
37 
38 /**
39  * @brief
40  * this class can be used as a simple base class for specialized batches
41  *
42  * usage : seed for example SeparabelBoxlFilter or DisparityInterpolator
43  *
44  * \author frick
45  **/
46 
47 class BIASOpenGLFramework_EXPORT PerPixelProcessingBase {
48 public:
50  virtual ~PerPixelProcessingBase();
51 
52  void SetViewPort(unsigned int width, unsigned int height) {
53  viewport_.SetSize(width, height);
54  viewport_.SetOrigin(0, 0);
55  }
56 
57  unsigned int GetViewportWidth() {
58  return viewport_.GetWidth();
59  }
60  unsigned int GetViewportHeight() {
61  return viewport_.GetHeight();
62  }
63 
64  void SetRenderTarget(glfFramebufferObject* renderTarget) {
65  if (renderTargetCreated_) {
66  delete renderTargetP_;
67  if (zBufferP_ != NULL)
68  delete zBufferP_;
69  if (textureP_ != NULL)
70  delete textureP_;
71  renderTargetP_ = NULL;
72  zBufferP_ = NULL;
73  textureP_ = NULL;
74  }
75 
76  renderTargetP_ = renderTarget;
77  batch_.SetRenderTarget(renderTarget);
78 
79  renderTargetCreated_ = false;
80  }
81 
82  glfShaderProgram* CreateFragmentShaderProgram(
83  const std::string& fragmentShaderCode);
84 
85  glfShaderProgram* CreateFragmentShaderProgramFromFile(
86  const std::string& fragmentShaderPath);
87 
89 
90  if (renderTargetCreated_) {
91  delete renderTargetP_;
92  if (zBufferP_ != NULL)
93  delete zBufferP_;
94  if (textureP_ != NULL)
95  delete textureP_;
96  renderTargetP_ = NULL;
97  zBufferP_ = NULL;
98  textureP_ = NULL;
99 
100  renderTargetCreated_ = false;
101  }
102 
103 
104  batch_.SetRenderTarget(&glfScreen::GetInstance());
105  batch_.SetShaderProgram(NULL);
106  }
107 
108  void SetDefaultFloatRenderTarget(unsigned int width, unsigned height);
109  void SetDefaultRGBRenderTarget(unsigned int width, unsigned height);
110  void SetDefaultRenderTarget(unsigned int width, unsigned height, GLenum internalFormat=GL_LUMINANCE32F_ARB);
111 
113  return zBufferP_;
114  }
116  return textureP_;
117  }
118 
120  if (textureP_ != NULL) {
121  textureP_->CopyToImage(texture);
122  } else {
123  return -1;
124  }
125 
126  return 0;
127  }
128 
130  return renderTargetP_;
131  }
132 
133 protected:
134  void InitBatch_() {
135  batch_.SetElementBuffer(&elements_);
136  batch_.SetVertexBuffer(&vertices_);
137  batch_.SetViewport(&viewport_);
138  batch_.SetModelViewMatrix(&modelViewMatrix_);
139  batch_.SetProjectionMatrix(&projectionMatrix_);
140  batch_.SetDepthBufferMode(&depthBufferMode_);
141 
142  depthBufferMode_.SetDepthTest(true);
143 
144  InitPrimitiveData_();
145  InitVertexTransformation_();
146  }
147 
149  Primitives::PlainQuad2DWithTexture2D(vertices_, elements_, false);
150  }
151 
153  modelViewMatrix_.MakeIdentity();
154  projectionMatrix_.MakeIdentity();
155  }
156 
158  return &batch_;
159  }
160 
161  glfVertexBuffer* GetVertexBuffer_();
162 
163  glfElementBuffer* GetElementBuffer_();
164 
165  glfMatrix* GetModelViewMatrix_();
166 
167  glfMatrix* GetProjectionMatrix_();
168 
170  return &viewport_;
171  }
173  return &depthBufferMode_;
174  }
175 
177  return fragmentShaderP_;
178  }
179 
181  return shaderProgramP_;
182  }
183 private:
184  bool renderTargetCreated_;
185 
186  glfBatch batch_;
187  glfVertexBuffer vertices_;
188  glfElementBuffer elements_;
189  glfMatrix modelViewMatrix_;
190  glfMatrix projectionMatrix_;
191  glfViewport viewport_;
192  glfDepthBufferMode depthBufferMode_;
193  glfFramebufferObject* renderTargetP_;
194  glfTexture2D* zBufferP_;
195  glfTexture2D* textureP_;
196  glfShaderProgram* shaderProgramP_;
197  glfShader* fragmentShaderP_;
198 
199 };
200 }
201 
202 #endif /* PERPIXELPROCESSINGBASE_HH_ */
An element buffer contains vertex indices that form primitives.
Defines the usage of the depth buffer.
A 2D texture.
Definition: glfTexture2D.hh:40
void SetViewPort(unsigned int width, unsigned int height)
glfTexture2D * GetZBufferFromDefaultRenderTarget()
int GetTextureFromDefaultRenderTarget(ImageBase &texture)
A vertex buffer contains an array of vertices that can be used for rendering.
A batch represents a single Draw call including all parameters (render states).
Definition: glfBatch.hh:48
A shader program composed of several shaders.
A GLSL vertex shader or fragment shader, which must be linked in a shader program.
Definition: glfShader.hh:39
glfDepthBufferMode * GetDepthBufferMode_()
static glfScreen & GetInstance()
Returns the global screen instance.
Definition: glfScreen.cpp:30
class for setting viewports
Definition: glfViewport.hh:37
glfFramebufferObject * GetRenderTarget()
static void PlainQuad2DWithTexture2D(BIAS::glfVertexBuffer &vb, BIAS::glfElementBuffer &eb, bool flip=false)
Vertex Order: 3–2 | | 0–1 .
Definition: Primitives.cpp:263
A 4x4 matrix in native OpenGL format.
Definition: glfMatrix.hh:41
this class can be used as a simple base class for specialized batches
glfTexture2D * GetTextureFromDefaultRenderTarget()
void SetRenderTarget(glfFramebufferObject *renderTarget)
This is the base class for images in BIAS.
Definition: ImageBase.hh:102