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
 
int GetAntialiasSupersamplingFactor () 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

◆ OPENGL_BUFFERS

Definition at line 109 of file opengl_compositor.h.

Constructor & Destructor Documentation

◆ OPENGL_COMPOSITOR()

OPENGL_COMPOSITOR::OPENGL_COMPOSITOR ( )

Definition at line 42 of file opengl_compositor.cpp.

42  :
43  m_initialized( false ), m_curBuffer( 0 ),
46 {
47  m_antialiasing = std::make_unique<ANTIALIASING_NONE>( this );
48 }
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.

References m_antialiasing.

◆ ~OPENGL_COMPOSITOR()

OPENGL_COMPOSITOR::~OPENGL_COMPOSITOR ( )
virtual

Definition at line 51 of file opengl_compositor.cpp.

52 {
53  if( m_initialized )
54  clean();
55 }
bool m_initialized
Initialization status flag.
void clean()
Function clean() performs freeing of resources.

References clean(), and m_initialized.

Member Function Documentation

◆ Begin()

void OPENGL_COMPOSITOR::Begin ( )
overridevirtual

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

Implements KIGFX::COMPOSITOR.

Definition at line 311 of file opengl_compositor.cpp.

312 {
313  m_antialiasing->Begin();
314 }
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing

References m_antialiasing.

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

◆ bindFb()

void OPENGL_COMPOSITOR::bindFb ( unsigned int  aFb)
protected

Binds a specific Framebuffer Object.

Definition at line 376 of file opengl_compositor.cpp.

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

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

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

◆ clean()

void OPENGL_COMPOSITOR::clean ( )
protected

Function clean() performs freeing of resources.

Definition at line 390 of file opengl_compositor.cpp.

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

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

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

◆ ClearBuffer()

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 296 of file opengl_compositor.cpp.

297 {
298  assert( m_initialized );
299 
300  glClearColor( aColor.r, aColor.g, aColor.b, 0.0f );
301  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT );
302 }
double g
Green component.
Definition: color4d.h:367
bool m_initialized
Initialization status flag.
double b
Blue component.
Definition: color4d.h:368
double r
Red component.
Definition: color4d.h:366

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().

◆ CreateBuffer() [1/2]

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 147 of file opengl_compositor.cpp.

148 {
149  return m_antialiasing->CreateBuffer();
150 }
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing

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().

◆ CreateBuffer() [2/2]

unsigned int OPENGL_COMPOSITOR::CreateBuffer ( VECTOR2U  aDimensions)

Definition at line 153 of file opengl_compositor.cpp.

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

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

◆ DrawBuffer() [1/2]

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 317 of file opengl_compositor.cpp.

318 {
319  m_antialiasing->DrawBuffer( aBufferHandle );
320 }
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing

References m_antialiasing.

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

◆ DrawBuffer() [2/2]

void OPENGL_COMPOSITOR::DrawBuffer ( unsigned int  aSourceHandle,
unsigned int  aDestHandle 
)

Definition at line 323 of file opengl_compositor.cpp.

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

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

◆ GetAntialiasingMode()

OPENGL_ANTIALIASING_MODE OPENGL_COMPOSITOR::GetAntialiasingMode ( ) const

Definition at line 67 of file opengl_compositor.cpp.

68 {
70 }
OPENGL_ANTIALIASING_MODE m_currentAntialiasingMode

References m_currentAntialiasingMode.

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

◆ GetAntialiasSupersamplingFactor()

int OPENGL_COMPOSITOR::GetAntialiasSupersamplingFactor ( ) const

◆ GetBuffer()

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.

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.

References DIRECT_RENDERING, m_curBuffer, and m_curFbo.

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

◆ GetBufferTexture()

GLenum OPENGL_COMPOSITOR::GetBufferTexture ( unsigned int  aBufferHandle)

Definition at line 264 of file opengl_compositor.cpp.

265 {
266  assert( aBufferHandle > 0 && aBufferHandle <= usedBuffers() );
267  return m_buffers[aBufferHandle - 1].textureTarget;
268 }
unsigned int usedBuffers()
Returns number of used buffers.
OPENGL_BUFFERS m_buffers
Stores information about initialized buffers.

References m_buffers, and usedBuffers().

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

◆ GetScreenSize()

◆ Initialize()

void OPENGL_COMPOSITOR::Initialize ( )
overridevirtual

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

Implements KIGFX::COMPOSITOR.

Definition at line 73 of file opengl_compositor.cpp.

74 {
75  if( m_initialized )
76  return;
77 
79  {
81  m_antialiasing = std::make_unique<ANTIALIASING_NONE>( this );
82  break;
84  m_antialiasing = std::make_unique<ANTIALIASING_SMAA>( this, SMAA_QUALITY::HIGH );
85  break;
87  m_antialiasing = std::make_unique<ANTIALIASING_SMAA>( this, SMAA_QUALITY::ULTRA );
88  break;
90  m_antialiasing = std::make_unique<ANTIALIASING_SUPERSAMPLING>( this, SUPERSAMPLING_MODE::X2 );
91  break;
93  m_antialiasing = std::make_unique<ANTIALIASING_SUPERSAMPLING>( this, SUPERSAMPLING_MODE::X4 );
94  break;
95  }
96 
97  VECTOR2U dims = m_antialiasing->GetInternalBufferSize();
98  assert( dims.x != 0 && dims.y != 0 );
99 
100  GLint maxBufSize;
101  glGetIntegerv( GL_MAX_RENDERBUFFER_SIZE_EXT, &maxBufSize );
102 
103  // VECTOR2U is unsigned, so no need to check if < 0
104  if( dims.x > (unsigned) maxBufSize || dims.y >= (unsigned) maxBufSize )
105  throw std::runtime_error( "Requested render buffer size is not supported" );
106 
107  // We need framebuffer objects for drawing the screen contents
108  // Generate framebuffer and a depth buffer
109  glGenFramebuffersEXT( 1, &m_mainFbo );
110  checkGlError( "generating framebuffer" );
111  bindFb( m_mainFbo );
112 
113  // Allocate memory for the depth buffer
114  // Attach the depth buffer to the framebuffer
115  glGenRenderbuffersEXT( 1, &m_depthBuffer );
116  checkGlError( "generating renderbuffer" );
117  glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, m_depthBuffer );
118  checkGlError( "binding renderbuffer" );
119 
120  glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8, dims.x, dims.y );
121  checkGlError( "creating renderbuffer storage" );
122  glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_STENCIL_ATTACHMENT,
123  GL_RENDERBUFFER_EXT, m_depthBuffer );
124  checkGlError( "attaching renderbuffer" );
125 
126  // Unbind the framebuffer, so by default all the rendering goes directly to the display
128 
129  m_initialized = true;
130 
131  m_antialiasing->Init();
132 }
void bindFb(unsigned int aFb)
Binds a specific Framebuffer Object.
VECTOR2 defines a general 2D-vector/point.
Definition: vector2d.h:61
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.

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().

◆ Present()

void OPENGL_COMPOSITOR::Present ( )
overridevirtual

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

Implements KIGFX::COMPOSITOR.

Definition at line 370 of file opengl_compositor.cpp.

371 {
372  m_antialiasing->Present();
373 }
std::unique_ptr< OPENGL_PRESENTOR > m_antialiasing

References m_antialiasing.

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

◆ Resize()

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 135 of file opengl_compositor.cpp.

136 {
137  if( m_initialized )
138  clean();
139 
140  m_antialiasing->OnLostBuffers();
141 
142  m_width = aWidth;
143  m_height = aHeight;
144 }
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

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

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

◆ SetAntialiasingMode()

void OPENGL_COMPOSITOR::SetAntialiasingMode ( OPENGL_ANTIALIASING_MODE  aMode)

Definition at line 58 of file opengl_compositor.cpp.

59 {
61 
62  if( m_initialized )
63  clean();
64 }
bool m_initialized
Initialization status flag.
OPENGL_ANTIALIASING_MODE m_currentAntialiasingMode
void clean()
Function clean() performs freeing of resources.

References clean(), m_currentAntialiasingMode, and m_initialized.

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

◆ SetBuffer()

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 271 of file opengl_compositor.cpp.

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

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().

◆ usedBuffers()

unsigned int KIGFX::OPENGL_COMPOSITOR::usedBuffers ( )
inlineprotected

Returns number of used buffers.

Definition at line 130 of file opengl_compositor.h.

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

References m_buffers.

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

Member Data Documentation

◆ DIRECT_RENDERING

◆ m_antialiasing

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

◆ m_buffers

OPENGL_BUFFERS KIGFX::OPENGL_COMPOSITOR::m_buffers
protected

Stores information about initialized buffers.

Definition at line 112 of file opengl_compositor.h.

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

◆ m_curBuffer

unsigned int KIGFX::OPENGL_COMPOSITOR::m_curBuffer
protected

Currently used buffer handle.

Definition at line 106 of file opengl_compositor.h.

Referenced by GetBuffer(), and SetBuffer().

◆ m_curFbo

GLuint KIGFX::OPENGL_COMPOSITOR::m_curFbo
protected

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

Definition at line 115 of file opengl_compositor.h.

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

◆ m_currentAntialiasingMode

OPENGL_ANTIALIASING_MODE KIGFX::OPENGL_COMPOSITOR::m_currentAntialiasingMode
protected

◆ m_depthBuffer

GLuint KIGFX::OPENGL_COMPOSITOR::m_depthBuffer
protected

Depth buffer handle.

Definition at line 108 of file opengl_compositor.h.

Referenced by clean(), and Initialize().

◆ m_height

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(), Resize(), and KIGFX::CAIRO_COMPOSITOR::Resize().

◆ m_initialized

bool KIGFX::OPENGL_COMPOSITOR::m_initialized
protected

Initialization status flag.

Definition at line 105 of file opengl_compositor.h.

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

◆ m_mainFbo

GLuint KIGFX::OPENGL_COMPOSITOR::m_mainFbo
protected

Main FBO handle (storing all target textures)

Definition at line 107 of file opengl_compositor.h.

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

◆ m_width

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(), Resize(), and KIGFX::CAIRO_COMPOSITOR::Resize().


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