[colobot] 189/377: Added DrawPrimitives() for drawing multiple primitives (not optimized for now)

Didier Raboud odyx at moszumanska.debian.org
Wed Mar 30 13:34:14 UTC 2016


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch debian/master
in repository colobot.

commit d82b5ef7463488be66e272b1fe5d183a6898fe62
Author: Tomasz Kapuściński <tomaszkax86 at gmail.com>
Date:   Wed Dec 23 23:23:10 2015 +0100

    Added DrawPrimitives() for drawing multiple primitives (not optimized for now)
---
 src/graphics/core/device.h         | 12 ++++++++++++
 src/graphics/core/nulldevice.cpp   | 15 +++++++++++++++
 src/graphics/core/nulldevice.h     | 11 ++++++++++-
 src/graphics/opengl/gl21device.cpp | 33 +++++++++++++++++++++++++++++++++
 src/graphics/opengl/gl21device.h   | 11 ++++++++++-
 src/graphics/opengl/gl33device.cpp | 33 +++++++++++++++++++++++++++++++++
 src/graphics/opengl/gl33device.h   | 11 ++++++++++-
 src/graphics/opengl/gldevice.cpp   | 33 +++++++++++++++++++++++++++++++++
 src/graphics/opengl/gldevice.h     | 11 ++++++++++-
 9 files changed, 166 insertions(+), 4 deletions(-)

diff --git a/src/graphics/core/device.h b/src/graphics/core/device.h
index def5b7f..f0dde19 100644
--- a/src/graphics/core/device.h
+++ b/src/graphics/core/device.h
@@ -361,6 +361,18 @@ public:
     //! Renders primitive composed of vertices with solid color
     virtual void DrawPrimitive(PrimitiveType type, const VertexCol *vertices , int vertexCount) = 0;
 
+    //! Renders primitives composed of lists of vertices with single texture
+    virtual void DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) = 0;
+    //! Renders primitives composed of lists of vertices with multitexturing (2 textures)
+    virtual void DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) = 0;
+    //! Renders primitives composed of lists of vertices with solid color
+    virtual void DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+        int first[], int count[], int drawCount) = 0;
+
     //! Creates a static buffer composed of given primitives with single texture vertices
     virtual unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount) = 0;
 
diff --git a/src/graphics/core/nulldevice.cpp b/src/graphics/core/nulldevice.cpp
index 303c18b..64302b8 100644
--- a/src/graphics/core/nulldevice.cpp
+++ b/src/graphics/core/nulldevice.cpp
@@ -162,6 +162,21 @@ void CNullDevice::DrawPrimitive(PrimitiveType type, const VertexCol *vertices, i
 {
 }
 
+void CNullDevice::DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+    int first[], int count[], int drawCount, Color color)
+{
+}
+
+void CNullDevice::DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+    int first[], int count[], int drawCount, Color color)
+{
+}
+
+void CNullDevice::DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+    int first[], int count[], int drawCount)
+{
+}
+
 unsigned int CNullDevice::CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount)
 {
     return 0;
diff --git a/src/graphics/core/nulldevice.h b/src/graphics/core/nulldevice.h
index 3ca387b..214545c 100644
--- a/src/graphics/core/nulldevice.h
+++ b/src/graphics/core/nulldevice.h
@@ -85,7 +85,16 @@ public:
 
     void DrawPrimitive(PrimitiveType type, const Vertex* vertices, int vertexCount, Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
     void DrawPrimitive(PrimitiveType type, const VertexTex2* vertices, int vertexCount, Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
-    void DrawPrimitive(PrimitiveType type, const VertexCol *vertices , int vertexCount) override;
+    void DrawPrimitive(PrimitiveType type, const VertexCol *vertices, int vertexCount) override;
+
+    void DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
+    void DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
+    void DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+        int first[], int count[], int drawCount) override;
 
     unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount) override;
     unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const VertexTex2* vertices, int vertexCount) override;
diff --git a/src/graphics/opengl/gl21device.cpp b/src/graphics/opengl/gl21device.cpp
index 6b4327a..805286a 100644
--- a/src/graphics/opengl/gl21device.cpp
+++ b/src/graphics/opengl/gl21device.cpp
@@ -1250,6 +1250,39 @@ void CGL21Device::DrawPrimitive(PrimitiveType type, const VertexCol *vertices, i
     glDisableClientState(GL_COLOR_ARRAY);
 }
 
+void CGL21Device::DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+    int first[], int count[], int drawCount, Color color)
+{
+    // TODO: use glMultiDrawArrays()
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i], color);
+    }
+}
+
+void CGL21Device::DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+    int first[], int count[], int drawCount, Color color)
+{
+    // TODO: use glMultiDrawArrays()
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i], color);
+    }
+}
+
+void CGL21Device::DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+    int first[], int count[], int drawCount)
+{
+    // TODO: use glMultiDrawArrays()
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i]);
+    }
+}
+
 unsigned int CGL21Device::CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount)
 {
     unsigned int id = ++m_lastVboId;
diff --git a/src/graphics/opengl/gl21device.h b/src/graphics/opengl/gl21device.h
index 9e8a18f..c59137e 100644
--- a/src/graphics/opengl/gl21device.h
+++ b/src/graphics/opengl/gl21device.h
@@ -100,7 +100,16 @@ public:
                                Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
     virtual void DrawPrimitive(PrimitiveType type, const VertexTex2 *vertices, int vertexCount,
                                Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
-    void DrawPrimitive(PrimitiveType type, const VertexCol *vertices , int vertexCount) override;
+    virtual void DrawPrimitive(PrimitiveType type, const VertexCol *vertices, int vertexCount) override;
+
+    virtual void DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
+    virtual void DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
+    virtual void DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+        int first[], int count[], int drawCount) override;
 
     unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount) override;
     unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const VertexTex2* vertices, int vertexCount) override;
diff --git a/src/graphics/opengl/gl33device.cpp b/src/graphics/opengl/gl33device.cpp
index 8799013..7ee975c 100644
--- a/src/graphics/opengl/gl33device.cpp
+++ b/src/graphics/opengl/gl33device.cpp
@@ -1328,6 +1328,39 @@ void CGL33Device::DrawPrimitive(PrimitiveType type, const VertexCol *vertices, i
     glDrawArrays(TranslateGfxPrimitive(type), 0, vertexCount);
 }
 
+void CGL33Device::DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+    int first[], int count[], int drawCount, Color color)
+{
+    // TODO: use glMultiDrawArrays()
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i], color);
+    }
+}
+
+void CGL33Device::DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+    int first[], int count[], int drawCount, Color color)
+{
+    // TODO: use glMultiDrawArrays()
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i], color);
+    }
+}
+
+void CGL33Device::DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+    int first[], int count[], int drawCount)
+{
+    // TODO: use glMultiDrawArrays()
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i]);
+    }
+}
+
 unsigned int CGL33Device::CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount)
 {
     unsigned int id = 0;
diff --git a/src/graphics/opengl/gl33device.h b/src/graphics/opengl/gl33device.h
index b872bb0..79825df 100644
--- a/src/graphics/opengl/gl33device.h
+++ b/src/graphics/opengl/gl33device.h
@@ -102,7 +102,16 @@ public:
                                Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
     virtual void DrawPrimitive(PrimitiveType type, const VertexTex2 *vertices, int vertexCount,
                                Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
-    void DrawPrimitive(PrimitiveType type, const VertexCol *vertices , int vertexCount) override;
+    virtual void DrawPrimitive(PrimitiveType type, const VertexCol *vertices , int vertexCount) override;
+
+    virtual void DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
+    virtual void DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
+    virtual void DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+        int first[], int count[], int drawCount) override;
 
     unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount) override;
     unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const VertexTex2* vertices, int vertexCount) override;
diff --git a/src/graphics/opengl/gldevice.cpp b/src/graphics/opengl/gldevice.cpp
index 5aeab5f..a289e93 100644
--- a/src/graphics/opengl/gldevice.cpp
+++ b/src/graphics/opengl/gldevice.cpp
@@ -1273,6 +1273,39 @@ void CGLDevice::DrawPrimitive(PrimitiveType type, const VertexCol *vertices, int
     glDisableClientState(GL_COLOR_ARRAY);
 }
 
+void CGLDevice::DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+    int first[], int count[], int drawCount, Color color)
+{
+    // TODO: use glMultiDrawArrays() for OpenGL 1.4+
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i], color);
+    }
+}
+
+void CGLDevice::DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+    int first[], int count[], int drawCount, Color color)
+{
+    // TODO: use glMultiDrawArrays() for OpenGL 1.4+
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i], color);
+    }
+}
+
+void CGLDevice::DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+    int first[], int count[], int drawCount)
+{
+    // TODO: use glMultiDrawArrays() for OpenGL 1.4+
+
+    for (int i = 0; i < drawCount; i++)
+    {
+        DrawPrimitive(type, vertices + first[i], count[i]);
+    }
+}
+
 unsigned int CGLDevice::CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount)
 {
     unsigned int id = 0;
diff --git a/src/graphics/opengl/gldevice.h b/src/graphics/opengl/gldevice.h
index 664bdc5..da1d353 100644
--- a/src/graphics/opengl/gldevice.h
+++ b/src/graphics/opengl/gldevice.h
@@ -119,7 +119,16 @@ public:
                                Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
     virtual void DrawPrimitive(PrimitiveType type, const VertexTex2 *vertices, int vertexCount,
                                Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
-    void DrawPrimitive(PrimitiveType type, const VertexCol *vertices , int vertexCount) override;
+    virtual void DrawPrimitive(PrimitiveType type, const VertexCol *vertices, int vertexCount) override;
+
+    virtual void DrawPrimitives(PrimitiveType type, const Vertex *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
+    virtual void DrawPrimitives(PrimitiveType type, const VertexTex2 *vertices,
+        int first[], int count[], int drawCount,
+        Color color = Color(1.0f, 1.0f, 1.0f, 1.0f)) override;
+    virtual void DrawPrimitives(PrimitiveType type, const VertexCol *vertices,
+        int first[], int count[], int drawCount) override;
 
     unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const Vertex* vertices, int vertexCount) override;
     unsigned int CreateStaticBuffer(PrimitiveType primitiveType, const VertexTex2* vertices, int vertexCount) override;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list