cgv
Loading...
Searching...
No Matches
cgv::render::gl::gl_depth_peeler Class Reference

OpenGL helper class to simplify depth peeling. More...

#include <gl_depth_peeler.h>

Inheritance diagram for cgv::render::gl::gl_depth_peeler:
cgv::render::gl::gl_transparent_renderer

Public Member Functions

 gl_depth_peeler (bool front_to_back=true, float _depth_bias=0.001)
 construct uninitialized depth peeler
 
virtual ~gl_depth_peeler ()
 destruct the depth peeler
 
void invert_t (bool enable=true)
 set the sign for the vertical texture coordinate. In case of some ATI-cards this needs to be enabled to avoid flipping intermediate textures.
 
void set_back_to_front ()
 enable back to front mode
 
void set_front_to_back ()
 enable front to back mode
 
bool is_front_to_back () const
 return whether the mode is front to back
 
virtual void destruct (context &ctx)
 destruct the depth peeler
 
void set_depth_bias (float bias)
 the depth bias is used as epsilon for the test against the second depth buffer and is initialized to 0.0005f
 
float get_depth_bias () const
 return the current depth bias
 
bool is_initialized () const
 check whether the depth peeler has been initialized, i.e. the init method has been called successfully before
 
virtual bool init (context &ctx)
 checks for extensions and init depth peeler, return success
 
virtual void init_frame (context &ctx)
 call this after the viewport has been set and before the first call to copy_depth_buffer or begin_layer
 
void copy_depth_buffer (context &ctx)
 copies the current depth buffer to the second depth buffer, what is typically done before peeling a layer
 
void begin_layer (context &ctx, int tex_unit=-1)
 start to extract the next layer. Within begin_layer and end_layer the following OpenGL features are used: texture generation functions, 2D texturing and the alpha Test
 
unsigned int end_layer (context &ctx)
 finish the layer and return the number of drawn fragments in the layer. All OpenGL settings are restored.
 

Public Attributes

std::string last_error
 a string that contains the last error, which is only set by the init method
 

Protected Attributes

unsigned int query
 
texture depth_texture
 
float depth_bias
 
bool front_to_back
 
contextctx_ptr
 
bool _invert_t
 

Detailed Description

OpenGL helper class to simplify depth peeling.

Call the init method after your OpenGL context has been created. A sample usage during a drawing method would look like:

// draw and use first layer (no depth peeling necessary)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
render_scene();
use_current_layer();
// init peeler
peeler.init_peeling();
int nr_fragments, nr_layers = 0;
// repeat until no more fragments have been drawn
do {
++nr_layers;
// copy previous depth buffer to secondary depth buffer
peeler.copy_depth_buffer();
// then peel the next layer
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
peeler.begin_layer();
render_scene();
nr_fragments = peeler.end_layer();
use_current_layer();
} while(nr_fragments > 0);
return nr_layers;

Definition at line 44 of file gl_depth_peeler.h.

Constructor & Destructor Documentation

◆ gl_depth_peeler()

cgv::render::gl::gl_depth_peeler::gl_depth_peeler ( bool  front_to_back = true,
float  _depth_bias = 0.001 
)

construct uninitialized depth peeler

Definition at line 9 of file gl_depth_peeler.cxx.

◆ ~gl_depth_peeler()

cgv::render::gl::gl_depth_peeler::~gl_depth_peeler ( )
virtual

destruct the depth peeler

Definition at line 44 of file gl_depth_peeler.cxx.

References destruct(), and is_initialized().

Member Function Documentation

◆ begin_layer()

void cgv::render::gl::gl_depth_peeler::begin_layer ( context ctx,
int  tex_unit = -1 
)

start to extract the next layer. Within begin_layer and end_layer the following OpenGL features are used: texture generation functions, 2D texturing and the alpha Test

Definition at line 123 of file gl_depth_peeler.cxx.

References cgv::render::texture::enable(), and cgv::render::gl::ensure_glew_initialized().

Referenced by cgv::render::gl::gl_transparent_renderer::render_transparent().

◆ copy_depth_buffer()

void cgv::render::gl::gl_depth_peeler::copy_depth_buffer ( context ctx)

copies the current depth buffer to the second depth buffer, what is typically done before peeling a layer

Definition at line 116 of file gl_depth_peeler.cxx.

References cgv::render::texture::replace_from_buffer().

Referenced by cgv::render::gl::gl_transparent_renderer::render_transparent().

◆ destruct()

void cgv::render::gl::gl_depth_peeler::destruct ( context ctx)
virtual

destruct the depth peeler

Reimplemented in cgv::render::gl::gl_transparent_renderer.

Definition at line 51 of file gl_depth_peeler.cxx.

References cgv::render::texture::destruct().

Referenced by cgv::render::gl::gl_transparent_renderer::destruct(), and ~gl_depth_peeler().

◆ end_layer()

unsigned int cgv::render::gl::gl_depth_peeler::end_layer ( context ctx)

finish the layer and return the number of drawn fragments in the layer. All OpenGL settings are restored.

finish the layer and return the number of drawn fragments in the layer

Definition at line 252 of file gl_depth_peeler.cxx.

References cgv::render::texture::disable().

Referenced by cgv::render::gl::gl_transparent_renderer::render_transparent().

◆ get_depth_bias()

float cgv::render::gl::gl_depth_peeler::get_depth_bias ( ) const

return the current depth bias

Definition at line 62 of file gl_depth_peeler.cxx.

◆ init()

bool cgv::render::gl::gl_depth_peeler::init ( context ctx)
virtual

checks for extensions and init depth peeler, return success

Reimplemented in cgv::render::gl::gl_transparent_renderer.

Definition at line 74 of file gl_depth_peeler.cxx.

References cgv::render::gl::ensure_glew_initialized(), and last_error.

Referenced by cgv::render::gl::gl_transparent_renderer::init().

◆ init_frame()

◆ invert_t()

void cgv::render::gl::gl_depth_peeler::invert_t ( bool  enable = true)

set the sign for the vertical texture coordinate. In case of some ATI-cards this needs to be enabled to avoid flipping intermediate textures.

set the sign for y

Definition at line 20 of file gl_depth_peeler.cxx.

◆ is_front_to_back()

bool cgv::render::gl::gl_depth_peeler::is_front_to_back ( ) const

return whether the mode is front to back

Definition at line 38 of file gl_depth_peeler.cxx.

Referenced by cgv::render::gl::gl_transparent_renderer::init_frame().

◆ is_initialized()

bool cgv::render::gl::gl_depth_peeler::is_initialized ( ) const

check whether the depth peeler has been initialized, i.e. the init method has been called successfully before

Definition at line 68 of file gl_depth_peeler.cxx.

Referenced by ~gl_depth_peeler().

◆ set_back_to_front()

void cgv::render::gl::gl_depth_peeler::set_back_to_front ( )

enable back to front mode

Definition at line 26 of file gl_depth_peeler.cxx.

◆ set_depth_bias()

void cgv::render::gl::gl_depth_peeler::set_depth_bias ( float  bias)

the depth bias is used as epsilon for the test against the second depth buffer and is initialized to 0.0005f

Definition at line 57 of file gl_depth_peeler.cxx.

◆ set_front_to_back()

void cgv::render::gl::gl_depth_peeler::set_front_to_back ( )

enable front to back mode

Definition at line 31 of file gl_depth_peeler.cxx.

Member Data Documentation

◆ _invert_t

bool cgv::render::gl::gl_depth_peeler::_invert_t
protected

Definition at line 52 of file gl_depth_peeler.h.

◆ ctx_ptr

context* cgv::render::gl::gl_depth_peeler::ctx_ptr
protected

Definition at line 51 of file gl_depth_peeler.h.

◆ depth_bias

float cgv::render::gl::gl_depth_peeler::depth_bias
protected

Definition at line 49 of file gl_depth_peeler.h.

◆ depth_texture

texture cgv::render::gl::gl_depth_peeler::depth_texture
protected

Definition at line 48 of file gl_depth_peeler.h.

◆ front_to_back

bool cgv::render::gl::gl_depth_peeler::front_to_back
protected

Definition at line 50 of file gl_depth_peeler.h.

◆ last_error

std::string cgv::render::gl::gl_depth_peeler::last_error
mutable

a string that contains the last error, which is only set by the init method

Definition at line 55 of file gl_depth_peeler.h.

Referenced by init().

◆ query

unsigned int cgv::render::gl::gl_depth_peeler::query
protected

Definition at line 47 of file gl_depth_peeler.h.


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