31 #include <visp3/ar/vpPanda3DPostProcessFilter.h>
33 #if defined(VISP_HAVE_PANDA3D)
35 #include <lightRampAttrib.h>
41 uniform mat4 p3d_ModelViewProjectionMatrix;
42 in vec2 p3d_MultiTexCoord0;
47 gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex;
48 texcoords = p3d_MultiTexCoord0;
55 cm.set_frame_fullscreen_quad();
60 if (buffer ==
nullptr) {
62 "Cannot add a postprocess filter to a renderer that does not define getMainOutputBuffer()");
64 m_shader = Shader::make(Shader::ShaderLanguage::SL_GLSL,
68 m_renderRoot.set_shader_input(
"dp", LVector2f(1.0 / buffer->get_texture()->get_x_size(), 1.0 / buffer->get_texture()->get_y_size()));
70 m_renderRoot.set_attrib(LightRampAttrib::make_identity());
77 PT(OrthographicLens) lens =
new OrthographicLens();
78 lens->set_film_size(2, 2);
79 lens->set_film_offset(0, 0);
80 lens->set_near_far(-1000, 1000);
93 WindowProperties win_prop;
97 int flags = GraphicsPipe::BF_refuse_window | GraphicsPipe::BF_resizeable;
98 GraphicsOutput *windowOutput =
m_window->get_graphics_output();
99 GraphicsEngine *engine = windowOutput->get_engine();
100 GraphicsStateGuardian *gsg = windowOutput->get_gsg();
101 GraphicsPipe *pipe = windowOutput->get_pipe();
103 fbp, win_prop, flags,
112 m_buffer->add_render_texture(
m_texture,
m_isOutput ? GraphicsOutput::RenderTextureMode::RTM_bind_or_copy : GraphicsOutput::RenderTextureMode::RTM_copy_texture);
113 m_buffer->set_clear_color(LColor(0.f));
114 m_buffer->set_clear_color_active(
true);
115 DisplayRegion *region =
m_buffer->make_display_region();
116 if (region ==
nullptr) {
120 region->set_clear_color(LColor(0.f));
131 m_renderRoot.set_shader_input(
"dp", LVector2f(1.0 / buffer->get_texture()->get_x_size(), 1.0 / buffer->get_texture()->get_y_size()));
134 for (GraphicsOutput *buffer:
m_buffers) {
136 GraphicsBuffer *buf =
dynamic_cast<GraphicsBuffer *
>(buffer);
137 if (buf ==
nullptr) {
154 const unsigned numComponents =
m_texture->get_num_components();
155 int rowIncrement = I.
getWidth() * numComponents;
156 unsigned char *data = (
unsigned char *)(&(
m_texture->get_ram_image().front()));
158 data += rowIncrement * (I.
getHeight() - 1);
159 rowIncrement = -rowIncrement;
161 for (
unsigned int i = 0; i < I.
getHeight(); ++i) {
162 unsigned char *colorRow = I[i];
163 for (
unsigned int j = 0; j < I.
getWidth(); ++j) {
164 colorRow[j] = data[j * numComponents];
166 data += rowIncrement;
177 const unsigned numComponents =
m_texture->get_num_components();
178 int rowIncrement = I.
getWidth() * numComponents;
179 float *data = (
float *)(&(
m_texture->get_ram_image().front()));
181 data += rowIncrement * (I.
getHeight() - 1);
182 rowIncrement = -rowIncrement;
184 for (
unsigned int i = 0; i < I.
getHeight(); ++i) {
186 for (
unsigned int j = 0; j < I.
getWidth(); ++j) {
187 colorRow[j].
B = data[j * numComponents];
188 colorRow[j].
G = data[j * numComponents + 1];
189 colorRow[j].
R = data[j * numComponents + 2];
191 data += rowIncrement;
197 #elif !defined(VISP_BUILD_SHARED_LIBS)
199 void dummy_vpPanda3DPostProcessFilter() { };
error that can be emitted by ViSP classes.
unsigned int getWidth() const
void resize(unsigned int h, unsigned int w)
resize the image : Image initialization
unsigned int getHeight() const
NodePath m_renderRoot
Rendering parameters.
PointerTo< Camera > m_camera
Node containing all the objects and the camera for this renderer.
std::string m_name
Inverse of VISP_T_PANDA.
PointerTo< WindowFramework > m_window
Pointer to the active panda framework.
int m_renderOrder
name of the renderer
std::vector< GraphicsOutput * > m_buffers
NodePath of the camera.
vpPanda3DRenderParameters m_renderParameters
Pointer to owning window, which can create buffers etc. It is not necessarily visible.
std::string m_fragmentShader
Whether this filter is an output to be used and should be copied to ram.
virtual FrameBufferProperties getBufferProperties() const =0
void getRenderBasic(vpImage< unsigned char > &I) const
std::shared_ptr< vpPanda3DBaseRenderer > m_inputRenderer
static const char * FILTER_VERTEX_SHADER
PointerTo< GraphicsOutput > m_buffer
PointerTo< Shader > m_shader
virtual void setupScene() VP_OVERRIDE
Initialize the scene for this specific renderer.
void setRenderParameters(const vpPanda3DRenderParameters ¶ms) VP_OVERRIDE
Set new rendering parameters. If the scene has already been initialized, the renderer camera is updat...
void setupRenderTarget() VP_OVERRIDE
Initialize buffers and other objects that are required to save the render.
void setupCamera() VP_OVERRIDE
Initialize camera. Should be called when the scene root of this render has already been created.
PointerTo< Texture > m_texture
Rendering parameters for a panda3D simulation.
unsigned int getImageWidth() const
unsigned int getImageHeight() const