////////////////////////////////////////////////////////////////////////////////// // SPARK particle engine // // Copyright (C) 2008-2009 - Julien Fryer - julienfryer@gmail.com // // // // This software is provided 'as-is', without any express or implied // // warranty. In no event will the authors be held liable for any damages // // arising from the use of this software. // // // // Permission is granted to anyone to use this software for any purpose, // // including commercial applications, and to alter it and redistribute it // // freely, subject to the following restrictions: // // // // 1. The origin of this software must not be misrepresented; you must not // // claim that you wrote the original software. If you use this software // // in a product, an acknowledgment in the product documentation would be // // appreciated but is not required. // // 2. Altered source versions must be plainly marked as such, and must not be // // misrepresented as being the original software. // // 3. This notice may not be removed or altered from any source distribution. // ////////////////////////////////////////////////////////////////////////////////// #ifndef H_SPK_GLLINERENDERER #define H_SPK_GLLINERENDERER #include "RenderingAPIs/OpenGL/SPK_GLRenderer.h" #include "Extensions/Renderers/SPK_LineRendererInterface.h" namespace SPK { namespace GL { /** * @class GLLineRenderer * @brief A Renderer drawing particles as OpenGL lines * * The length of the lines is function of the Particle velocity and is defined in the universe space * while the width is fixed and defines in the screen space (in pixels).
*
* Below are the parameters of Particle that are used in this Renderer (others have no effects) : * */ class SPK_GL_PREFIX GLLineRenderer : public GLRenderer, public LineRendererInterface { SPK_IMPLEMENT_REGISTERABLE(GLLineRenderer) public : ////////////////// // Constructors // ////////////////// /** * @brief Constructor of GLLineRenderer * @param length : the length multiplier of this GLLineRenderer * @param width : the width of this GLLineRenderer in pixels */ GLLineRenderer(float length = 1.0f,float width = 1.0f); /** * @brief Creates and registers a new GLLineRenderer * @param length : the length multiplier of this GLLineRenderer * @param width : the width of this GLLineRenderer in pixels * @return A new registered GLLineRenderer * @since 1.04.00 */ static inline GLLineRenderer* create(float length = 1.0f,float width = 1.0f); /////////////// // Interface // /////////////// virtual void createBuffers(const Group& group); virtual void destroyBuffers(const Group& group); virtual void render(const Group& group); protected : virtual bool checkBuffers(const Group& group); private : // vertex buffers and iterators static float* gpuBuffer; static float* gpuIterator; // buffers names static const std::string GPU_BUFFER_NAME; }; inline GLLineRenderer* GLLineRenderer::create(float length,float width) { GLLineRenderer* obj = new GLLineRenderer(length,width); registerObject(obj); return obj; } }} #endif