KiCad PCB EDA Suite
KIGFX::OPENGL_COMPOSITOR Class Reference

#include <opengl_compositor.h>

Inheritance diagram for KIGFX::OPENGL_COMPOSITOR:
KIGFX::COMPOSITOR

Classes

struct  OPENGL_BUFFER
 

Public Member Functions

 OPENGL_COMPOSITOR ()
 
virtual ~OPENGL_COMPOSITOR ()
 
virtual void Initialize () override
 Function Reset() performs primary initialiation, necessary to use the object. More...
 
virtual void Resize (unsigned int aWidth, unsigned int aHeight) override
 Function Resize() clears the state of COMPOSITOR, so it has to be reinitialized again with the new dimensions. More...
 
virtual unsigned int CreateBuffer () override
 Function CreateBuffer() prepares a new buffer that may be used as a rendering target. More...
 
virtual void SetBuffer (unsigned int aBufferHandle) override
 Function SetBuffer() sets the selected buffer as the rendering target. More...
 
virtual unsigned int GetBuffer () const override
 Function GetBuffer() returns currently used buffer handle. More...
 
virtual void ClearBuffer () override
 Function ClearBuffer() clears the selected buffer (set by the SetBuffer() function). More...
 
virtual void DrawBuffer (unsigned int aBufferHandle) override
 Function DrawBuffer() draws the selected buffer to the output buffer. More...
 
virtual void Begin () override
 Function Begin() Call this at the beginning of each frame. More...
 
virtual void Present () override
 Function Present() Call this to present the output buffer to the screen. More...
 
VECTOR2U GetScreenSize () const
 
GLenum GetBufferTexture (unsigned int aBufferHandle)
 
void DrawBuffer (unsigned int aSourceHandle, unsigned int aDestHandle)
 
unsigned int CreateBuffer (VECTOR2U aDimensions)
 
void SetAntialiasingMode (OPENGL_ANTIALIASING_MODE aMode)
 
OPENGL_ANTIALIASING_MODE GetAntialiasingMode () const
 

Static Public Attributes

static const unsigned int DIRECT_RENDERING = 0
 

Protected Types

typedef std::deque< OPENGL_BUFFEROPENGL_BUFFERS
 

Protected Member Functions

void bindFb (unsigned int aFb)
 Binds a specific Framebuffer Object. More...
 
void clean ()
 Function clean() performs freeing of resources. More...
 
unsigned int usedBuffers ()
 Returns number of used buffers. More...
 

Protected Attributes

bool m_initialized
 Initialization status flag. More...
 
unsigned int m_curBuffer
 Currently used buffer handle. More...
 
GLuint m_mainFbo
 Main FBO handle (storing all target textures) More...
 
GLuint m_depthBuffer
 Depth buffer handle. More...
 
OPENGL_BUFFERS m_buffers
 Stores information about initialized buffers. More...
 
GLuint m_curFbo
 Store the used FBO name in case there was more than one compositor used. More...
 
OPENGL_ANTIALIASING_MODE m_currentAntialiasingMode
 
std::unique_ptr< OPENGL_PRESENTORm_antialiasing
 
unsigned int m_width
 Width of the buffer (in pixels) More...
 
unsigned int m_height
 Height of the buffer (in pixels) More...
 

Detailed Description

Definition at line 43 of file opengl_compositor.h.

Member Typedef Documentation

Definition at line 107 of file opengl_compositor.h.

Constructor & Destructor Documentation

OPENGL_COMPOSITOR::OPENGL_COMPOSITOR ( )

Definition at line 39 of file opengl_compositor.cpp.

References m_antialiasing.

39  :
40  m_initialized( false ), m_curBuffer( 0 ),
43 {
44  m_antialiasing.reset( new ANTIALIASING_NONE( this ) );
45 }
unsigned int m_curBuffer
Currently used buffer handle.
bool m_initialized
Initialization status flag.
static const unsigned int DIRECT_RENDERING
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing
OPENGL_ANTIALIASING_MODE m_currentAntialiasingMode
GLuint m_curFbo
Store the used FBO name in case there was more than one compositor used.
GLuint m_mainFbo
Main FBO handle (storing all target textures)
GLuint m_depthBuffer
Depth buffer handle.
OPENGL_COMPOSITOR::~OPENGL_COMPOSITOR ( )
virtual

Definition at line 48 of file opengl_compositor.cpp.

References clean(), and m_initialized.

49 {
50  if( m_initialized )
51  clean();
52 }
bool m_initialized
Initialization status flag.
void clean()
Function clean() performs freeing of resources.

Member Function Documentation

void OPENGL_COMPOSITOR::Begin ( )
overridevirtual

Function Begin() Call this at the beginning of each frame.

Implements KIGFX::COMPOSITOR.

Definition at line 308 of file opengl_compositor.cpp.

References m_antialiasing.

Referenced by KIGFX::OPENGL_GAL::BeginDrawing().

309 {
310  m_antialiasing->Begin();
311 }
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing
void OPENGL_COMPOSITOR::bindFb ( unsigned int  aFb)
protected

Binds a specific Framebuffer Object.

Definition at line 373 of file opengl_compositor.cpp.

References checkGlError(), DIRECT_RENDERING, m_curFbo, and m_mainFbo.

Referenced by clean(), CreateBuffer(), Initialize(), and SetBuffer().

374 {
375  // Currently there are only 2 valid FBOs
376  assert( aFb == DIRECT_RENDERING || aFb == m_mainFbo );
377 
378  if( m_curFbo != aFb )
379  {
380  glBindFramebufferEXT( GL_FRAMEBUFFER, aFb );
381  checkGlError( "switching framebuffer" );
382  m_curFbo = aFb;
383  }
384 }
int checkGlError(const std::string &aInfo, bool aThrow)
Checks if one of recent OpenGL operations has failed.
Definition: utils.cpp:30
static const unsigned int DIRECT_RENDERING
GLuint m_curFbo
Store the used FBO name in case there was more than one compositor used.
GLuint m_mainFbo
Main FBO handle (storing all target textures)
void OPENGL_COMPOSITOR::clean ( )
protected

Function clean() performs freeing of resources.

Definition at line 387 of file opengl_compositor.cpp.

References bindFb(), DIRECT_RENDERING, m_buffers, m_depthBuffer, m_initialized, and m_mainFbo.

Referenced by Resize(), SetAntialiasingMode(), and ~OPENGL_COMPOSITOR().

388 {
389  assert( m_initialized );
390 
392 
393  for( OPENGL_BUFFERS::const_iterator it = m_buffers.begin(); it != m_buffers.end(); ++it )
394  {
395  glDeleteTextures( 1, &it->textureTarget );
396  }
397 
398  m_buffers.clear();
399 
400  glDeleteFramebuffersEXT( 1, &m_mainFbo );
401  glDeleteRenderbuffersEXT( 1, &m_depthBuffer );
402 
403  m_initialized = false;
404 }
void bindFb(unsigned int aFb)
Binds a specific Framebuffer Object.
bool m_initialized
Initialization status flag.
static const unsigned int DIRECT_RENDERING
GLuint m_mainFbo
Main FBO handle (storing all target textures)
GLuint m_depthBuffer
Depth buffer handle.
OPENGL_BUFFERS m_buffers
Stores information about initialized buffers.
void OPENGL_COMPOSITOR::ClearBuffer ( )
overridevirtual

Function ClearBuffer() clears the selected buffer (set by the SetBuffer() function).

Implements KIGFX::COMPOSITOR.

Definition at line 293 of file opengl_compositor.cpp.

References m_initialized.

Referenced by KIGFX::ANTIALIASING_SUPERSAMPLING::Begin(), KIGFX::ANTIALIASING_SMAA::Begin(), KIGFX::OPENGL_GAL::ClearTarget(), CreateBuffer(), and KIGFX::ANTIALIASING_SMAA::Present().

294 {
295  assert( m_initialized );
296 
297  glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
298  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );
299 }
bool m_initialized
Initialization status flag.
unsigned int OPENGL_COMPOSITOR::CreateBuffer ( )
overridevirtual

Function CreateBuffer() prepares a new buffer that may be used as a rendering target.

Returns
is the handle of the buffer. In case of failure 0 (zero) is returned as the handle.

Implements KIGFX::COMPOSITOR.

Definition at line 144 of file opengl_compositor.cpp.

References m_antialiasing.

Referenced by KIGFX::OPENGL_GAL::BeginDrawing(), KIGFX::ANTIALIASING_NONE::CreateBuffer(), KIGFX::ANTIALIASING_SUPERSAMPLING::CreateBuffer(), KIGFX::ANTIALIASING_SMAA::CreateBuffer(), KIGFX::ANTIALIASING_SUPERSAMPLING::Init(), and KIGFX::ANTIALIASING_SMAA::Init().

145 {
146  return m_antialiasing->CreateBuffer();
147 }
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing
unsigned int OPENGL_COMPOSITOR::CreateBuffer ( VECTOR2U  aDimensions)

Definition at line 150 of file opengl_compositor.cpp.

References bindFb(), checkGlError(), ClearBuffer(), DIRECT_RENDERING, m_buffers, m_initialized, m_mainFbo, usedBuffers(), VECTOR2< T >::x, and VECTOR2< T >::y.

151 {
152  assert( m_initialized );
153 
154  int maxBuffers, maxTextureSize;
155 
156  // Get the maximum number of buffers
157  glGetIntegerv( GL_MAX_COLOR_ATTACHMENTS, (GLint*) &maxBuffers );
158 
159  if( (int) usedBuffers() >= maxBuffers )
160  {
161  throw std::runtime_error( "Cannot create more framebuffers. OpenGL rendering "
162  "backend requires at least 3 framebuffers. You may try to update/change "
163  "your graphic drivers." );
164  }
165 
166  glGetIntegerv( GL_MAX_TEXTURE_SIZE, (GLint*) &maxTextureSize );
167 
168  if( maxTextureSize < (int) aDimensions.x || maxTextureSize < (int) aDimensions.y )
169  {
170  throw std::runtime_error( "Requested texture size is not supported. "
171  "Could not create a buffer." );
172  }
173 
174  // GL_COLOR_ATTACHMENTn are consecutive integers
175  GLuint attachmentPoint = GL_COLOR_ATTACHMENT0 + usedBuffers();
176  GLuint textureTarget;
177 
178  // Generate the texture for the pixel storage
179  glActiveTexture( GL_TEXTURE0 );
180  glGenTextures( 1, &textureTarget );
181  checkGlError( "generating framebuffer texture target" );
182  glBindTexture( GL_TEXTURE_2D, textureTarget );
183  checkGlError( "binding framebuffer texture target" );
184 
185  // Set texture parameters
186  glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
187  glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, aDimensions.x, aDimensions.y, 0, GL_RGBA,
188  GL_UNSIGNED_BYTE, NULL );
189  checkGlError( "creating framebuffer texture" );
190  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
191  glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
192 
193  // Bind the texture to the specific attachment point, clear and rebind the screen
194  bindFb( m_mainFbo );
195  glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, attachmentPoint,
196  GL_TEXTURE_2D, textureTarget, 0 );
197 
198  // Check the status, exit if the framebuffer can't be created
199  GLenum status = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
200 
201  if( status != GL_FRAMEBUFFER_COMPLETE_EXT )
202  {
203  switch( status )
204  {
205  case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
206  throw std::runtime_error( "The framebuffer attachment points are incomplete." );
207  break;
208 
209  case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
210  throw std::runtime_error( "No images attached to the framebuffer." );
211  break;
212 
213  case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
214  throw std::runtime_error( "The framebuffer does not have at least one "
215  "image attached to it." );
216  break;
217 
218  case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
219  throw std::runtime_error( "The framebuffer read buffer is incomplete." );
220  break;
221 
222  case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
223  throw std::runtime_error( "The combination of internal formats of the attached "
224  "images violates an implementation-dependent set of restrictions." );
225  break;
226 
227  case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT:
228  throw std::runtime_error( "GL_RENDERBUFFER_SAMPLES is not the same for "
229  "all attached renderbuffers" );
230  break;
231 
232  case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT:
233  throw std::runtime_error( "Framebuffer incomplete layer targets errors." );
234  break;
235 
236  case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
237  throw std::runtime_error( "Framebuffer attachments have different dimensions" );
238  break;
239 
240  default:
241  throw std::runtime_error( "Unknown error occurred when creating the framebuffer." );
242  break;
243  }
244 
245  return 0;
246  }
247 
248  ClearBuffer();
249 
250  // Return to direct rendering (we were asked only to create a buffer, not switch to one)
252 
253  // Store the new buffer
254  OPENGL_BUFFER buffer = { aDimensions, textureTarget, attachmentPoint };
255  m_buffers.push_back( buffer );
256 
257  return usedBuffers();
258 }
void bindFb(unsigned int aFb)
Binds a specific Framebuffer Object.
unsigned int usedBuffers()
Returns number of used buffers.
int checkGlError(const std::string &aInfo, bool aThrow)
Checks if one of recent OpenGL operations has failed.
Definition: utils.cpp:30
bool m_initialized
Initialization status flag.
static const unsigned int DIRECT_RENDERING
virtual void ClearBuffer() override
Function ClearBuffer() clears the selected buffer (set by the SetBuffer() function).
GLuint m_mainFbo
Main FBO handle (storing all target textures)
OPENGL_BUFFERS m_buffers
Stores information about initialized buffers.
void OPENGL_COMPOSITOR::DrawBuffer ( unsigned int  aBufferHandle)
overridevirtual

Function DrawBuffer() draws the selected buffer to the output buffer.

Parameters
aBufferHandleis the handle of the buffer to be drawn.

Implements KIGFX::COMPOSITOR.

Definition at line 314 of file opengl_compositor.cpp.

References m_antialiasing.

Referenced by KIGFX::ANTIALIASING_NONE::DrawBuffer(), KIGFX::ANTIALIASING_SUPERSAMPLING::DrawBuffer(), KIGFX::ANTIALIASING_SMAA::DrawBuffer(), and KIGFX::OPENGL_GAL::EndDrawing().

315 {
316  m_antialiasing->DrawBuffer( aBufferHandle );
317 }
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing
void OPENGL_COMPOSITOR::DrawBuffer ( unsigned int  aSourceHandle,
unsigned int  aDestHandle 
)

Definition at line 320 of file opengl_compositor.cpp.

References m_buffers, m_initialized, SetBuffer(), and usedBuffers().

321 {
322  assert( m_initialized );
323  assert( aSourceHandle != 0 && aSourceHandle <= usedBuffers() );
324  assert( aDestHandle <= usedBuffers() );
325 
326  // Switch to the destination buffer and blit the scene
327  SetBuffer ( aDestHandle );
328 
329  // Depth test has to be disabled to make transparency working
330  glDisable( GL_DEPTH_TEST );
331  glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );
332 
333  // Enable texturing and bind the main texture
334  glEnable( GL_TEXTURE_2D );
335  glBindTexture( GL_TEXTURE_2D, m_buffers[aSourceHandle - 1].textureTarget );
336 
337  // Draw a full screen quad with the texture
338  glMatrixMode( GL_MODELVIEW );
339  glPushMatrix();
340  glLoadIdentity();
341  glMatrixMode( GL_PROJECTION );
342  glPushMatrix();
343  glLoadIdentity();
344 
345  glBegin( GL_TRIANGLES );
346  glTexCoord2f( 0.0f, 1.0f );
347  glVertex2f ( -1.0f, 1.0f );
348  glTexCoord2f( 0.0f, 0.0f );
349  glVertex2f ( -1.0f, -1.0f );
350  glTexCoord2f( 1.0f, 1.0f );
351  glVertex2f ( 1.0f, 1.0f );
352 
353  glTexCoord2f( 1.0f, 1.0f );
354  glVertex2f ( 1.0f, 1.0f );
355  glTexCoord2f( 0.0f, 0.0f );
356  glVertex2f ( -1.0f, -1.0f );
357  glTexCoord2f( 1.0f, 0.0f );
358  glVertex2f ( 1.0f, -1.0f );
359  glEnd();
360 
361  glPopMatrix();
362  glMatrixMode( GL_MODELVIEW );
363  glPopMatrix();
364 }
unsigned int usedBuffers()
Returns number of used buffers.
bool m_initialized
Initialization status flag.
virtual void SetBuffer(unsigned int aBufferHandle) override
Function SetBuffer() sets the selected buffer as the rendering target.
OPENGL_BUFFERS m_buffers
Stores information about initialized buffers.
OPENGL_ANTIALIASING_MODE OPENGL_COMPOSITOR::GetAntialiasingMode ( ) const

Definition at line 64 of file opengl_compositor.cpp.

References m_currentAntialiasingMode.

Referenced by KIGFX::OPENGL_GAL::updatedGalDisplayOptions().

65 {
67 }
OPENGL_ANTIALIASING_MODE m_currentAntialiasingMode
virtual unsigned int KIGFX::OPENGL_COMPOSITOR::GetBuffer ( ) const
inlineoverridevirtual

Function GetBuffer() returns currently used buffer handle.

Returns
Currently used buffer handle.

Implements KIGFX::COMPOSITOR.

Definition at line 62 of file opengl_compositor.h.

References DIRECT_RENDERING, m_curBuffer, and m_curFbo.

Referenced by KIGFX::OPENGL_GAL::ClearTarget().

63  {
64  if( m_curFbo == DIRECT_RENDERING )
65  return DIRECT_RENDERING;
66 
67  return m_curBuffer + 1;
68  }
unsigned int m_curBuffer
Currently used buffer handle.
static const unsigned int DIRECT_RENDERING
GLuint m_curFbo
Store the used FBO name in case there was more than one compositor used.
GLenum OPENGL_COMPOSITOR::GetBufferTexture ( unsigned int  aBufferHandle)

Definition at line 261 of file opengl_compositor.cpp.

References m_buffers, and usedBuffers().

Referenced by KIGFX::ANTIALIASING_SUPERSAMPLING::Present(), and KIGFX::ANTIALIASING_SMAA::Present().

262 {
263  assert( aBufferHandle > 0 && aBufferHandle <= usedBuffers() );
264  return m_buffers[aBufferHandle - 1].textureTarget;
265 }
unsigned int usedBuffers()
Returns number of used buffers.
OPENGL_BUFFERS m_buffers
Stores information about initialized buffers.
void OPENGL_COMPOSITOR::Initialize ( )
overridevirtual

Function Reset() performs primary initialiation, necessary to use the object.

Implements KIGFX::COMPOSITOR.

Definition at line 70 of file opengl_compositor.cpp.

References bindFb(), checkGlError(), DIRECT_RENDERING, KIGFX::HIGH, m_antialiasing, m_currentAntialiasingMode, m_depthBuffer, m_initialized, m_mainFbo, KIGFX::NONE, KIGFX::SUBSAMPLE_HIGH, KIGFX::SUBSAMPLE_ULTRA, KIGFX::SUPERSAMPLING_X2, KIGFX::SUPERSAMPLING_X4, KIGFX::ULTRA, VECTOR2< T >::x, KIGFX::X2, KIGFX::X4, and VECTOR2< T >::y.

Referenced by KIGFX::OPENGL_GAL::BeginDrawing().

71 {
72  if( m_initialized )
73  return;
74 
76  {
78  m_antialiasing.reset( new ANTIALIASING_NONE( this ) );
79  break;
82  break;
85  break;
88  break;
91  break;
92  }
93 
94  VECTOR2U dims = m_antialiasing->GetInternalBufferSize();
95  assert( dims.x != 0 && dims.y != 0 );
96 
97  GLint maxBufSize;
98  glGetIntegerv( GL_MAX_RENDERBUFFER_SIZE_EXT, &maxBufSize );
99 
100  // VECTOR2U is unsigned, so no need to check if < 0
101  if( dims.x > (unsigned) maxBufSize || dims.y >= (unsigned) maxBufSize )
102  throw std::runtime_error( "Requested render buffer size is not supported" );
103 
104  // We need framebuffer objects for drawing the screen contents
105  // Generate framebuffer and a depth buffer
106  glGenFramebuffersEXT( 1, &m_mainFbo );
107  checkGlError( "generating framebuffer" );
108  bindFb( m_mainFbo );
109 
110  // Allocate memory for the depth buffer
111  // Attach the depth buffer to the framebuffer
112  glGenRenderbuffersEXT( 1, &m_depthBuffer );
113  checkGlError( "generating renderbuffer" );
114  glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, m_depthBuffer );
115  checkGlError( "binding renderbuffer" );
116 
117  glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8, dims.x, dims.y );
118  checkGlError( "creating renderbuffer storage" );
119  glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT,
120  GL_RENDERBUFFER_EXT, m_depthBuffer );
121  checkGlError( "attaching renderbuffer" );
122 
123  // Unbind the framebuffer, so by default all the rendering goes directly to the display
125 
126  m_initialized = true;
127 
128  m_antialiasing->Init();
129 }
void bindFb(unsigned int aFb)
Binds a specific Framebuffer Object.
int checkGlError(const std::string &aInfo, bool aThrow)
Checks if one of recent OpenGL operations has failed.
Definition: utils.cpp:30
bool m_initialized
Initialization status flag.
static const unsigned int DIRECT_RENDERING
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing
OPENGL_ANTIALIASING_MODE m_currentAntialiasingMode
GLuint m_mainFbo
Main FBO handle (storing all target textures)
GLuint m_depthBuffer
Depth buffer handle.
void OPENGL_COMPOSITOR::Present ( )
overridevirtual

Function Present() Call this to present the output buffer to the screen.

Implements KIGFX::COMPOSITOR.

Definition at line 367 of file opengl_compositor.cpp.

References m_antialiasing.

Referenced by KIGFX::OPENGL_GAL::EndDrawing().

368 {
369  m_antialiasing->Present();
370 }
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing
void OPENGL_COMPOSITOR::Resize ( unsigned int  aWidth,
unsigned int  aHeight 
)
overridevirtual

Function Resize() clears the state of COMPOSITOR, so it has to be reinitialized again with the new dimensions.

Parameters
aWidthis the framebuffer width (in pixels).
aHeightis the framebuffer height (in pixels).

Implements KIGFX::COMPOSITOR.

Definition at line 132 of file opengl_compositor.cpp.

References clean(), m_antialiasing, KIGFX::COMPOSITOR::m_height, m_initialized, and KIGFX::COMPOSITOR::m_width.

Referenced by KIGFX::OPENGL_GAL::ResizeScreen().

133 {
134  if( m_initialized )
135  clean();
136 
137  m_antialiasing->OnLostBuffers();
138 
139  m_width = aWidth;
140  m_height = aHeight;
141 }
unsigned int m_width
Width of the buffer (in pixels)
Definition: compositor.h:117
bool m_initialized
Initialization status flag.
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing
void clean()
Function clean() performs freeing of resources.
unsigned int m_height
Height of the buffer (in pixels)
Definition: compositor.h:118
void OPENGL_COMPOSITOR::SetAntialiasingMode ( OPENGL_ANTIALIASING_MODE  aMode)

Definition at line 55 of file opengl_compositor.cpp.

References clean(), m_currentAntialiasingMode, and m_initialized.

Referenced by KIGFX::OPENGL_GAL::OPENGL_GAL(), and KIGFX::OPENGL_GAL::updatedGalDisplayOptions().

56 {
58 
59  if( m_initialized )
60  clean();
61 }
bool m_initialized
Initialization status flag.
OPENGL_ANTIALIASING_MODE m_currentAntialiasingMode
void clean()
Function clean() performs freeing of resources.
void OPENGL_COMPOSITOR::SetBuffer ( unsigned int  aBufferHandle)
overridevirtual

Function SetBuffer() sets the selected buffer as the rendering target.

All the following drawing functions are going to be rendered in the selected buffer.

Parameters
aBufferHandleis the handle of the buffer or 0 in case of rendering directly to the display.

Implements KIGFX::COMPOSITOR.

Definition at line 268 of file opengl_compositor.cpp.

References bindFb(), checkGlError(), DIRECT_RENDERING, GetScreenSize(), m_buffers, m_curBuffer, m_curFbo, m_initialized, m_mainFbo, and usedBuffers().

Referenced by KIGFX::ANTIALIASING_SUPERSAMPLING::Begin(), KIGFX::ANTIALIASING_SMAA::Begin(), KIGFX::OPENGL_GAL::BeginDrawing(), KIGFX::OPENGL_GAL::blitCursor(), KIGFX::OPENGL_GAL::ClearScreen(), KIGFX::OPENGL_GAL::ClearTarget(), DrawBuffer(), KIGFX::OPENGL_GAL::DrawGrid(), KIGFX::OPENGL_GAL::EndDrawing(), KIGFX::ANTIALIASING_SUPERSAMPLING::Present(), and KIGFX::ANTIALIASING_SMAA::Present().

269 {
270  assert( m_initialized );
271  assert( aBufferHandle <= usedBuffers() );
272 
273  // Either unbind the FBO for direct rendering, or bind the one with target textures
274  bindFb( aBufferHandle == DIRECT_RENDERING ? DIRECT_RENDERING : m_mainFbo );
275 
276  // Switch the target texture
277  if( m_curFbo != DIRECT_RENDERING )
278  {
279  m_curBuffer = aBufferHandle - 1;
280  glDrawBuffer( m_buffers[m_curBuffer].attachmentPoint );
281  checkGlError( "setting draw buffer" );
282 
283  glViewport( 0, 0,
284  m_buffers[m_curBuffer].dimensions.x, m_buffers[m_curBuffer].dimensions.y );
285  }
286  else
287  {
288  glViewport( 0, 0, GetScreenSize().x, GetScreenSize().y );
289  }
290 }
unsigned int m_curBuffer
Currently used buffer handle.
void bindFb(unsigned int aFb)
Binds a specific Framebuffer Object.
unsigned int usedBuffers()
Returns number of used buffers.
int checkGlError(const std::string &aInfo, bool aThrow)
Checks if one of recent OpenGL operations has failed.
Definition: utils.cpp:30
bool m_initialized
Initialization status flag.
static const unsigned int DIRECT_RENDERING
GLuint m_curFbo
Store the used FBO name in case there was more than one compositor used.
GLuint m_mainFbo
Main FBO handle (storing all target textures)
VECTOR2U GetScreenSize() const
OPENGL_BUFFERS m_buffers
Stores information about initialized buffers.
unsigned int KIGFX::OPENGL_COMPOSITOR::usedBuffers ( )
inlineprotected

Returns number of used buffers.

Definition at line 128 of file opengl_compositor.h.

Referenced by CreateBuffer(), DrawBuffer(), GetBufferTexture(), and SetBuffer().

129  {
130  return m_buffers.size();
131  }
OPENGL_BUFFERS m_buffers
Stores information about initialized buffers.

Member Data Documentation

std::unique_ptr<OPENGL_PRESENTOR> KIGFX::OPENGL_COMPOSITOR::m_antialiasing
protected
OPENGL_BUFFERS KIGFX::OPENGL_COMPOSITOR::m_buffers
protected

Stores information about initialized buffers.

Definition at line 110 of file opengl_compositor.h.

Referenced by clean(), CreateBuffer(), DrawBuffer(), GetBufferTexture(), and SetBuffer().

unsigned int KIGFX::OPENGL_COMPOSITOR::m_curBuffer
protected

Currently used buffer handle.

Definition at line 104 of file opengl_compositor.h.

Referenced by GetBuffer(), and SetBuffer().

GLuint KIGFX::OPENGL_COMPOSITOR::m_curFbo
protected

Store the used FBO name in case there was more than one compositor used.

Definition at line 113 of file opengl_compositor.h.

Referenced by bindFb(), GetBuffer(), and SetBuffer().

OPENGL_ANTIALIASING_MODE KIGFX::OPENGL_COMPOSITOR::m_currentAntialiasingMode
protected

Definition at line 115 of file opengl_compositor.h.

Referenced by GetAntialiasingMode(), Initialize(), and SetAntialiasingMode().

GLuint KIGFX::OPENGL_COMPOSITOR::m_depthBuffer
protected

Depth buffer handle.

Definition at line 106 of file opengl_compositor.h.

Referenced by clean(), and Initialize().

unsigned int KIGFX::COMPOSITOR::m_height
protectedinherited

Height of the buffer (in pixels)

Definition at line 118 of file compositor.h.

Referenced by KIGFX::CAIRO_COMPOSITOR::CreateBuffer(), GetScreenSize(), KIGFX::CAIRO_COMPOSITOR::Resize(), and Resize().

bool KIGFX::OPENGL_COMPOSITOR::m_initialized
protected

Initialization status flag.

Definition at line 103 of file opengl_compositor.h.

Referenced by clean(), ClearBuffer(), CreateBuffer(), DrawBuffer(), Initialize(), Resize(), SetAntialiasingMode(), SetBuffer(), and ~OPENGL_COMPOSITOR().

GLuint KIGFX::OPENGL_COMPOSITOR::m_mainFbo
protected

Main FBO handle (storing all target textures)

Definition at line 105 of file opengl_compositor.h.

Referenced by bindFb(), clean(), CreateBuffer(), Initialize(), and SetBuffer().

unsigned int KIGFX::COMPOSITOR::m_width
protectedinherited

Width of the buffer (in pixels)

Definition at line 117 of file compositor.h.

Referenced by KIGFX::CAIRO_COMPOSITOR::CreateBuffer(), GetScreenSize(), KIGFX::CAIRO_COMPOSITOR::Resize(), and Resize().


The documentation for this class was generated from the following files: