54 #include <QtGui/qtguiglobal.h>
58 #include <QVarLengthArray>
64 #include <private/qshader_p.h>
101 #ifndef QT_NO_DEBUG_STREAM
109 QRhiViewport(
float x,
float y,
float w,
float h,
float minDepth = 0.0f,
float maxDepth = 1.0f);
111 std::array<float, 4>
viewport()
const {
return m_rect; }
113 m_rect[0] =
x; m_rect[1] =
y; m_rect[2] =
w; m_rect[3] =
h;
123 std::array<float, 4> m_rect { { 0.0f, 0.0f, 0.0f, 0.0f } };
124 float m_minDepth = 0.0f;
125 float m_maxDepth = 1.0f;
133 #ifndef QT_NO_DEBUG_STREAM
143 std::array<int, 4>
scissor()
const {
return m_rect; }
145 m_rect[0] =
x; m_rect[1] =
y; m_rect[2] =
w; m_rect[3] =
h;
149 std::array<int, 4> m_rect { { 0, 0, 0, 0 } };
157 #ifndef QT_NO_DEBUG_STREAM
183 Classification m_classification = PerVertex;
184 int m_instanceStepRate = 1;
192 #ifndef QT_NO_DEBUG_STREAM
238 Format m_format = Float4;
240 int m_matrixSlice = -1;
248 #ifndef QT_NO_DEBUG_STREAM
258 template<
typename InputIterator>
262 std::copy(
first, last, std::back_inserter(m_bindings));
269 template<
typename InputIterator>
272 m_attributes.clear();
273 std::copy(
first, last, std::back_inserter(m_attributes));
290 #ifndef QT_NO_DEBUG_STREAM
317 Type m_type = Vertex;
327 #ifndef QT_NO_DEBUG_STREAM
348 VertexStage = 1 << 0,
349 FragmentStage = 1 << 1,
350 ComputeStage = 1 << 2
384 QRhiShaderResourceBinding::StageFlags
stage;
392 static const int MAX_TEX_SAMPLER_ARRAY_SIZE = 16;
413 template<
typename Output>
428 static const int LAYOUT_DESC_ENTRIES_PER_BINDING = 4;
430 template<
typename Output>
435 while (
first != last) {
452 #ifndef QT_NO_DEBUG_STREAM
469 int layer()
const {
return m_layer; }
472 int level()
const {
return m_level; }
490 int m_resolveLayer = 0;
491 int m_resolveLevel = 0;
505 template<
typename InputIterator>
508 m_colorAttachments.clear();
509 std::copy(
first, last, std::back_inserter(m_colorAttachments));
557 QPoint m_destinationTopLeft;
570 int layer()
const {
return m_layer; }
573 int level()
const {
return m_level; }
595 template<
typename InputIterator>
599 std::copy(
first, last, std::back_inserter(m_entries));
636 int m_sourceLayer = 0;
637 int m_sourceLevel = 0;
639 int m_destinationLayer = 0;
640 int m_destinationLevel = 0;
641 QPoint m_destinationTopLeft;
655 int layer()
const {
return m_layer; }
658 int level()
const {
return m_level; }
702 quint64 globalResourceId()
const;
723 VertexBuffer = 1 << 0,
724 IndexBuffer = 1 << 1,
725 UniformBuffer = 1 << 2,
726 StorageBuffer = 1 << 3
731 const void *objects[3];
740 UsageFlags
usage()
const {
return m_usage; }
743 int size()
const {
return m_size; }
750 virtual char *beginFullDynamicBufferUpdateForCurrentFrame();
751 virtual void endFullDynamicBufferUpdateForCurrentFrame();
766 RenderTarget = 1 << 0,
770 UsedAsTransferSource = 1 << 5,
771 UsedWithGenerateMips = 1 << 6,
772 UsedWithLoadStore = 1 << 7,
773 UsedAsCompressedAtlas = 1 << 8,
774 ExternalOES = 1 << 9,
775 ThreeDimensional = 1 << 10,
776 TextureRectangleGL = 1 << 11,
777 TextureArray = 1 << 12
843 int depth()
const {
return m_depth; }
858 virtual void setNativeLayout(
int layout);
862 int arraySize_,
int sampleCount_,
Flags flags_);
946 UsedWithSwapChainOnly = 1 << 0
1022 PreserveColorContents = 1 << 0,
1023 PreserveDepthStencilContents = 1 << 1
1054 template<
typename InputIterator>
1058 std::copy(
first, last, std::back_inserter(m_bindings));
1071 BindingsAreSorted = 0x01
1075 virtual
void updateResources(UpdateFlags
flags = {}) = 0;
1078 static const int BINDING_PREALLOC = 12;
1081 size_t m_layoutDescHash = 0;
1087 #ifndef QT_NO_DEBUG_STREAM
1094 #ifndef QT_NO_DEBUG_STREAM
1102 UsesBlendConstants = 1 << 0,
1103 UsesStencilRef = 1 << 1,
1104 UsesScissor = 1 << 2,
1105 CompileShadersWithDebugInfo = 1 << 3
1168 ColorMask colorWrite = ColorMask(0xF);
1222 template<
typename InputIterator>
1225 m_targetBlends.clear();
1226 std::copy(
first, last, std::back_inserter(m_targetBlends));
1268 template<
typename InputIterator>
1271 m_shaderStages.clear();
1272 std::copy(
first, last, std::back_inserter(m_shaderStages));
1295 bool m_depthTest =
false;
1296 bool m_depthWrite =
false;
1298 bool m_stencilTest =
false;
1303 int m_sampleCount = 1;
1304 float m_lineWidth = 1.0f;
1305 int m_depthBias = 0;
1306 float m_slopeScaledDepthBias = 0.0f;
1321 SurfaceHasPreMulAlpha = 1 << 0,
1322 SurfaceHasNonPreMulAlpha = 1 << 1,
1324 UsedAsTransferSource = 1 << 3,
1326 MinimalBufferCount = 1 << 5
1360 int m_sampleCount = 1;
1371 CompileShadersWithDebugInfo = 1 << 0
1405 ExternalContent = 0x01,
1406 DoNotTrackResourcesForCompute = 0x02
1415 const QColor &colorClearValue,
1418 BeginPassFlags
flags = {});
1424 int dynamicOffsetCount = 0,
1433 void setBlendConstants(
const QColor &
c);
1434 void setStencilRef(
quint32 refValue);
1441 void drawIndexed(
quint32 indexCount,
1448 void debugMarkEnd();
1454 void dispatch(
int x,
int y,
int z);
1457 void beginExternal();
1488 bool hasOptimalCapacity()
const;
1527 #ifndef QT_NO_DEBUG_STREAM
1547 EnableProfiling = 1 << 0,
1548 EnableDebugMarkers = 1 << 1,
1549 PreferSoftwareRenderer = 1 << 2,
1550 EnablePipelineCacheDataSave = 1 << 3
1562 MultisampleTexture = 1,
1600 SkipPresent = 1 << 0
1616 MaxUniformBufferRange
1626 Implementation backend()
const;
1627 const char *backendName()
const;
1640 QRhiBuffer::UsageFlags
usage,
1644 const QSize &pixelSize,
1650 const QSize &pixelSize,
1661 const QSize &pixelSize,
1678 bool isRecordingFrame()
const;
1679 int currentFrameSlot()
const;
1682 FrameOpResult endOffscreenFrame(EndFrameFlags
flags = {});
1690 int ubufAlignment()
const;
1691 int ubufAligned(
int v)
const;
1693 int mipLevelsForSize(
const QSize &
size)
const;
1694 QSize sizeForMipLevel(
int mipLevel,
const QSize &baseLevelSize)
const;
1696 bool isYUpInFramebuffer()
const;
1697 bool isYUpInNDC()
const;
1698 bool isClipDepthZeroToOne()
const;
1704 int resourceLimit(ResourceLimit
limit)
const;
1707 bool makeThreadLocalNativeContextCurrent();
1711 static const int MAX_MIP_LEVELS = 16;
1713 void releaseCachedResources();
1715 bool isDeviceLost()
const;
small capitals from c petite p scientific f u
#define G(r, i, a, b, c, d)
The QByteArray class provides an array of bytes.
The QColor class provides colors based on RGB, HSV or CMYK values.
operator<<(QDataStream &ds, qfloat16 f)
The QDebug class provides an output stream for debugging information.
template< typename Enum > bool operator!=(Enum lhs, QFlags< Enum > rhs)
template< typename Enum > size_t qHash(QFlags< Enum > flags, size_t seed=0) noexcept
template< typename Enum > bool operator==(Enum lhs, QFlags< Enum > rhs)
The QImage class provides a hardware-independent image representation that allows direct access to th...
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
The QPoint class defines a point in the plane using integer precision.
void setUsage(UsageFlags u)
QRhiTexture * resolveTexture() const
void setTexture(QRhiTexture *tex)
QRhiColorAttachment()=default
void setRenderBuffer(QRhiRenderBuffer *rb)
QRhiTexture * texture() const
void setResolveLayer(int layer)
void setResolveLevel(int level)
void setResolveTexture(QRhiTexture *tex)
QRhiRenderBuffer * renderBuffer() const
QPair< QRhiBuffer *, quint32 > VertexInput
QPair< int, quint32 > DynamicOffset
QRhiShaderStage m_shaderStage
QRhiShaderResourceBindings * shaderResourceBindings() const
void setShaderStage(const QRhiShaderStage &stage)
QRhiShaderStage shaderStage() const
void setShaderResourceBindings(QRhiShaderResourceBindings *srb)
void setDepthClearValue(float d)
float depthClearValue() const
quint32 stencilClearValue() const
QRhiDepthStencilClearValue()=default
void setStencilClearValue(quint32 s)
void setStencilFront(const StencilOpState &state)
void setCullMode(CullMode mode)
void setFrontFace(FrontFace f)
void setTargetBlends(std::initializer_list< TargetBlend > list)
QRhiRenderPassDescriptor * renderPassDescriptor() const
FrontFace frontFace() const
void setStencilTest(bool enable)
QRhiShaderResourceBindings * shaderResourceBindings() const
StencilOpState m_stencilFront
const TargetBlend * cendTargetBlends() const
void setDepthWrite(bool enable)
bool hasDepthWrite() const
void setShaderResourceBindings(QRhiShaderResourceBindings *srb)
StencilOpState stencilBack() const
StencilOpState stencilFront() const
void setDepthOp(CompareOp op)
void setSlopeScaledDepthBias(float bias)
void setVertexInputLayout(const QRhiVertexInputLayout &layout)
void setShaderStages(InputIterator first, InputIterator last)
void setStencilReadMask(quint32 mask)
QVarLengthArray< QRhiShaderStage, 4 > m_shaderStages
bool hasDepthTest() const
void setShaderStages(std::initializer_list< QRhiShaderStage > list)
QRhiVertexInputLayout m_vertexInputLayout
bool hasStencilTest() const
QVarLengthArray< TargetBlend, 8 > m_targetBlends
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
void setSampleCount(int s)
void setTopology(Topology t)
quint32 stencilWriteMask() const
QRhiVertexInputLayout vertexInputLayout() const
StencilOpState m_stencilBack
Topology topology() const
quint32 stencilReadMask() const
void setTargetBlends(InputIterator first, InputIterator last)
void setDepthTest(bool enable)
CompareOp depthOp() const
void setDepthBias(int bias)
const QRhiShaderStage * cendShaderStages() const
float slopeScaledDepthBias() const
void setLineWidth(float width)
void setStencilWriteMask(quint32 mask)
const TargetBlend * cbeginTargetBlends() const
const QRhiShaderStage * cbeginShaderStages() const
void setStencilBack(const StencilOpState &state)
CullMode cullMode() const
@ MaxThreadsPerThreadGroup
@ MaxThreadGroupsPerDimension
@ NonDynamicUniformBuffers
@ RenderToNonBaseMipLevel
@ MultisampleRenderBuffer
@ PipelineCacheDataLoadSave
@ ReadBackNonUniformBuffer
@ ReadBackNonBaseMipLevel
@ NonFourAlignedEffectiveIndexBufferOffset
@ ThreeDimensionalTextures
@ ReadBackAnyTextureFormat
@ FrameOpSwapChainOutOfDate
std::function< void(QRhi *)> CleanupCallback
QRhiReadbackDescription()=default
void setTexture(QRhiTexture *tex)
QRhiTexture * texture() const
void setPixelSize(const QSize &sz)
virtual QRhiTexture::Format backingFormat() const =0
QRhiTexture::Format m_backingFormatHint
void setSampleCount(int s)
virtual QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() const =0
virtual bool isCompatible(const QRhiRenderPassDescriptor *other) const =0
virtual QVector< quint32 > serializedFormat() const =0
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
virtual int sampleCount() const =0
virtual QSize pixelSize() const =0
virtual float devicePixelRatio() const =0
QRhiRenderPassDescriptor * renderPassDescriptor() const
virtual Type resourceType() const =0
void setMipmapMode(Filter f)
void setAddressW(AddressMode mode)
AddressMode addressV() const
Filter mipmapMode() const
void setMinFilter(Filter f)
AddressMode addressW() const
void setTextureCompareOp(CompareOp op)
void setAddressU(AddressMode mode)
AddressMode addressU() const
void setAddressV(AddressMode mode)
CompareOp textureCompareOp() const
void setMagFilter(Filter f)
void setScissor(int x, int y, int w, int h)
std::array< int, 4 > scissor() const
const Data * data() const
static void serializeLayoutDescription(const QRhiShaderResourceBinding *first, const QRhiShaderResourceBinding *last, Output dst)
QVarLengthArray< QRhiShaderResourceBinding, BINDING_PREALLOC > m_bindings
void setBindings(std::initializer_list< QRhiShaderResourceBinding > list)
void setBindings(InputIterator first, InputIterator last)
const QRhiShaderResourceBinding * cendBindings() const
const QRhiShaderResourceBinding * cbeginBindings() const
QVector< quint32 > serializedLayoutDescription() const
QVector< quint32 > m_layoutDesc
void setShaderVariant(QShader::Variant v)
void setShader(const QShader &s)
QRhiShaderStage()=default
QShader::Variant shaderVariant() const
QSize currentPixelSize() const
void setDepthStencil(QRhiRenderBuffer *ds)
virtual bool createOrResize()=0
virtual QRhiRenderTarget * currentFrameRenderTarget()=0
virtual QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor()=0
virtual QSize surfacePixelSize()=0
void setSampleCount(int samples)
void setWindow(QWindow *window)
virtual QRhiCommandBuffer * currentFrameCommandBuffer()=0
QRhiRenderBuffer * depthStencil() const
QRhiRenderPassDescriptor * renderPassDescriptor() const
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
void setSourceLevel(int level)
QPoint destinationTopLeft() const
QPoint sourceTopLeft() const
void setPixelSize(const QSize &sz)
void setDestinationLevel(int level)
void setDestinationTopLeft(const QPoint &p)
int destinationLevel() const
void setDestinationLayer(int layer)
void setSourceTopLeft(const QPoint &p)
int destinationLayer() const
void setSourceLayer(int layer)
QRhiTextureCopyDescription()=default
void setFormat(Format fmt)
void setArraySize(int arraySize)
void setSampleCount(int s)
void setPixelSize(const QSize &sz)
QRhiRenderBuffer * depthStencilBuffer() const
void setDepthTexture(QRhiTexture *texture)
void setDepthStencilBuffer(QRhiRenderBuffer *renderBuffer)
QRhiTexture * depthTexture() const
void setColorAttachments(InputIterator first, InputIterator last)
void setColorAttachments(std::initializer_list< QRhiColorAttachment > list)
const QRhiColorAttachment * cendColorAttachments() const
const QRhiColorAttachment * colorAttachmentAt(int index) const
QRhiTextureRenderTargetDescription()=default
const QRhiColorAttachment * cbeginColorAttachments() const
void setDescription(const QRhiTextureRenderTargetDescription &desc)
QRhiTextureRenderTargetDescription m_desc
virtual QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor()=0
QRhiTextureRenderTargetDescription description() const
void setSourceTopLeft(const QPoint &p)
quint32 dataStride() const
QRhiTextureSubresourceUploadDescription()=default
void setDataStride(quint32 stride)
QPoint sourceTopLeft() const
void setDestinationTopLeft(const QPoint &p)
void setData(const QByteArray &data)
void setSourceSize(const QSize &size)
void setImage(const QImage &image)
QPoint destinationTopLeft() const
const QRhiTextureUploadEntry * cbeginEntries() const
QRhiTextureUploadDescription()=default
void setEntries(std::initializer_list< QRhiTextureUploadEntry > list)
const QRhiTextureUploadEntry * cendEntries() const
void setEntries(InputIterator first, InputIterator last)
void setDescription(const QRhiTextureSubresourceUploadDescription &desc)
QRhiTextureSubresourceUploadDescription description() const
QRhiTextureUploadEntry()=default
void setMinDepth(float minDepth)
void setMaxDepth(float maxDepth)
void setViewport(float x, float y, float w, float h)
std::array< float, 4 > viewport() const
The QSize class defines the size of a two-dimensional object using integer point precision.
The QWindow class represents a window in the underlying windowing system.
QRhiShaderResourceBindings * srb
QRhiGraphicsPipeline * ps
employee setName("Richard Schmit")
auto it unsigned count const
QRhiTextureRenderTarget * rt
set set set set set set set macro pixldst1 op
std::pair< T1, T2 > QPair
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction function
#define Q_DECLARE_FLAGS(Flags, Enum)
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
unsigned long long quint64
#define Q_DISABLE_COPY(Class)
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat z
GLint GLint GLint GLint GLint x
[0]
GLint GLenum GLsizei GLsizei GLsizei depth
GLenum GLuint GLint level
GLfloat GLfloat GLfloat w
[0]
GLint GLsizei GLsizei height
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLenum GLenum GLenum dstAlpha
GLenum GLenum GLsizei count
GLenum GLenum GLenum srcAlpha
const void GLsizei GLsizei stride
GLenum GLuint GLenum GLsizei const GLchar * buf
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
GLint GLint GLint GLint GLint GLint GLint GLbitfield mask
GLint GLsizei GLsizei GLenum format
GLfloat GLfloat GLfloat GLfloat h
GLsizeiptr const void GLenum usage
Q_GUI_EXPORT QDebug operator<<(QDebug, const QRhiDepthStencilClearValue &)
Q_GUI_EXPORT size_t qHash(const QRhiDepthStencilClearValue &v, size_t seed=0) noexcept
Q_GUI_EXPORT bool operator==(const QRhiDepthStencilClearValue &a, const QRhiDepthStencilClearValue &b) noexcept
Q_DECLARE_TYPEINFO(QRhiDepthStencilClearValue, Q_RELOCATABLE_TYPE)
SSL_CTX int(* cb)(SSL *ssl, unsigned char **out, unsigned char *outlen, const unsigned char *in, unsigned int inlen, void *arg)
view viewport() -> scroll(dx, dy, deviceRect)
myFilter draw(painter, QPoint(0, 0), originalPixmap)
Contains information about the underlying native resources of a buffer.
QRhiTexture::Format format
QRhiShaderResourceBinding::StageFlags stage
Output serialize(Output dst) const
QRhiShaderResourceBinding::Type type
Contains information about the underlying native resources of a texture.
QRhiShaderResourceBinding bindings[2]