31 #include <visp3/ar/vpPanda3DPostProcessFilter.h>
33 #if defined(VISP_HAVE_PANDA3D)
35 #include <lightRampAttrib.h>
40 "in vec4 p3d_Vertex;\n"
41 "uniform mat4 p3d_ModelViewProjectionMatrix;\n"
42 "in vec2 p3d_MultiTexCoord0;\n"
43 "out vec2 texcoords;\n"
47 " gl_Position = p3d_ModelViewProjectionMatrix * p3d_Vertex;\n"
48 " texcoords = p3d_MultiTexCoord0;\n"
54 cm.set_frame_fullscreen_quad();
59 if (buffer ==
nullptr) {
61 "Cannot add a postprocess filter to a renderer that does not define getMainOutputBuffer()");
63 m_shader = Shader::make(Shader::ShaderLanguage::SL_GLSL,
67 m_renderRoot.set_shader_input(
"dp", LVector2f(1.0 / buffer->get_texture()->get_x_size(), 1.0 / buffer->get_texture()->get_y_size()));
69 m_renderRoot.set_attrib(LightRampAttrib::make_identity());
76 PT(OrthographicLens) lens =
new OrthographicLens();
77 lens->set_film_size(2, 2);
78 lens->set_film_offset(0, 0);
79 lens->set_near_far(-1000, 1000);
92 WindowProperties win_prop;
96 int flags = GraphicsPipe::BF_refuse_window | GraphicsPipe::BF_resizeable;
97 GraphicsOutput *windowOutput =
m_window->get_graphics_output();
98 GraphicsEngine *engine = windowOutput->get_engine();
99 GraphicsStateGuardian *gsg = windowOutput->get_gsg();
100 GraphicsPipe *pipe = windowOutput->get_pipe();
102 fbp, win_prop, flags,
111 m_buffer->add_render_texture(
m_texture,
m_isOutput ? GraphicsOutput::RenderTextureMode::RTM_bind_or_copy : GraphicsOutput::RenderTextureMode::RTM_copy_texture);
112 m_buffer->set_clear_color(LColor(0.f));
113 m_buffer->set_clear_color_active(
true);
114 DisplayRegion *region =
m_buffer->make_display_region();
115 if (region ==
nullptr) {
119 region->set_clear_color(LColor(0.f));
130 m_renderRoot.set_shader_input(
"dp", LVector2f(1.0 / buffer->get_texture()->get_x_size(), 1.0 / buffer->get_texture()->get_y_size()));
133 for (GraphicsOutput *buffer:
m_buffers) {
135 GraphicsBuffer *buf =
dynamic_cast<GraphicsBuffer *
>(buffer);
136 if (buf ==
nullptr) {
153 const unsigned numComponents =
m_texture->get_num_components();
154 int rowIncrement = I.
getWidth() * numComponents;
155 unsigned char *data = (
unsigned char *)(&(
m_texture->get_ram_image().front()));
157 data += rowIncrement * (I.
getHeight() - 1);
158 rowIncrement = -rowIncrement;
160 for (
unsigned int i = 0; i < I.
getHeight(); ++i) {
161 unsigned char *colorRow = I[i];
162 for (
unsigned int j = 0; j < I.
getWidth(); ++j) {
163 colorRow[j] = data[j * numComponents];
165 data += rowIncrement;
176 const unsigned numComponents =
m_texture->get_num_components();
177 int rowIncrement = I.
getWidth() * numComponents;
178 float *data = (
float *)(&(
m_texture->get_ram_image().front()));
180 data += rowIncrement * (I.
getHeight() - 1);
181 rowIncrement = -rowIncrement;
183 for (
unsigned int i = 0; i < I.
getHeight(); ++i) {
185 for (
unsigned int j = 0; j < I.
getWidth(); ++j) {
186 colorRow[j].
B = data[j * numComponents];
187 colorRow[j].
G = data[j * numComponents + 1];
188 colorRow[j].
R = data[j * numComponents + 2];
190 data += rowIncrement;
196 #elif !defined(VISP_BUILD_SHARED_LIBS)
198 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.
PointerTo< WindowFramework > m_window
Rendering priority for this renderer and its buffers. A lower value will be rendered first....
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
static const std::string FILTER_VERTEX_SHADER
void getRenderBasic(vpImage< unsigned char > &I) const
std::shared_ptr< vpPanda3DBaseRenderer > m_inputRenderer
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