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