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_LINES_RENDERER_H
00031 #define RVE_RENDER_SERVER_LINES_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 "lines_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(Lines);
00051 }
00052 
00053 namespace rve_render_server
00054 {
00055 
00056 class LinesRenderer;
00057 class LinesRenderable : public BatchRenderable<LinesRenderable, LinesRendererDesc>
00058 {
00059   typedef BatchRenderable<LinesRenderable, LinesRendererDesc> Parent;
00060 
00061 public:
00062   LinesRenderable(const LinesRendererDesc& desc, bool alpha);
00063   ~LinesRenderable();
00064 
00065   void add(const rve_common::UUID& id, const rve_msgs::Lines& lines, 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) { return Picked(); }
00071 
00072 private:
00073   void outputLines(const rve_msgs::Lines& lines, float* fptr, uint32_t line_start, uint32_t vert_start, uint32_t end, bool alpha, uint32_t& out_count);
00074   void outputBillboards(const rve_msgs::Lines& lines, float* fptr, uint32_t line_start, uint32_t vert_start, uint32_t end, bool alpha, uint32_t& out_count);
00075 
00076   uint32_t getVerticesPerVertex();
00077   uint32_t getVerticesPerLine();
00078   float* getOffsets();
00079   uint32_t getVertexStride();
00080   bool isList();
00081   bool isBillboard();
00082 };
00083 typedef boost::shared_ptr<LinesRenderable> LinesRenderablePtr;
00084 typedef std::vector<LinesRenderablePtr> V_LinesRenderable;
00085 
00086 class LinesRenderer : public BatchRenderer<LinesRenderer, rve_msgs::Lines, LinesRenderable, LinesRendererDesc>
00087 {
00088   typedef BatchRenderer<LinesRenderer, rve_msgs::Lines, LinesRenderable, LinesRendererDesc> Parent;
00089 
00090 public:
00091   LinesRenderer(Ogre::SceneManager* scene_manager, const LinesRendererDesc& desc);
00092 
00093   std::pair<Ogre::MaterialPtr, Ogre::MaterialPtr> createMaterials(const LinesRendererDesc& desc);
00094   size_t getInputCount(const rve_msgs::Lines& lines);
00095 };
00096 
00097 } 
00098 
00099 #endif // RVE_RENDER_SERVER_LINES_RENDERER_H