Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef RVE_RENDER_SERVER_POINTS_RENDERER_H
00031 #define RVE_RENDER_SERVER_POINTS_RENDERER_H
00032
00033 #include <OGRE/OgreSimpleRenderable.h>
00034 #include <OGRE/OgreMaterial.h>
00035
00036 #include "batch_renderer.h"
00037 #include "batch_renderable.h"
00038 #include "points_renderer_desc.h"
00039
00040 #include <ros/message_forward.h>
00041
00042 namespace Ogre
00043 {
00044 class SceneManager;
00045 class SceneNode;
00046 }
00047
00048 namespace rve_msgs
00049 {
00050 ROS_DECLARE_MESSAGE(Points);
00051 }
00052
00053 namespace rve_render_server
00054 {
00055
00056 class PointsRenderer;
00057 class PointsRenderable : public BatchRenderable<PointsRenderable, PointsRendererDesc>
00058 {
00059 typedef BatchRenderable<PointsRenderable, PointsRendererDesc> Parent;
00060
00061 public:
00062 PointsRenderable(const PointsRendererDesc& desc, bool alpha);
00063 ~PointsRenderable();
00064
00065 void add(const rve_common::UUID& id, const rve_msgs::Points& points, uint32_t start, uint32_t& out_start, uint32_t& out_count);
00066 void remove(uint32_t start, uint32_t count);
00067
00068 uint32_t getElementsPerVBO();
00069
00070 virtual Picked translatePick(PickRenderValues id);
00071
00072 private:
00073 uint32_t getVerticesPerPoint();
00074 float* getVertices();
00075 float* getNormals();
00076 uint32_t getPointStride();
00077
00078 bool supports_geometry_programs_;
00079 bool needs_offsets_;
00080 bool needs_normals_;
00081
00083 struct PointsInfo
00084 {
00085 rve_common::UUID id;
00086 int32_t offset;
00087 uint32_t begin;
00088 uint32_t end;
00089 };
00090 typedef std::vector<PointsInfo> V_PointsInfo;
00091 V_PointsInfo points_info_;
00092 };
00093 typedef boost::shared_ptr<PointsRenderable> PointsRenderablePtr;
00094 typedef std::vector<PointsRenderablePtr> V_PointsRenderable;
00095
00096 class PointsRenderer : public BatchRenderer<PointsRenderer, rve_msgs::Points, PointsRenderable, PointsRendererDesc>
00097 {
00098 typedef BatchRenderer<PointsRenderer, rve_msgs::Points, PointsRenderable, PointsRendererDesc> Parent;
00099
00100 public:
00101 PointsRenderer(Ogre::SceneManager* scene_manager, const PointsRendererDesc& desc);
00102
00103 std::pair<Ogre::MaterialPtr, Ogre::MaterialPtr> createMaterials(const PointsRendererDesc& desc);
00104 size_t getInputCount(const rve_msgs::Points& points);
00105 };
00106
00107 }
00108
00109 #endif // RVE_RENDER_SERVER_POINTS_RENDERER_H