cgv
cgv::render::gl::gl_depth_peeler Class Reference

#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. More...
 
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. More...
 

Public Attributes

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

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;

Member Function Documentation

◆ 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

◆ 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


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