Add lineWidth property to QSGGeometry
authorAlex Wilson <alex.wilson@nokia.com>
Wed, 14 Dec 2011 06:10:15 +0000 (16:10 +1000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 15 Dec 2011 10:02:55 +0000 (11:02 +0100)
Allows users to set a line width when using drawingModes GL_LINES,
GL_LINE_LOOP etc. Only calls glLineWidth on these drawingModes, and
does it just before the glDrawElements/glDrawArrays.

Change-Id: I2af583970b2acf0ddb59025a454caa75a8ddbd4f
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
src/quick/scenegraph/coreapi/qsggeometry.cpp
src/quick/scenegraph/coreapi/qsggeometry.h
src/quick/scenegraph/coreapi/qsgrenderer.cpp

index 8661c9a..b747bb9 100644 (file)
@@ -138,6 +138,7 @@ QSGGeometry::QSGGeometry(const QSGGeometry::AttributeSet &attributes,
     , m_owns_data(false)
     , m_index_usage_pattern(AlwaysUploadPattern)
     , m_vertex_usage_pattern(AlwaysUploadPattern)
+    , m_line_width(1.0)
 {
     Q_ASSERT(m_attributes.count > 0);
     Q_ASSERT(m_attributes.stride > 0);
@@ -253,6 +254,30 @@ void QSGGeometry::setDrawingMode(GLenum mode)
 }
 
 /*!
+    Gets the current line width to be used for this geometry. This property only
+    applies where the drawingMode is GL_LINES or a related value.
+
+    The default value is 1.0
+
+    \sa setLineWidth(), drawingMode()
+*/
+float QSGGeometry::lineWidth() const
+{
+    return m_line_width;
+}
+
+/*!
+    Sets the line width to be used for this geometry. This property only applies
+    where the drawingMode is GL_LINES or a related value.
+
+    \sa lineWidth(), drawingMode()
+*/
+void QSGGeometry::setLineWidth(float w)
+{
+    m_line_width = w;
+}
+
+/*!
     \fn int QSGGeometry::drawingMode() const
 
     Returns the drawing mode of this geometry.
index aea6f0b..85f4881 100644 (file)
@@ -160,6 +160,9 @@ public:
     void markIndexDataDirty();
     void markVertexDataDirty();
 
+    float lineWidth() const;
+    void setLineWidth(float w);
+
 private:
     friend class QSGGeometryData;
 
@@ -181,6 +184,8 @@ private:
     uint m_reserved_bits : 27;
 
     float m_prealloc[16];
+
+    float m_line_width;
 };
 
 inline uint *QSGGeometry::indexDataAsUInt()
index 1b4f5da..a7aac5f 100644 (file)
@@ -701,6 +701,10 @@ void QSGRenderer::draw(const QSGMaterialShader *shader, const QSGGeometry *g)
         indexData = g->indexData();
     }
 
+    // Set the line width if applicable
+    if (g->drawingMode() == GL_LINES || g->drawingMode() == GL_LINE_STRIP || g->drawingMode() == GL_LINE_LOOP) {
+        glLineWidth(g->lineWidth());
+    }
 
     // draw the stuff...
     if (g->indexCount()) {