// qsggeometry.sip generated by MetaSIP // // This file is part of the QtQuick Python extension module. // // Copyright (c) 2020 Riverbank Computing Limited // // This file is part of PyQt5. // // This file may be used under the terms of the GNU General Public License // version 3.0 as published by the Free Software Foundation and appearing in // the file LICENSE included in the packaging of this file. Please review the // following information to ensure the GNU General Public License version 3.0 // requirements will be met: http://www.gnu.org/copyleft/gpl.html. // // If you do not wish to use this file under the terms of the GPL version 3.0 // then you may purchase a commercial license. For more information contact // info@riverbankcomputing.com. // // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. class QSGGeometry /Supertype=sip.wrapper/ { %TypeHeaderCode #include %End public: // Convenient primitives and drawing modes. enum /NoScope/ { GL_BYTE, %If (PyQt_Desktop_OpenGL) GL_DOUBLE, %End GL_FLOAT, GL_INT }; enum /NoScope/ { GL_POINTS, GL_LINES, GL_LINE_LOOP, GL_LINE_STRIP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN }; struct Attribute { %TypeHeaderCode #include %End int position; int tupleSize; int type; uint isVertexCoordinate; %If (Qt_5_8_0 -) QSGGeometry::AttributeType attributeType; %End static QSGGeometry::Attribute create(int pos, int tupleSize, int primitiveType, bool isPosition = false) /Factory/; %If (Qt_5_8_0 -) static QSGGeometry::Attribute createWithAttributeType(int pos, int tupleSize, int primitiveType, QSGGeometry::AttributeType attributeType) /Factory/; %End }; struct AttributeSet /NoDefaultCtors/ { %TypeHeaderCode #include #include %End AttributeSet(SIP_PYOBJECT attributes /TypeHint="Iterable[QSGGeometry.Attribute]"/, int stride = 0); %MethodCode PyObject *iter = PyObject_GetIter(a0); if (!iter #if PY_MAJOR_VERSION < 3 || PyString_Check(a0) #endif || PyUnicode_Check(a0)) { Py_XDECREF(iter); PyErr_SetString(PyExc_TypeError, "iterable object expected"); sipError = sipErrorContinue; } else { QVector attrs; int stride = 0; for (Py_ssize_t i = 0; ; ++i) { PyErr_Clear(); PyObject *itm = PyIter_Next(iter); if (!itm) { if (PyErr_Occurred()) sipError = sipErrorFail; break; } int state, is_err = 0; QSGGeometry::Attribute *attr; attr = reinterpret_cast( sipForceConvertToType(itm, sipType_QSGGeometry_Attribute, 0, SIP_NOT_NONE, &state, &is_err)); if (is_err) { PyErr_Format(PyExc_TypeError, "index %zd has type '%s' but 'QSGGeometry.Attribute' is expected", i, sipPyTypeName(Py_TYPE(itm))); Py_DECREF(itm); sipError = sipErrorFail; break; } // Calculate the stride if there no explicit one. if (a1 <= 0) { int size; switch (attr->type) { case GL_BYTE: size = sizeof (qint8); break; #if defined(SIPFeature_PyQt_Desktop_OpenGL) #if GL_DOUBLE != GL_FLOAT case GL_DOUBLE: size = sizeof (double); break; #endif #endif case GL_FLOAT: size = sizeof (float); break; case GL_INT: size = sizeof (qint32); break; default: size = 0; } if (!size) { PyErr_Format(PyExc_TypeError, "index %zd has an unsupported primitive type", i); sipReleaseType(attr, sipType_QSGGeometry_Attribute, state); Py_DECREF(itm); sipError = sipErrorFail; break; } stride += attr->tupleSize * size; } attrs.append(*attr); sipReleaseType(attr, sipType_QSGGeometry_Attribute, state); Py_DECREF(itm); } Py_DECREF(iter); if (sipError == sipErrorNone) { if (attrs.isEmpty()) { PyErr_SetString(PyExc_TypeError, "no attributes defined"); sipError = sipErrorFail; } else { PyObject *bytes = SIPBytes_FromStringAndSize( reinterpret_cast(attrs.data()), sizeof (QSGGeometry::Attribute) * attrs.size()); if (!bytes) { sipError = sipErrorFail; } else { sipCpp = new QSGGeometry::AttributeSet; sipCpp->count = attrs.size(); sipCpp->stride = (a1 > 0 ? a1 : stride); sipCpp->attributes = reinterpret_cast( SIPBytes_AsString(bytes)); sipSetUserObject(sipSelf, bytes); } } } } %End int count; int stride; const QSGGeometry::Attribute *attributes /TypeHint="sip.array[QSGGeometry.Attribute]"/ { %GetCode sipPy = sipConvertToTypedArray((void *)sipCpp->attributes, sipType_QSGGeometry_Attribute, "iiiI", sizeof (QSGGeometry::Attribute), sipCpp->count, SIP_READ_ONLY); %End %SetCode sipErr = 1; PyErr_SetString(PyExc_ValueError, "array is read-only"); %End }; }; struct Point2D { %TypeHeaderCode #include %End float x; float y; void set(float nx, float ny); }; struct TexturedPoint2D { %TypeHeaderCode #include %End float x; float y; float tx; float ty; void set(float nx, float ny, float ntx, float nty); }; struct ColoredPoint2D { %TypeHeaderCode #include %End float x; float y; unsigned char r /PyInt/; unsigned char g /PyInt/; unsigned char b /PyInt/; unsigned char a /PyInt/; void set(float nx, float ny, uchar nr /PyInt/, uchar ng /PyInt/, uchar nb /PyInt/, uchar na /PyInt/); }; static const QSGGeometry::AttributeSet &defaultAttributes_Point2D() /NoCopy/; static const QSGGeometry::AttributeSet &defaultAttributes_TexturedPoint2D() /NoCopy/; static const QSGGeometry::AttributeSet &defaultAttributes_ColoredPoint2D() /NoCopy/; enum DataPattern { AlwaysUploadPattern, StreamPattern, DynamicPattern, StaticPattern, }; QSGGeometry(const QSGGeometry::AttributeSet &attribs /KeepReference/, int vertexCount, int indexCount = 0, int indexType = GL_UNSIGNED_SHORT); virtual ~QSGGeometry(); void setDrawingMode(unsigned int mode); unsigned int drawingMode() const; void allocate(int vertexCount, int indexCount = 0); int vertexCount() const; void *vertexData(); int indexType() const; int indexCount() const; void *indexData(); int attributeCount() const; SIP_PYOBJECT attributes() const /TypeHint="sip.array[QSGGeometry.Attribute]"/; %MethodCode sipRes = sipConvertToTypedArray((void *)sipCpp->attributes(), sipType_QSGGeometry_Attribute, "iiiI", sizeof (QSGGeometry::Attribute), sipCpp->attributeCount(), SIP_READ_ONLY); %End int sizeOfVertex() const; static void updateRectGeometry(QSGGeometry *g, const QRectF &rect); static void updateTexturedRectGeometry(QSGGeometry *g, const QRectF &rect, const QRectF &sourceRect); void setIndexDataPattern(QSGGeometry::DataPattern p); QSGGeometry::DataPattern indexDataPattern() const; void setVertexDataPattern(QSGGeometry::DataPattern p); QSGGeometry::DataPattern vertexDataPattern() const; void markIndexDataDirty(); void markVertexDataDirty(); float lineWidth() const; void setLineWidth(float w); SIP_PYOBJECT indexDataAsUInt() /TypeHint="sip.array[int]"/; %MethodCode sipRes = sipConvertToArray(sipCpp->indexDataAsUInt(), "I", sipCpp->indexCount(), 0); %End SIP_PYOBJECT indexDataAsUShort() /TypeHint="sip.array[int]"/; %MethodCode sipRes = sipConvertToArray(sipCpp->indexDataAsUShort(), "H", sipCpp->indexCount(), 0); %End SIP_PYOBJECT vertexDataAsPoint2D() /TypeHint="sip.array[QSGGeometry.Point2D]"/; %MethodCode sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsPoint2D(), sipType_QSGGeometry_Point2D, "ff", sizeof (QSGGeometry::Point2D), sipCpp->vertexCount(), 0); %End SIP_PYOBJECT vertexDataAsTexturedPoint2D() /TypeHint="sip.array[QSGGeometry.TexturedPoint2D]"/; %MethodCode sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsTexturedPoint2D(), sipType_QSGGeometry_TexturedPoint2D, "ffff", sizeof (QSGGeometry::TexturedPoint2D), sipCpp->vertexCount(), 0); %End SIP_PYOBJECT vertexDataAsColoredPoint2D() /TypeHint="sip.array[QSGGeometry.ColoredPoint2D]"/; %MethodCode sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsColoredPoint2D(), sipType_QSGGeometry_ColoredPoint2D, "ffbbbb", sizeof (QSGGeometry::ColoredPoint2D), sipCpp->vertexCount(), 0); %End int sizeOfIndex() const; %If (Qt_5_8_0 -) enum AttributeType { UnknownAttribute, PositionAttribute, ColorAttribute, TexCoordAttribute, TexCoord1Attribute, TexCoord2Attribute, }; %End %If (Qt_5_8_0 -) enum DrawingMode { DrawPoints, DrawLines, DrawLineLoop, DrawLineStrip, DrawTriangles, DrawTriangleStrip, DrawTriangleFan, }; %End %If (Qt_5_8_0 -) enum Type { ByteType, UnsignedByteType, ShortType, UnsignedShortType, IntType, UnsignedIntType, FloatType, %If (Qt_5_14_0 -) Bytes2Type, %End %If (Qt_5_14_0 -) Bytes3Type, %End %If (Qt_5_14_0 -) Bytes4Type, %End %If (Qt_5_14_0 -) DoubleType, %End }; %End %If (Qt_5_8_0 -) static void updateColoredRectGeometry(QSGGeometry *g, const QRectF &rect); %End private: QSGGeometry(const QSGGeometry &); };