You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

408 lines
12 KiB

// qsggeometry.sip generated by MetaSIP
//
// This file is part of the QtQuick Python extension module.
//
// Copyright (c) 2023 Riverbank Computing Limited <info@riverbankcomputing.com>
//
// 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 <qsggeometry.h>
%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 <qsggeometry.h>
%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 <qsggeometry.h>
#include <QVector>
%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<QSGGeometry::Attribute> 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<QSGGeometry::Attribute *>(
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<char *>(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<QSGGeometry::Attribute *>(
SIPBytes_AsString(bytes));
sipSetUserObject(sipSelf, bytes);
}
}
}
}
%End
int count;
int stride;
const QSGGeometry::Attribute *attributes /TypeHint="PyQt5.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 <qsggeometry.h>
%End
float x;
float y;
void set(float nx, float ny);
};
struct TexturedPoint2D
{
%TypeHeaderCode
#include <qsggeometry.h>
%End
float x;
float y;
float tx;
float ty;
void set(float nx, float ny, float ntx, float nty);
};
struct ColoredPoint2D
{
%TypeHeaderCode
#include <qsggeometry.h>
%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="PyQt5.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="PyQt5.sip.array[int]"/;
%MethodCode
sipRes = sipConvertToArray(sipCpp->indexDataAsUInt(), "I",
sipCpp->indexCount(), 0);
%End
SIP_PYOBJECT indexDataAsUShort() /TypeHint="PyQt5.sip.array[int]"/;
%MethodCode
sipRes = sipConvertToArray(sipCpp->indexDataAsUShort(), "H",
sipCpp->indexCount(), 0);
%End
SIP_PYOBJECT vertexDataAsPoint2D() /TypeHint="PyQt5.sip.array[QSGGeometry.Point2D]"/;
%MethodCode
sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsPoint2D(),
sipType_QSGGeometry_Point2D, "ff", sizeof (QSGGeometry::Point2D),
sipCpp->vertexCount(), 0);
%End
SIP_PYOBJECT vertexDataAsTexturedPoint2D() /TypeHint="PyQt5.sip.array[QSGGeometry.TexturedPoint2D]"/;
%MethodCode
sipRes = sipConvertToTypedArray(sipCpp->vertexDataAsTexturedPoint2D(),
sipType_QSGGeometry_TexturedPoint2D, "ffff",
sizeof (QSGGeometry::TexturedPoint2D), sipCpp->vertexCount(), 0);
%End
SIP_PYOBJECT vertexDataAsColoredPoint2D() /TypeHint="PyQt5.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 &);
};