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 (const COLOR4D &aColor) 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 41 of file opengl_compositor.cpp.

References m_antialiasing.

41  :
42  m_initialized( false ), m_curBuffer( 0 ),
45 {
46  m_antialiasing.reset( new ANTIALIASING_NONE( this ) );
47 }
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 50 of file opengl_compositor.cpp.

References clean(), and m_initialized.

51 {
52  if( m_initialized )
53  clean();
54 }
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 310 of file opengl_compositor.cpp.

References m_antialiasing.

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

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

Binds a specific Framebuffer Object.

Definition at line 375 of file opengl_compositor.cpp.

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

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

376 {
377  // Currently there are only 2 valid FBOs
378  assert( aFb == DIRECT_RENDERING || aFb == m_mainFbo );
379 
380  if( m_curFbo != aFb )
381  {
382  glBindFramebufferEXT( GL_FRAMEBUFFER, aFb );
383  checkGlError( "switching framebuffer" );
384  m_curFbo = aFb;
385  }
386 }
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 389 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().

390 {
391  assert( m_initialized );
392 
394 
395  for( OPENGL_BUFFERS::const_iterator it = m_buffers.begin(); it != m_buffers.end(); ++it )
396  {
397  glDeleteTextures( 1, &it->textureTarget );
398  }
399 
400  m_buffers.clear();
401 
402  glDeleteFramebuffersEXT( 1, &m_mainFbo );
403  glDeleteRenderbuffersEXT( 1, &m_depthBuffer );
404 
405  m_initialized = false;
406 }
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 ( const COLOR4D aColor)
overridevirtual

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

Implements KIGFX::COMPOSITOR.

Definition at line 295 of file opengl_compositor.cpp.

References KIGFX::COLOR4D::b, KIGFX::COLOR4D::g, m_initialized, and KIGFX::COLOR4D::r.

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

296 {
297  assert( m_initialized );
298 
299  glClearColor( aColor.r, aColor.g, aColor.b, 0.0f );
300  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );
301 }
double g
Green component.
Definition: color4d.h:292
bool m_initialized
Initialization status flag.
double b
Blue component.
Definition: color4d.h:293
double r
Red component.
Definition: color4d.h:291
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 146 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().

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

Definition at line 152 of file opengl_compositor.cpp.

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

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

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

Definition at line 322 of file opengl_compositor.cpp.

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

323 {
324  assert( m_initialized );
325  assert( aSourceHandle != 0 && aSourceHandle <= usedBuffers() );
326  assert( aDestHandle <= usedBuffers() );
327 
328  // Switch to the destination buffer and blit the scene
329  SetBuffer ( aDestHandle );
330 
331  // Depth test has to be disabled to make transparency working
332  glDisable( GL_DEPTH_TEST );
333  glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA );
334 
335  // Enable texturing and bind the main texture
336  glEnable( GL_TEXTURE_2D );
337  glBindTexture( GL_TEXTURE_2D, m_buffers[aSourceHandle - 1].textureTarget );
338 
339  // Draw a full screen quad with the texture
340  glMatrixMode( GL_MODELVIEW );
341  glPushMatrix();
342  glLoadIdentity();
343  glMatrixMode( GL_PROJECTION );
344  glPushMatrix();
345  glLoadIdentity();
346 
347  glBegin( GL_TRIANGLES );
348  glTexCoord2f( 0.0f, 1.0f );
349  glVertex2f ( -1.0f, 1.0f );
350  glTexCoord2f( 0.0f, 0.0f );
351  glVertex2f ( -1.0f, -1.0f );
352  glTexCoord2f( 1.0f, 1.0f );
353  glVertex2f ( 1.0f, 1.0f );
354 
355  glTexCoord2f( 1.0f, 1.0f );
356  glVertex2f ( 1.0f, 1.0f );
357  glTexCoord2f( 0.0f, 0.0f );
358  glVertex2f ( -1.0f, -1.0f );
359  glTexCoord2f( 1.0f, 0.0f );
360  glVertex2f ( 1.0f, -1.0f );
361  glEnd();
362 
363  glPopMatrix();
364  glMatrixMode( GL_MODELVIEW );
365  glPopMatrix();
366 }
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 66 of file opengl_compositor.cpp.

References m_currentAntialiasingMode.

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

67 {
69 }
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 263 of file opengl_compositor.cpp.

References m_buffers, and usedBuffers().

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

264 {
265  assert( aBufferHandle > 0 && aBufferHandle <= usedBuffers() );
266  return m_buffers[aBufferHandle - 1].textureTarget;
267 }
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 72 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().

73 {
74  if( m_initialized )
75  return;
76 
78  {
80  m_antialiasing.reset( new ANTIALIASING_NONE( this ) );
81  break;
84  break;
87  break;
90  break;
93  break;
94  }
95 
96  VECTOR2U dims = m_antialiasing->GetInternalBufferSize();
97  assert( dims.x != 0 && dims.y != 0 );
98 
99  GLint maxBufSize;
100  glGetIntegerv( GL_MAX_RENDERBUFFER_SIZE_EXT, &maxBufSize );
101 
102  // VECTOR2U is unsigned, so no need to check if < 0
103  if( dims.x > (unsigned) maxBufSize || dims.y >= (unsigned) maxBufSize )
104  throw std::runtime_error( "Requested render buffer size is not supported" );
105 
106  // We need framebuffer objects for drawing the screen contents
107  // Generate framebuffer and a depth buffer
108  glGenFramebuffersEXT( 1, &m_mainFbo );
109  checkGlError( "generating framebuffer" );
110  bindFb( m_mainFbo );
111 
112  // Allocate memory for the depth buffer
113  // Attach the depth buffer to the framebuffer
114  glGenRenderbuffersEXT( 1, &m_depthBuffer );
115  checkGlError( "generating renderbuffer" );
116  glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, m_depthBuffer );
117  checkGlError( "binding renderbuffer" );
118 
119  glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8, dims.x, dims.y );
120  checkGlError( "creating renderbuffer storage" );
121  glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT,
122  GL_RENDERBUFFER_EXT, m_depthBuffer );
123  checkGlError( "attaching renderbuffer" );
124 
125  // Unbind the framebuffer, so by default all the rendering goes directly to the display
127 
128  m_initialized = true;
129 
130  m_antialiasing->Init();
131 }
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 369 of file opengl_compositor.cpp.

References m_antialiasing.

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

370 {
371  m_antialiasing->Present();
372 }
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 134 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().

135 {
136  if( m_initialized )
137  clean();
138 
139  m_antialiasing->OnLostBuffers();
140 
141  m_width = aWidth;
142  m_height = aHeight;
143 }
unsigned int m_width
Width of the buffer (in pixels)
Definition: compositor.h:119
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:120
void OPENGL_COMPOSITOR::SetAntialiasingMode ( OPENGL_ANTIALIASING_MODE  aMode)

Definition at line 57 of file opengl_compositor.cpp.

References clean(), m_currentAntialiasingMode, and m_initialized.

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

58 {
60 
61  if( m_initialized )
62  clean();
63 }
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 270 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().

271 {
272  assert( m_initialized );
273  assert( aBufferHandle <= usedBuffers() );
274 
275  // Either unbind the FBO for direct rendering, or bind the one with target textures
276  bindFb( aBufferHandle == DIRECT_RENDERING ? DIRECT_RENDERING : m_mainFbo );
277 
278  // Switch the target texture
279  if( m_curFbo != DIRECT_RENDERING )
280  {
281  m_curBuffer = aBufferHandle - 1;
282  glDrawBuffer( m_buffers[m_curBuffer].attachmentPoint );
283  checkGlError( "setting draw buffer" );
284 
285  glViewport( 0, 0,
286  m_buffers[m_curBuffer].dimensions.x, m_buffers[m_curBuffer].dimensions.y );
287  }
288  else
289  {
290  glViewport( 0, 0, GetScreenSize().x, GetScreenSize().y );
291  }
292 }
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 120 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 119 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: