[Orxonox-commit 598] r3130 - in branches/pch/src/orxonox: . objects tools

rgrieder at orxonox.net rgrieder at orxonox.net
Tue Jun 9 19:51:00 CEST 2009


Author: rgrieder
Date: 2009-06-09 19:51:00 +0200 (Tue, 09 Jun 2009)
New Revision: 3130

Added:
   branches/pch/src/orxonox/tools/DynamicLines.cc
   branches/pch/src/orxonox/tools/DynamicRenderable.cc
Removed:
   branches/pch/src/orxonox/tools/DynamicLines.cpp
   branches/pch/src/orxonox/tools/DynamicRenderable.cpp
Modified:
   branches/pch/src/orxonox/OrxonoxPrereqs.h
   branches/pch/src/orxonox/objects/RadarViewable.cc
   branches/pch/src/orxonox/objects/RadarViewable.h
   branches/pch/src/orxonox/tools/DynamicLines.h
   branches/pch/src/orxonox/tools/DynamicRenderable.h
Log:
Cleaned out DynamicLines and DynamicRenderable classes and put them in the Ogre namespace since that's where they came from (OGRE wiki).

Modified: branches/pch/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- branches/pch/src/orxonox/OrxonoxPrereqs.h	2009-06-09 17:44:46 UTC (rev 3129)
+++ branches/pch/src/orxonox/OrxonoxPrereqs.h	2009-06-09 17:51:00 UTC (rev 3130)
@@ -246,13 +246,12 @@
     class Shader;
     template <class T>
     class Timer;
-    class DynamicLines;
-    class DynamicRenderable;
 
     // overlays
     class BarColour;
     class DebugFPSText;
     class DebugRTRText;
+    class GUIOverlay;
     class HUDBar;
     class HUDNavigation;
     class HUDRadar;
@@ -291,6 +290,10 @@
     class BorderPanelOverlayElement;
     class PanelOverlayElement;
     class TextAreaOverlayElement;
+
+    // OGRE Wiki adapted code
+    class DynamicLines;
+    class DynamicRenderable;
 }
 
 namespace CEGUI

Modified: branches/pch/src/orxonox/objects/RadarViewable.cc
===================================================================
--- branches/pch/src/orxonox/objects/RadarViewable.cc	2009-06-09 17:44:46 UTC (rev 3129)
+++ branches/pch/src/orxonox/objects/RadarViewable.cc	2009-06-09 17:51:00 UTC (rev 3130)
@@ -28,6 +28,7 @@
 
 #include "RadarViewable.h"
 
+#include <OgreSceneManager.h>
 #include "util/Debug.h"
 #include "util/Exception.h"
 #include "core/CoreIncludes.h"
@@ -100,7 +101,7 @@
             this->line_->position(0, 0, 0);
 
             this->line_->end(); */
-            this->line_ = new DynamicLines(Ogre::RenderOperation::OT_LINE_LIST);
+            this->line_ = new Ogre::DynamicLines(Ogre::RenderOperation::OT_LINE_LIST);
             this->line_->addPoint( Vector3(0,0,0) );
             this->line_->addPoint( Vector3(0,0,0) );
 

Modified: branches/pch/src/orxonox/objects/RadarViewable.h
===================================================================
--- branches/pch/src/orxonox/objects/RadarViewable.h	2009-06-09 17:44:46 UTC (rev 3129)
+++ branches/pch/src/orxonox/objects/RadarViewable.h	2009-06-09 17:51:00 UTC (rev 3130)
@@ -104,7 +104,7 @@
         //Used for Map
         Ogre::SceneNode * MapNode_;
         Ogre::Entity * MapEntity_;
-        DynamicLines* line_;
+        Ogre::DynamicLines* line_;
         Ogre::SceneNode * LineNode_;
         void addMapEntity();
         void updateMapPosition();

Copied: branches/pch/src/orxonox/tools/DynamicLines.cc (from rev 3117, branches/pch/src/orxonox/tools/DynamicLines.cpp)
===================================================================
--- branches/pch/src/orxonox/tools/DynamicLines.cc	                        (rev 0)
+++ branches/pch/src/orxonox/tools/DynamicLines.cc	2009-06-09 17:51:00 UTC (rev 3130)
@@ -0,0 +1,178 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Baxissimo, Emmeran, DWORD, EtherDrive (OGRE Wiki)
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "DynamicLines.h"
+
+#include <cassert>
+#include <cmath>
+
+namespace Ogre
+{
+    enum
+    {
+        POSITION_BINDING,
+        TEXCOORD_BINDING
+    };
+
+    DynamicLines::DynamicLines(OperationType opType)
+    {
+        initialize(opType,false);
+        setMaterial("BaseWhiteNoLighting");
+        mDirty = true;
+    }
+
+    DynamicLines::~DynamicLines()
+    {
+    }
+
+    void DynamicLines::setOperationType(OperationType opType)
+    {
+        mRenderOp.operationType = opType;
+    }
+
+    RenderOperation::OperationType DynamicLines::getOperationType() const
+    {
+        return mRenderOp.operationType;
+    }
+
+    void DynamicLines::addPoint(const Vector3 &p)
+    {
+        mPoints.push_back(p);
+        mDirty = true;
+    }
+
+    void DynamicLines::addPoint(Real x, Real y, Real z)
+    {
+        mPoints.push_back(Vector3(x,y,z));
+        mDirty = true;
+    }
+
+    const Vector3& DynamicLines::getPoint(unsigned short index) const
+    {
+        assert(index < mPoints.size() && "Point index is out of bounds!!");
+        return mPoints[index];
+    }
+
+    unsigned short DynamicLines::getNumPoints(void) const
+    {
+        return (unsigned short)mPoints.size();
+    }
+
+    void DynamicLines::setPoint(unsigned short index, const Vector3 &value)
+    {
+        assert(index < mPoints.size() && "Point index is out of bounds!!");
+
+        mPoints[index] = value;
+        mDirty = true;
+    }
+
+    void DynamicLines::clear()
+    {
+        mPoints.clear();
+        mDirty = true;
+    }
+
+    void DynamicLines::update()
+    {
+        if (mDirty)
+            fillHardwareBuffers();
+    }
+
+    void DynamicLines::createVertexDeclaration()
+    {
+        VertexDeclaration *decl = mRenderOp.vertexData->vertexDeclaration;
+        decl->addElement(POSITION_BINDING, 0, VET_FLOAT3, VES_POSITION);
+    }
+
+    void DynamicLines::fillHardwareBuffers()
+    {
+        int size = mPoints.size();
+
+        prepareHardwareBuffers(size,0);
+
+        if (!size)
+        {
+            mBox.setExtents(Vector3::ZERO,Vector3::ZERO);
+            mDirty=false;
+            return;
+        }
+
+        Vector3 vaabMin = mPoints[0];
+        Vector3 vaabMax = mPoints[0];
+
+        HardwareVertexBufferSharedPtr vbuf =
+            mRenderOp.vertexData->vertexBufferBinding->getBuffer(0);
+
+        Real *prPos = static_cast<Real*>(vbuf->lock(HardwareBuffer::HBL_DISCARD));
+        for (int i = 0; i < size; i++)
+        {
+            *prPos++ = mPoints[i].x;
+            *prPos++ = mPoints[i].y;
+            *prPos++ = mPoints[i].z;
+
+            if (mPoints[i].x < vaabMin.x)
+                vaabMin.x = mPoints[i].x;
+            if (mPoints[i].y < vaabMin.y)
+                vaabMin.y = mPoints[i].y;
+            if (mPoints[i].z < vaabMin.z)
+                vaabMin.z = mPoints[i].z;
+
+            if (mPoints[i].x > vaabMax.x)
+                vaabMax.x = mPoints[i].x;
+            if (mPoints[i].y > vaabMax.y)
+                vaabMax.y = mPoints[i].y;
+            if (mPoints[i].z > vaabMax.z)
+                vaabMax.z = mPoints[i].z;
+        }
+        vbuf->unlock();
+
+        mBox.setExtents(vaabMin, vaabMax);
+
+        mDirty = false;
+    }
+
+    /*
+    void DynamicLines::getWorldTransforms(Matrix4 *xform) const
+    {
+        // return identity matrix to prevent parent transforms
+        *xform = Matrix4::IDENTITY;
+    }
+    */
+
+    /*
+    const Quaternion &DynamicLines::getWorldOrientation(void) const
+    {
+        return Quaternion::IDENTITY;
+    }
+
+    const Vector3 &DynamicLines::getWorldPosition(void) const
+    {
+        return Vector3::ZERO;
+    }
+    */
+}

Deleted: branches/pch/src/orxonox/tools/DynamicLines.cpp
===================================================================
--- branches/pch/src/orxonox/tools/DynamicLines.cpp	2009-06-09 17:44:46 UTC (rev 3129)
+++ branches/pch/src/orxonox/tools/DynamicLines.cpp	2009-06-09 17:51:00 UTC (rev 3130)
@@ -1,145 +0,0 @@
-#include "DynamicLines.h"
-#include <Ogre.h>
-#include <cassert>
-#include <cmath>
-
-using namespace Ogre;
-
-namespace orxonox
-{
-enum {
-  POSITION_BINDING,
-  TEXCOORD_BINDING
-};
-
-DynamicLines::DynamicLines(OperationType opType)
-{
-  initialize(opType,false);
-  setMaterial("BaseWhiteNoLighting");
-  mDirty = true;
-}
-
-DynamicLines::~DynamicLines()
-{
-}
-
-void DynamicLines::setOperationType(OperationType opType)
-{
-  mRenderOp.operationType = opType;
-}
-
-RenderOperation::OperationType DynamicLines::getOperationType() const
-{
-  return mRenderOp.operationType;
-}
-
-void DynamicLines::addPoint(const Vector3 &p)
-{
-   mPoints.push_back(p);
-   mDirty = true;
-}
-void DynamicLines::addPoint(Real x, Real y, Real z)
-{
-   mPoints.push_back(Vector3(x,y,z));
-   mDirty = true;
-}
-const Vector3& DynamicLines::getPoint(unsigned short index) const
-{
-   assert(index < mPoints.size() && "Point index is out of bounds!!");
-   return mPoints[index];
-}
-unsigned short DynamicLines::getNumPoints(void) const
-{
-  return (unsigned short)mPoints.size();
-}
-void DynamicLines::setPoint(unsigned short index, const Vector3 &value)
-{
-  assert(index < mPoints.size() && "Point index is out of bounds!!");
-
-  mPoints[index] = value;
-  mDirty = true;
-}
-void DynamicLines::clear()
-{
-  mPoints.clear();
-  mDirty = true;
-}
-
-void DynamicLines::update()
-{
-  if (mDirty) fillHardwareBuffers();
-}
-
-void DynamicLines::createVertexDeclaration()
-{
-  VertexDeclaration *decl = mRenderOp.vertexData->vertexDeclaration;
-  decl->addElement(POSITION_BINDING, 0, VET_FLOAT3, VES_POSITION);
-}
-
-void DynamicLines::fillHardwareBuffers()
-{
-  int size = mPoints.size();
-
-  prepareHardwareBuffers(size,0);
-
-  if (!size) {
-    mBox.setExtents(Vector3::ZERO,Vector3::ZERO);
-    mDirty=false;
-    return;
-  }
-
-  Vector3 vaabMin = mPoints[0];
-  Vector3 vaabMax = mPoints[0];
-
-  HardwareVertexBufferSharedPtr vbuf =
-    mRenderOp.vertexData->vertexBufferBinding->getBuffer(0);
-
-  Real *prPos = static_cast<Real*>(vbuf->lock(HardwareBuffer::HBL_DISCARD));
-  {
-   for(int i = 0; i < size; i++)
-   {
-      *prPos++ = mPoints[i].x;
-      *prPos++ = mPoints[i].y;
-      *prPos++ = mPoints[i].z;
-
-      if(mPoints[i].x < vaabMin.x)
-         vaabMin.x = mPoints[i].x;
-      if(mPoints[i].y < vaabMin.y)
-         vaabMin.y = mPoints[i].y;
-      if(mPoints[i].z < vaabMin.z)
-         vaabMin.z = mPoints[i].z;
-
-      if(mPoints[i].x > vaabMax.x)
-         vaabMax.x = mPoints[i].x;
-      if(mPoints[i].y > vaabMax.y)
-         vaabMax.y = mPoints[i].y;
-      if(mPoints[i].z > vaabMax.z)
-         vaabMax.z = mPoints[i].z;
-   }
-  }
-  vbuf->unlock();
-
-  mBox.setExtents(vaabMin, vaabMax);
-
-  mDirty = false;
-}
-
-/*
-void DynamicLines::getWorldTransforms(Matrix4 *xform) const
-{
-   // return identity matrix to prevent parent transforms
-   *xform = Matrix4::IDENTITY;
-}
-*/
-/*
-const Quaternion &DynamicLines::getWorldOrientation(void) const
-{
-   return Quaternion::IDENTITY;
-}
-
-const Vector3 &DynamicLines::getWorldPosition(void) const
-{
-   return Vector3::ZERO;
-}
-*/
-}

Modified: branches/pch/src/orxonox/tools/DynamicLines.h
===================================================================
--- branches/pch/src/orxonox/tools/DynamicLines.h	2009-06-09 17:44:46 UTC (rev 3129)
+++ branches/pch/src/orxonox/tools/DynamicLines.h	2009-06-09 17:51:00 UTC (rev 3130)
@@ -1,67 +1,96 @@
-#ifndef _DYNAMIC_LINES_H_
-#define _DYNAMIC_LINES_H_
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Baxissimo, Emmeran, DWORD, EtherDrive (OGRE Wiki)
+ *   Co-authors:
+ *      ...
+ *
+ */
 
+#ifndef _DynamicLines_H__
+#define _DynamicLines_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include <vector>
 #include "DynamicRenderable.h"
-#include <vector>
 
-namespace orxonox
+namespace Ogre
 {
-class DynamicLines : public DynamicRenderable
-{
-  typedef Ogre::Vector3 Vector3;
-  typedef Ogre::Quaternion Quaternion;
-  typedef Ogre::Camera Camera;
-  typedef Ogre::Real Real;
-  typedef Ogre::RenderOperation::OperationType OperationType;
+    class DynamicLines : public DynamicRenderable
+    {
+        typedef RenderOperation::OperationType OperationType;
 
-public:
-  /// Constructor - see setOperationType() for description of argument.
-  DynamicLines(OperationType opType=Ogre::RenderOperation::OT_LINE_STRIP);
-  virtual ~DynamicLines();
+    public:
+        /// Constructor - see setOperationType() for description of argument.
+        DynamicLines(OperationType opType = RenderOperation::OT_LINE_STRIP);
+        virtual ~DynamicLines();
 
-  /// Add a point to the point list
-  void addPoint(const Ogre::Vector3 &p);
-  /// Add a point to the point list
-  void addPoint(Real x, Real y, Real z);
+        /// Add a point to the point list
+        void addPoint(const Vector3 &p);
+        /// Add a point to the point list
+        void addPoint(Real x, Real y, Real z);
 
-  /// Change the location of an existing point in the point list
-  void setPoint(unsigned short index, const Vector3 &value);
+        /// Change the location of an existing point in the point list
+        void setPoint(unsigned short index, const Vector3 &value);
 
-  /// Return the location of an existing point in the point list
-  const Vector3& getPoint(unsigned short index) const;
+        /// Return the location of an existing point in the point list
+        const Vector3& getPoint(unsigned short index) const;
 
-  /// Return the total number of points in the point list
-  unsigned short getNumPoints(void) const;
+        /// Return the total number of points in the point list
+        unsigned short getNumPoints(void) const;
 
-  /// Remove all points from the point list
-  void clear();
+        /// Remove all points from the point list
+        void clear();
 
-  /// Call this to update the hardware buffer after making changes.
-  void update();
+        /// Call this to update the hardware buffer after making changes.
+        void update();
 
-  /** Set the type of operation to draw with.
-   * @param opType Can be one of
-   *    - RenderOperation::OT_LINE_STRIP
-   *    - RenderOperation::OT_LINE_LIST
-   *    - RenderOperation::OT_POINT_LIST
-   *    - RenderOperation::OT_TRIANGLE_LIST
-   *    - RenderOperation::OT_TRIANGLE_STRIP
-   *    - RenderOperation::OT_TRIANGLE_FAN
-   *    The default is OT_LINE_STRIP.
-   */
-  void setOperationType(OperationType opType);
-  OperationType getOperationType() const;
+        /**
+        @brief
+            Set the type of operation to draw with.
+        @param opType
+            Can be one of
+                - RenderOperation::OT_LINE_STRIP
+                - RenderOperation::OT_LINE_LIST
+                - RenderOperation::OT_POINT_LIST
+                - RenderOperation::OT_TRIANGLE_LIST
+                - RenderOperation::OT_TRIANGLE_STRIP
+                - RenderOperation::OT_TRIANGLE_FAN
+            The default is OT_LINE_STRIP.
+        */
+        void setOperationType(OperationType opType);
+        OperationType getOperationType() const;
 
-protected:
-  /// Implementation DynamicRenderable, creates a simple vertex-only decl
-  virtual void createVertexDeclaration();
-  /// Implementation DynamicRenderable, pushes point list out to hardware memory
-  virtual void fillHardwareBuffers();
+    protected:
+        /// Implementation DynamicRenderable, creates a simple vertex-only decl
+        virtual void createVertexDeclaration();
+        /// Implementation DynamicRenderable, pushes point list out to hardware memory
+        virtual void fillHardwareBuffers();
 
-private:
-  std::vector<Vector3> mPoints;
-  bool mDirty;
-};
+    private:
+        std::vector<Vector3> mPoints;
+        bool mDirty;
+    };
 }
 
-#endif
+#endif /* _DynamicLines_H__ */

Copied: branches/pch/src/orxonox/tools/DynamicRenderable.cc (from rev 3117, branches/pch/src/orxonox/tools/DynamicRenderable.cpp)
===================================================================
--- branches/pch/src/orxonox/tools/DynamicRenderable.cc	                        (rev 0)
+++ branches/pch/src/orxonox/tools/DynamicRenderable.cc	2009-06-09 17:51:00 UTC (rev 3130)
@@ -0,0 +1,160 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Sinbad, Baxissimo, DWORD, TheBren (OGRE Wiki)
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "DynamicRenderable.h"
+
+#include <OgreCamera.h>
+#include <OgreHardwareBufferManager.h>
+
+namespace Ogre
+{
+    DynamicRenderable::DynamicRenderable()
+    {
+    }
+
+    DynamicRenderable::~DynamicRenderable()
+    {
+        delete mRenderOp.vertexData;
+        delete mRenderOp.indexData;
+    }
+
+    void DynamicRenderable::initialize(RenderOperation::OperationType operationType,
+           bool useIndices)
+    {
+        // Initialize render operation
+        mRenderOp.operationType = operationType;
+        mRenderOp.useIndexes = useIndices;
+        mRenderOp.vertexData = new VertexData;
+        if (mRenderOp.useIndexes)
+            mRenderOp.indexData = new IndexData;
+
+        // Reset buffer capacities
+        mVertexBufferCapacity = 0;
+        mIndexBufferCapacity = 0;
+
+        // Create vertex declaration
+        createVertexDeclaration();
+    }
+
+    void DynamicRenderable::prepareHardwareBuffers(size_t vertexCount, size_t indexCount)
+    {
+        // Prepare vertex buffer
+        size_t newVertCapacity = mVertexBufferCapacity;
+        if ((vertexCount > mVertexBufferCapacity) || (!mVertexBufferCapacity))
+        {
+            // vertexCount exceeds current capacity!
+            // It is necessary to reallocate the buffer.
+
+            // Check if this is the first call
+            if (!newVertCapacity)
+                newVertCapacity = 1;
+
+            // Make capacity the next power of two
+            while (newVertCapacity < vertexCount)
+                newVertCapacity <<= 1;
+        }
+        else if (vertexCount < mVertexBufferCapacity>>1)
+        {
+            // Make capacity the previous power of two
+            while (vertexCount < newVertCapacity>>1)
+                newVertCapacity >>= 1;
+        }
+        if (newVertCapacity != mVertexBufferCapacity)
+        {
+            mVertexBufferCapacity = newVertCapacity;
+            // Create new vertex buffer
+            HardwareVertexBufferSharedPtr vbuf =
+                HardwareBufferManager::getSingleton().createVertexBuffer(
+                mRenderOp.vertexData->vertexDeclaration->getVertexSize(0),
+                mVertexBufferCapacity,
+                HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY); // TODO: Custom HBU_?
+
+            // Bind buffer
+            mRenderOp.vertexData->vertexBufferBinding->setBinding(0, vbuf);
+        }
+        // Update vertex count in the render operation
+        mRenderOp.vertexData->vertexCount = vertexCount;
+
+        if (mRenderOp.useIndexes)
+        {
+            OgreAssert(indexCount <= std::numeric_limits<unsigned short>::max(), "indexCount exceeds 16 bit");
+
+            size_t newIndexCapacity = mIndexBufferCapacity;
+            // Prepare index buffer
+            if ((indexCount > newIndexCapacity) || (!newIndexCapacity))
+            {
+                // indexCount exceeds current capacity!
+                // It is necessary to reallocate the buffer.
+
+                // Check if this is the first call
+                if (!newIndexCapacity)
+                    newIndexCapacity = 1;
+
+                // Make capacity the next power of two
+                while (newIndexCapacity < indexCount)
+                    newIndexCapacity <<= 1;
+            }
+            else if (indexCount < newIndexCapacity>>1)
+            {
+                // Make capacity the previous power of two
+                while (indexCount < newIndexCapacity>>1)
+                    newIndexCapacity >>= 1;
+            }
+
+            if (newIndexCapacity != mIndexBufferCapacity)
+            {
+                mIndexBufferCapacity = newIndexCapacity;
+                // Create new index buffer
+                mRenderOp.indexData->indexBuffer =
+                    HardwareBufferManager::getSingleton().createIndexBuffer(
+                    HardwareIndexBuffer::IT_16BIT,
+                    mIndexBufferCapacity,
+                    HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY); // TODO: Custom HBU_?
+            }
+
+            // Update index count in the render operation
+            mRenderOp.indexData->indexCount = indexCount;
+        }
+    }
+
+    Real DynamicRenderable::getBoundingRadius(void) const
+    {
+        return Math::Sqrt(std::max(mBox.getMaximum().squaredLength(), mBox.getMinimum().squaredLength()));
+    }
+
+    Real DynamicRenderable::getSquaredViewDepth(const Camera* cam) const
+    {
+        Vector3 vMin, vMax, vMid, vDist;
+        vMin = mBox.getMinimum();
+        vMax = mBox.getMaximum();
+        vMid = ((vMax - vMin) * 0.5) + vMin;
+        vDist = cam->getDerivedPosition() - vMid;
+
+        return vDist.squaredLength();
+    }
+}

Deleted: branches/pch/src/orxonox/tools/DynamicRenderable.cpp
===================================================================
--- branches/pch/src/orxonox/tools/DynamicRenderable.cpp	2009-06-09 17:44:46 UTC (rev 3129)
+++ branches/pch/src/orxonox/tools/DynamicRenderable.cpp	2009-06-09 17:51:00 UTC (rev 3130)
@@ -1,136 +0,0 @@
-#include "DynamicRenderable.h"
-#include <OgreCamera.h>
-#include <OgreHardwareBufferManager.h>
-
-using namespace Ogre;
-
-namespace orxonox
-{
-DynamicRenderable::DynamicRenderable()
-{
-}
-
-DynamicRenderable::~DynamicRenderable()
-{
-  delete mRenderOp.vertexData;
-  delete mRenderOp.indexData;
-}
-
-void DynamicRenderable::initialize(RenderOperation::OperationType operationType,
-                                   bool useIndices)
-{
-  // Initialize render operation
-  mRenderOp.operationType = operationType;
-  mRenderOp.useIndexes = useIndices;
-  mRenderOp.vertexData = new VertexData;
-  if (mRenderOp.useIndexes)
-    mRenderOp.indexData = new IndexData;
-
-  // Reset buffer capacities
-  mVertexBufferCapacity = 0;
-  mIndexBufferCapacity = 0;
-
-  // Create vertex declaration
-  createVertexDeclaration();
-}
-
-void DynamicRenderable::prepareHardwareBuffers(size_t vertexCount,
-                                               size_t indexCount)
-{
-  // Prepare vertex buffer
-  size_t newVertCapacity = mVertexBufferCapacity;
-  if ((vertexCount > mVertexBufferCapacity) ||
-      (!mVertexBufferCapacity))
-  {
-    // vertexCount exceeds current capacity!
-    // It is necessary to reallocate the buffer.
-
-    // Check if this is the first call
-    if (!newVertCapacity)
-      newVertCapacity = 1;
-
-    // Make capacity the next power of two
-    while (newVertCapacity < vertexCount)
-      newVertCapacity <<= 1;
-  }
-  else if (vertexCount < mVertexBufferCapacity>>1) {
-    // Make capacity the previous power of two
-    while (vertexCount < newVertCapacity>>1)
-      newVertCapacity >>= 1;
-  }
-  if (newVertCapacity != mVertexBufferCapacity)
-  {
-    mVertexBufferCapacity = newVertCapacity;
-    // Create new vertex buffer
-    HardwareVertexBufferSharedPtr vbuf =
-      HardwareBufferManager::getSingleton().createVertexBuffer(
-        mRenderOp.vertexData->vertexDeclaration->getVertexSize(0),
-        mVertexBufferCapacity,
-        HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY); // TODO: Custom HBU_?
-
-    // Bind buffer
-    mRenderOp.vertexData->vertexBufferBinding->setBinding(0, vbuf);
-  }
-  // Update vertex count in the render operation
-  mRenderOp.vertexData->vertexCount = vertexCount;
-
-  if (mRenderOp.useIndexes)
-  {
-    OgreAssert(indexCount <= std::numeric_limits<unsigned short>::max(), "indexCount exceeds 16 bit");
-
-    size_t newIndexCapacity = mIndexBufferCapacity;
-    // Prepare index buffer
-    if ((indexCount > newIndexCapacity) ||
-        (!newIndexCapacity))
-    {
-      // indexCount exceeds current capacity!
-      // It is necessary to reallocate the buffer.
-
-      // Check if this is the first call
-      if (!newIndexCapacity)
-        newIndexCapacity = 1;
-
-      // Make capacity the next power of two
-      while (newIndexCapacity < indexCount)
-        newIndexCapacity <<= 1;
-
-    }
-    else if (indexCount < newIndexCapacity>>1)
-    {
-      // Make capacity the previous power of two
-      while (indexCount < newIndexCapacity>>1)
-        newIndexCapacity >>= 1;
-    }
-
-    if (newIndexCapacity != mIndexBufferCapacity)
-    {
-      mIndexBufferCapacity = newIndexCapacity;
-      // Create new index buffer
-      mRenderOp.indexData->indexBuffer =
-        HardwareBufferManager::getSingleton().createIndexBuffer(
-          HardwareIndexBuffer::IT_16BIT,
-          mIndexBufferCapacity,
-          HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY); // TODO: Custom HBU_?
-    }
-
-    // Update index count in the render operation
-    mRenderOp.indexData->indexCount = indexCount;
-  }
-}
-
-Real DynamicRenderable::getBoundingRadius(void) const
-{
-  return Math::Sqrt(std::max(mBox.getMaximum().squaredLength(), mBox.getMinimum().squaredLength()));
-}
-
-Real DynamicRenderable::getSquaredViewDepth(const Camera* cam) const
-{
-   Vector3 vMin, vMax, vMid, vDist;
-   vMin = mBox.getMinimum();
-   vMax = mBox.getMaximum();
-   vMid = ((vMax - vMin) * 0.5) + vMin;
-   vDist = cam->getDerivedPosition() - vMid;
-
-   return vDist.squaredLength();
-}
-}

Modified: branches/pch/src/orxonox/tools/DynamicRenderable.h
===================================================================
--- branches/pch/src/orxonox/tools/DynamicRenderable.h	2009-06-09 17:44:46 UTC (rev 3129)
+++ branches/pch/src/orxonox/tools/DynamicRenderable.h	2009-06-09 17:51:00 UTC (rev 3130)
@@ -1,72 +1,116 @@
-#ifndef DYNAMIC_RENDERABLE_H
-#define DYNAMIC_RENDERABLE_H
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Sinbad, Baxissimo, DWORD, TheBren (OGRE Wiki)
+ *   Co-authors:
+ *      ...
+ *
+ */
 
+#ifndef _DynamicRenderable_H__
+#define _DynamicRenderable_H__
+
+#include "OrxonoxPrereqs.h"
+
 #include <OgreSimpleRenderable.h>
 
-namespace orxonox
+namespace Ogre
 {
-/// Abstract base class providing mechanisms for dynamically growing hardware buffers.
-class DynamicRenderable : public Ogre::SimpleRenderable
-{
-public:
-  /// Constructor
-  DynamicRenderable();
-  /// Virtual destructor
-  virtual ~DynamicRenderable();
+    /// Abstract base class providing mechanisms for dynamically growing hardware buffers.
+    class DynamicRenderable : public SimpleRenderable
+    {
+    public:
+        /// Constructor
+        DynamicRenderable();
+        /// Virtual destructor
+        virtual ~DynamicRenderable();
 
-  /** Initializes the dynamic renderable.
-   @remarks
-      This function should only be called once. It initializes the
-      render operation, and calls the abstract function
-      createVertexDeclaration().
-   @param operationType The type of render operation to perform.
-   @param useIndices Specifies whether to use indices to determine the
-          vertices to use as input. */
-  void initialize(Ogre::RenderOperation::OperationType operationType,
-                  bool useIndices);
+        /**
+        @brief
+            Initializes the dynamic renderable.
+        @remarks
+            This function should only be called once. It initializes the
+            render operation, and calls the abstract function
+            createVertexDeclaration().
+        @param operationType
+            The type of render operation to perform.
+        @param useIndices
+            Specifies whether to use indices to determine the vertices to use as input.
+        */
+        void initialize(RenderOperation::OperationType operationType,
+        bool useIndices);
 
-  /// Implementation of Ogre::SimpleRenderable
-  virtual Ogre::Real getBoundingRadius(void) const;
-  /// Implementation of Ogre::SimpleRenderable
-  virtual Ogre::Real getSquaredViewDepth(const Ogre::Camera* cam) const;
+        /// Implementation of SimpleRenderable
+        virtual Real getBoundingRadius(void) const;
+        /// Implementation of SimpleRenderable
+        virtual Real getSquaredViewDepth(const Camera* cam) const;
 
-protected:
-  /// Maximum capacity of the currently allocated vertex buffer.
-  size_t mVertexBufferCapacity;
-  /// Maximum capacity of the currently allocated index buffer.
-  size_t mIndexBufferCapacity;
+    protected:
+        /// Maximum capacity of the currently allocated vertex buffer.
+        size_t mVertexBufferCapacity;
+        /// Maximum capacity of the currently allocated index buffer.
+        size_t mIndexBufferCapacity;
 
-  /** Creates the vertex declaration.
-   @remarks
-      Override and set mRenderOp.vertexData->vertexDeclaration here.
-      mRenderOp.vertexData will be created for you before this method
-      is called. */
-  virtual void createVertexDeclaration() = 0;
+        /**
+        @brief
+            Creates the vertex declaration.
+        @remarks
+            Override and set mRenderOp.vertexData->vertexDeclaration here.
+            mRenderOp.vertexData will be created for you before this method
+            is called.
+        */
+        virtual void createVertexDeclaration() = 0;
 
-  /** Prepares the hardware buffers for the requested vertex and index counts.
-   @remarks
-      This function must be called before locking the buffers in
-      fillHardwareBuffers(). It guarantees that the hardware buffers
-      are large enough to hold at least the requested number of
-      vertices and indices (if using indices). The buffers are
-      possibly reallocated to achieve this.
-   @par
-      The vertex and index count in the render operation are set to
-      the values of vertexCount and indexCount respectively.
-   @param vertexCount The number of vertices the buffer must hold.
+        /**
+        @brief
+            Prepares the hardware buffers for the requested vertex and index counts.
+        @remarks
+            This function must be called before locking the buffers in
+            fillHardwareBuffers(). It guarantees that the hardware buffers
+            are large enough to hold at least the requested number of
+            vertices and indices (if using indices). The buffers are
+            possibly reallocated to achieve this.
+        @par
+            The vertex and index count in the render operation are set to
+            the values of vertexCount and indexCount respectively.
+        @param vertexCount
+            The number of vertices the buffer must hold.
+        @param indexCount
+            The number of indices the buffer must hold. This
+            parameter is ignored if not using indices.
+        */
+        void prepareHardwareBuffers(size_t vertexCount, size_t indexCount);
 
-   @param indexCount The number of indices the buffer must hold. This
-          parameter is ignored if not using indices. */
-  void prepareHardwareBuffers(size_t vertexCount, size_t indexCount);
-
-  /** Fills the hardware vertex and index buffers with data.
-   @remarks
-      This function must call prepareHardwareBuffers() before locking
-      the buffers to ensure the they are large enough for the data to
-      be written. Afterwards the vertex and index buffers (if using
-      indices) can be locked, and data can be written to them. */
-  virtual void fillHardwareBuffers() = 0;
-};
+        /**
+        @brief
+            Fills the hardware vertex and index buffers with data.
+        @remarks
+            This function must call prepareHardwareBuffers() before locking
+            the buffers to ensure the they are large enough for the data to
+            be written. Afterwards the vertex and index buffers (if using
+            indices) can be locked, and data can be written to them.
+        */
+        virtual void fillHardwareBuffers() = 0;
+    };
 }
 
-#endif // DYNAMIC_RENDERABLE_H
+#endif /* _DynamicRenderable_H__ */




More information about the Orxonox-commit mailing list