12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
35
36
37
38
39
40
41
42
43
46 : offscreenCommandBuffer(
this)
68 Q_UNUSED(sampleCount);
69 return { QSize(1, 1) };
74 return new QNullSwapChain(
this);
77QRhiBuffer *
QRhiNull::createBuffer(QRhiBuffer::Type type, QRhiBuffer::UsageFlags usage, quint32 size)
79 return new QNullBuffer(
this, type, usage, size);
123 case QRhi::TextureSizeMin:
125 case QRhi::TextureSizeMax:
127 case QRhi::MaxColorAttachments:
129 case QRhi::FramesInFlight:
131 case QRhi::MaxAsyncReadbackFrames:
133 case QRhi::MaxThreadGroupsPerDimension:
135 case QRhi::MaxThreadsPerThreadGroup:
137 case QRhi::MaxThreadGroupX:
139 case QRhi::MaxThreadGroupY:
141 case QRhi::MaxThreadGroupZ:
143 case QRhi::TextureArraySizeMax:
145 case QRhi::MaxUniformBufferRange:
147 case QRhi::MaxVertexInputs:
149 case QRhi::MaxVertexOutputs:
151 case QRhi::MaxVertexStorageBuffers:
152 case QRhi::MaxFragmentStorageBuffers:
154 case QRhi::ShadingRateImageTileSize:
158 Q_UNREACHABLE_RETURN(0);
163 return &nativeHandlesStruct;
169 info.deviceName = QByteArrayLiteral(
"Null");
184void QRhiNull::setQueueSubmitParams(QRhiNativeHandles *)
209QRhiRenderBuffer *
QRhiNull::createRenderBuffer(QRhiRenderBuffer::Type type,
const QSize &pixelSize,
210 int sampleCount, QRhiRenderBuffer::Flags flags,
211 QRhiTexture::Format backingFormatHint)
213 return new QNullRenderBuffer(
this, type, pixelSize, sampleCount, flags, backingFormatHint);
217 const QSize &pixelSize,
int depth,
int arraySize,
218 int sampleCount, QRhiTexture::Flags flags)
220 return new QNullTexture(
this, format, pixelSize, depth, arraySize, sampleCount, flags);
224 QRhiSampler::Filter mipmapMode,
225 QRhiSampler::AddressMode u, QRhiSampler::AddressMode v, QRhiSampler::AddressMode w)
227 return new QNullSampler(
this, magFilter, minFilter, mipmapMode, u, v, w);
231 QRhiTextureRenderTarget::Flags flags)
243 return new QNullGraphicsPipeline(
this);
248 return new QNullComputePipeline(
this);
253 return new QNullShaderResourceBindings(
this);
263 int dynamicOffsetCount,
264 const QRhiCommandBuffer::DynamicOffset *dynamicOffsets)
268 Q_UNUSED(dynamicOffsetCount);
269 Q_UNUSED(dynamicOffsets);
273 int startBinding,
int bindingCount,
const QRhiCommandBuffer::VertexInput *bindings,
274 QRhiBuffer *indexBuf, quint32 indexOffset, QRhiCommandBuffer::IndexFormat indexFormat)
277 Q_UNUSED(startBinding);
278 Q_UNUSED(bindingCount);
281 Q_UNUSED(indexOffset);
282 Q_UNUSED(indexFormat);
312 Q_UNUSED(coarsePixelSize);
316 quint32 instanceCount, quint32 firstVertex, quint32 firstInstance)
319 Q_UNUSED(vertexCount);
320 Q_UNUSED(instanceCount);
321 Q_UNUSED(firstVertex);
322 Q_UNUSED(firstInstance);
326 quint32 instanceCount, quint32 firstIndex, qint32 vertexOffset, quint32 firstInstance)
329 Q_UNUSED(indexCount);
330 Q_UNUSED(instanceCount);
331 Q_UNUSED(firstIndex);
332 Q_UNUSED(vertexOffset);
333 Q_UNUSED(firstInstance);
337 quint32 indirectBufferOffset, quint32 drawCount, quint32 stride)
340 Q_UNUSED(indirectBuffer);
341 Q_UNUSED(indirectBufferOffset);
347 quint32 indirectBufferOffset, quint32 drawCount, quint32 stride)
350 Q_UNUSED(indirectBuffer);
351 Q_UNUSED(indirectBufferOffset);
357 QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset,
358 QRhiBuffer *countBuffer, quint32 countBufferOffset,
359 quint32 maxDrawCount, quint32 stride)
362 Q_UNUSED(indirectBuffer);
363 Q_UNUSED(indirectBufferOffset);
364 Q_UNUSED(countBuffer);
365 Q_UNUSED(countBufferOffset);
366 Q_UNUSED(maxDrawCount);
371 QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset,
372 QRhiBuffer *countBuffer, quint32 countBufferOffset,
373 quint32 maxDrawCount, quint32 stride)
376 Q_UNUSED(indirectBuffer);
377 Q_UNUSED(indirectBufferOffset);
378 Q_UNUSED(countBuffer);
379 Q_UNUSED(countBufferOffset);
380 Q_UNUSED(maxDrawCount);
416 quint32 indirectBufferOffset)
419 Q_UNUSED(indirectBuffer);
420 Q_UNUSED(indirectBufferOffset);
449 return QRhi::FrameOpSuccess;
458 return QRhi::FrameOpSuccess;
464 *cb = &offscreenCommandBuffer;
465 return QRhi::FrameOpSuccess;
471 return QRhi::FrameOpSuccess;
476 return QRhi::FrameOpSuccess;
482 for (
int layer = 0, maxLayer = u.subresDesc.size(); layer < maxLayer; ++layer) {
483 for (
int level = 0; level < QRhi::MAX_MIP_LEVELS; ++level) {
484 for (
const QRhiTextureSubresourceUploadDescription &subresDesc : std::as_const(u.subresDesc[layer][level])) {
485 if (!subresDesc.image().isNull()) {
486 const QImage src = subresDesc.image();
487 QPainter painter(&texD->image[layer][level]);
488 const QSize srcSize = subresDesc.sourceSize().isEmpty()
489 ? src.size() : subresDesc.sourceSize();
490 painter.setCompositionMode(QPainter::CompositionMode_Source);
491 painter.drawImage(subresDesc.destinationTopLeft(), src,
492 QRect(subresDesc.sourceTopLeft(), srcSize));
493 }
else if (!subresDesc.data().isEmpty()) {
494 const QSize subresSize = q->sizeForMipLevel(level, texD->pixelSize());
495 int w = subresSize.width();
496 int h = subresSize.height();
497 if (!subresDesc.sourceSize().isEmpty()) {
498 w = subresDesc.sourceSize().width();
499 h = subresDesc.sourceSize().height();
502 const QByteArray srcData = subresDesc.data();
503 const QPoint dstOffset = subresDesc.destinationTopLeft();
504 QSize size = clampedSubResourceUploadSize(QSize(w, h), dstOffset, level,
506 size = clampedSubResourceUploadSizeForSourceData(size, subresDesc.dataStride(),
512 const char *src = srcData.constData();
513 const int srcBpl = w * 4;
514 int srcStride = srcBpl;
515 if (subresDesc.dataStride())
516 srcStride = subresDesc.dataStride();
517 uchar *dst = texD->image[layer][level].bits();
518 const int dstBpl = texD->image[layer][level].bytesPerLine();
519 for (
int y = 0; y < h; ++y) {
520 memcpy(dst + dstOffset.x() * 4 + (y + dstOffset.y()) * dstBpl,
534 const QImage &srcImage(srcD->image[u.desc.sourceLayer()][u.desc.sourceLevel()]);
535 QImage &dstImage(dstD->image[u.desc.destinationLayer()][u.desc.destinationLevel()]);
536 const QPoint dstPos = u.desc.destinationTopLeft();
537 const QSize size = u.desc.pixelSize().isEmpty() ? srcD->pixelSize() : u.desc.pixelSize();
538 const QPoint srcPos = u.desc.sourceTopLeft();
540 QPainter painter(&dstImage);
541 painter.setCompositionMode(QPainter::CompositionMode_Source);
542 painter.drawImage(QRect(dstPos, size), srcImage, QRect(srcPos, size));
548 const QSize baseSize = texD->pixelSize();
549 const int levelCount = q->mipLevelsForSize(baseSize);
550 for (
int level = 1; level < levelCount; ++level)
551 texD->image[0][level] = texD->image[0][0].scaled(q->sizeForMipLevel(level, baseSize));
566 QRhiReadbackResult *result = u.result;
567 result->data.resize(u.readSize);
569 memcpy(result->data.data(), bufD
->data + u.offset, size_t(u.readSize));
570 if (result->completed)
577 if (u.dst->format() == QRhiTexture::RGBA8)
580 if (u.src->format() == QRhiTexture::RGBA8 && u.dst->format() == QRhiTexture::RGBA8)
583 QRhiReadbackResult *result = u.result;
586 result->format = texD->format();
587 if (u.rb.rect().isValid())
588 result->pixelSize = u.rb.rect().size();
590 result->pixelSize = q->sizeForMipLevel(u.rb.level(), texD->pixelSize());
593 result->format = QRhiTexture::RGBA8;
594 if (u.rb.rect().isValid())
595 result->pixelSize = u.rb.rect().size();
597 result->pixelSize = currentSwapChain->currentPixelSize();
599 quint32 bytesPerLine = 0;
600 quint32 byteSize = 0;
601 textureFormatInfo(result->format, result->pixelSize, &bytesPerLine, &byteSize,
nullptr);
602 if (texD && texD->format() == QRhiTexture::RGBA8) {
603 result->data.resize(
int(byteSize));
604 const QImage &src(texD->image[u.rb.layer()][u.rb.level()]);
605 char *dst = result->data.data();
606 for (
int y = 0, h = src.height(); y < h; ++y) {
607 memcpy(dst, src.constScanLine(y), bytesPerLine);
611 result->data.fill(0,
int(byteSize));
613 if (result->completed)
616 if (u.dst->format() == QRhiTexture::RGBA8)
624 QRhiRenderTarget *rt,
625 const QColor &colorClearValue,
626 const QRhiDepthStencilClearValue &depthStencilClearValue,
627 QRhiResourceUpdateBatch *resourceUpdates,
628 QRhiCommandBuffer::BeginPassFlags flags)
630 Q_UNUSED(colorClearValue);
631 Q_UNUSED(depthStencilClearValue);
637 if (rt->resourceType() == QRhiRenderTarget::TextureRenderTarget) {
639 if (!QRhiRenderTargetAttachmentTracker::isUpToDate<QNullTexture, QNullRenderBuffer>(rtTex->description(), rtTex->d.currentResIdList))
644void QRhiNull::
endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates)
651 QRhiResourceUpdateBatch *resourceUpdates,
652 QRhiCommandBuffer::BeginPassFlags flags)
682 rhiD->unregisterResource(
this);
690 data =
new char[m_size];
691 memset(
data, 0, m_size);
694 rhiD->registerResource(
this);
701 Q_ASSERT(m_type == Dynamic);
706 int sampleCount, QRhiRenderBuffer::Flags flags,
707 QRhiTexture::Format backingFormatHint)
723 rhiD->unregisterResource(
this);
735 rhiD->registerResource(
this);
742 return m_type == Color ? QRhiTexture::RGBA8 : QRhiTexture::UnknownFormat;
746 int arraySize,
int sampleCount, Flags flags)
762 rhiD->unregisterResource(
this);
773 const bool isCube = m_flags.testFlag(CubeMap);
774 const bool is3D = m_flags.testFlag(ThreeDimensional);
775 const bool isArray = m_flags.testFlag(TextureArray);
776 const bool hasMipMaps = m_flags.testFlag(MipMapped);
777 const bool is1D = m_flags.testFlags(OneDimensional);
778 QSize size = is1D ? QSize(qMax(1, m_pixelSize.width()), 1)
779 : (m_pixelSize.isEmpty() ? QSize(1, 1) : m_pixelSize);
780 const int mipLevelCount = hasMipMaps ? rhiD->q->mipLevelsForSize(size) : 1;
781 const int layerCount = is3D ? qMax(1, m_depth)
783 : (isArray ? qMax(0, m_arraySize)
786 if (!rhiD->textureFormatInfo(m_format, size,
nullptr,
nullptr,
nullptr)) {
791 if (m_format == RGBA8) {
792 image.resize(layerCount);
793 for (
int layer = 0; layer < layerCount; ++layer) {
794 for (
int level = 0; level < mipLevelCount; ++level) {
795 image[layer][level] = QImage(rhiD->q->sizeForMipLevel(level, size),
796 QImage::Format_RGBA8888_Premultiplied);
797 image[layer][level].fill(Qt::yellow);
804 rhiD->registerResource(
this);
820 rhiD->registerResource(
this);
826 AddressMode u, AddressMode v, AddressMode w)
840 rhiD->unregisterResource(
this);
846 rhiD->registerResource(
this);
864 rhiD->unregisterResource(
this);
877 rhiD->registerResource(rpD,
false);
917 const QRhiTextureRenderTargetDescription &desc,
933 rhiD->unregisterResource(
this);
940 rhiD->registerResource(rpD,
false);
947 d.rp =
QRHI_RES(QNullRenderPassDescriptor, m_renderPassDesc);
948 if (m_desc.cbeginColorAttachments() != m_desc.cendColorAttachments()) {
949 const QRhiColorAttachment *colorAtt = m_desc.cbeginColorAttachments();
950 QRhiTexture *tex = colorAtt->texture();
951 QRhiRenderBuffer *rb = colorAtt->renderBuffer();
952 d.pixelSize = tex ? rhiD->q->sizeForMipLevel(colorAtt->level(), tex->pixelSize()) : rb->pixelSize();
953 }
else if (m_desc.depthStencilBuffer()) {
954 d.pixelSize = m_desc.depthStencilBuffer()->pixelSize();
955 }
else if (m_desc.depthTexture()) {
956 d.pixelSize = m_desc.depthTexture()->pixelSize();
958 QRhiRenderTargetAttachmentTracker::updateResIdList<QNullTexture, QNullRenderBuffer>(m_desc, &d.currentResIdList);
959 rhiD->registerResource(
this);
965 if (!QRhiRenderTargetAttachmentTracker::isUpToDate<QNullTexture, QNullRenderBuffer>(m_desc, d.currentResIdList))
995 rhiD->unregisterResource(
this);
1001 if (!rhiD->sanityCheckShaderResourceBindings(
this))
1004 rhiD->updateLayoutDesc(
this);
1006 rhiD->registerResource(
this,
false);
1029 rhiD->unregisterResource(
this);
1035 if (!rhiD->sanityCheckGraphicsPipeline(
this))
1038 rhiD->registerResource(
this);
1056 rhiD->unregisterResource(
this);
1062 rhiD->registerResource(
this);
1097 rhiD->unregisterResource(
this);
1112 return QSize(1280, 720);
1124 rhiD->registerResource(rpD,
false);
1130 const bool needsRegistration = !window || window != m_window;
1131 if (window && window != m_window)
1135 m_currentPixelSize = surfacePixelSize();
1136 rt.setRenderPassDescriptor(m_renderPassDesc);
1137 rt.d.rp =
QRHI_RES(QNullRenderPassDescriptor, m_renderPassDesc);
1138 rt.d.pixelSize = m_currentPixelSize;
1141 if (needsRegistration) {
1143 rhiD->registerResource(
this);
const char * constData() const
void setShaderResources(QRhiCommandBuffer *cb, QRhiShaderResourceBindings *srb, int dynamicOffsetCount, const QRhiCommandBuffer::DynamicOffset *dynamicOffsets) override
double lastCompletedGpuTime(QRhiCommandBuffer *cb) override
QRhi::FrameOpResult endOffscreenFrame(QRhi::EndFrameFlags flags) override
void dispatchIndirect(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset) override
bool isFeatureSupported(QRhi::Feature feature) const override
void debugMarkMsg(QRhiCommandBuffer *cb, const QByteArray &msg) override
void dispatch(QRhiCommandBuffer *cb, int x, int y, int z) override
QRhi::FrameOpResult beginFrame(QRhiSwapChain *swapChain, QRhi::BeginFrameFlags flags) override
void resourceUpdate(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
void drawIndexed(QRhiCommandBuffer *cb, quint32 indexCount, quint32 instanceCount, quint32 firstIndex, qint32 vertexOffset, quint32 firstInstance) override
void beginComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates, QRhiCommandBuffer::BeginPassFlags flags) override
void beginPass(QRhiCommandBuffer *cb, QRhiRenderTarget *rt, const QColor &colorClearValue, const QRhiDepthStencilClearValue &depthStencilClearValue, QRhiResourceUpdateBatch *resourceUpdates, QRhiCommandBuffer::BeginPassFlags flags) override
bool isClipDepthZeroToOne() const override
void endComputePass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
void endPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *resourceUpdates) override
QRhi::FrameOpResult endFrame(QRhiSwapChain *swapChain, QRhi::EndFrameFlags flags) override
QRhi::FrameOpResult beginOffscreenFrame(QRhiCommandBuffer **cb, QRhi::BeginFrameFlags flags) override
bool isYUpInNDC() const override
QRhiDriverInfo driverInfo() const override
void setScissor(QRhiCommandBuffer *cb, const QRhiScissor &scissor) override
void simulateTextureUpload(const QRhiResourceUpdateBatchPrivate::TextureOp &u)
QRhiComputePipeline * createComputePipeline() override
void setPipelineCacheData(const QByteArray &data) override
void setVertexInput(QRhiCommandBuffer *cb, int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings, QRhiBuffer *indexBuf, quint32 indexOffset, QRhiCommandBuffer::IndexFormat indexFormat) override
void debugMarkBegin(QRhiCommandBuffer *cb, const QByteArray &name) override
void draw(QRhiCommandBuffer *cb, quint32 vertexCount, quint32 instanceCount, quint32 firstVertex, quint32 firstInstance) override
QByteArray pipelineCacheData() override
void drawIndirectCount(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset, QRhiBuffer *countBuffer, quint32 countBufferOffset, quint32 maxDrawCount, quint32 stride) override
void drawIndexedIndirectCount(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset, QRhiBuffer *countBuffer, quint32 countBufferOffset, quint32 maxDrawCount, quint32 stride) override
const QRhiNativeHandles * nativeHandles() override
void setGraphicsPipeline(QRhiCommandBuffer *cb, QRhiGraphicsPipeline *ps) override
void releaseCachedResources() override
void simulateTextureCopy(const QRhiResourceUpdateBatchPrivate::TextureOp &u)
QRhiTexture * createTexture(QRhiTexture::Format format, const QSize &pixelSize, int depth, int arraySize, int sampleCount, QRhiTexture::Flags flags) override
QList< QSize > supportedShadingRates(int sampleCount) const override
void simulateTextureGenMips(const QRhiResourceUpdateBatchPrivate::TextureOp &u)
void setShadingRate(QRhiCommandBuffer *cb, const QSize &coarsePixelSize) override
bool makeThreadLocalNativeContextCurrent() override
void drawIndirect(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset, quint32 drawCount, quint32 stride) override
const QRhiNativeHandles * nativeHandles(QRhiCommandBuffer *cb) override
bool isYUpInFramebuffer() const override
QRhi::FrameOpResult finish() override
void setComputePipeline(QRhiCommandBuffer *cb, QRhiComputePipeline *ps) override
QRhiStats statistics() override
QRhiShadingRateMap * createShadingRateMap() override
void beginExternal(QRhiCommandBuffer *cb) override
QRhiSwapChain * createSwapChain() override
void setViewport(QRhiCommandBuffer *cb, const QRhiViewport &viewport) override
QRhiTextureRenderTarget * createTextureRenderTarget(const QRhiTextureRenderTargetDescription &desc, QRhiTextureRenderTarget::Flags flags) override
QRhiGraphicsPipeline * createGraphicsPipeline() override
bool create(QRhi::Flags flags) override
void setStencilRef(QRhiCommandBuffer *cb, quint32 refValue) override
void debugMarkEnd(QRhiCommandBuffer *cb) override
QList< int > supportedSampleCounts() const override
QMatrix4x4 clipSpaceCorrMatrix() const override
QRhiSampler * createSampler(QRhiSampler::Filter magFilter, QRhiSampler::Filter minFilter, QRhiSampler::Filter mipmapMode, QRhiSampler::AddressMode u, QRhiSampler::AddressMode v, QRhiSampler::AddressMode w) override
void drawIndexedIndirect(QRhiCommandBuffer *cb, QRhiBuffer *indirectBuffer, quint32 indirectBufferOffset, quint32 drawCount, quint32 stride) override
QRhiSwapChain * currentSwapChain
int ubufAlignment() const override
bool isTextureFormatSupported(QRhiTexture::Format format, QRhiTexture::Flags flags) const override
int resourceLimit(QRhi::ResourceLimit limit) const override
QRhiShaderResourceBindings * createShaderResourceBindings() override
void setBlendConstants(QRhiCommandBuffer *cb, const QColor &c) override
void endExternal(QRhiCommandBuffer *cb) override
bool isDeviceLost() const override
static QRhiResourceUpdateBatchPrivate * get(QRhiResourceUpdateBatch *b)
Combined button and popup list for selecting options.
QNullBuffer(QRhiImplementation *rhi, Type type, UsageFlags usage, quint32 size)
bool create() override
Creates the corresponding native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
char * beginFullDynamicBufferUpdateForCurrentFrame() override
QNullCommandBuffer(QRhiImplementation *rhi)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QNullComputePipeline(QRhiImplementation *rhi)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool create() override
Creates the corresponding native graphics resources.
QNullGraphicsPipeline(QRhiImplementation *rhi)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool create() override
Creates the corresponding native graphics resources.
QNullRenderBuffer(QRhiImplementation *rhi, Type type, const QSize &pixelSize, int sampleCount, QRhiRenderBuffer::Flags flags, QRhiTexture::Format backingFormatHint)
QRhiTexture::Format backingFormat() const override
QNullRenderPassDescriptor(QRhiImplementation *rhi)
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() const override
~QNullRenderPassDescriptor()
QVector< quint32 > serializedFormat() const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool isCompatible(const QRhiRenderPassDescriptor *other) const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QNullSampler(QRhiImplementation *rhi, Filter magFilter, Filter minFilter, Filter mipmapMode, AddressMode u, AddressMode v, AddressMode w)
QNullShaderResourceBindings(QRhiImplementation *rhi)
bool create() override
Creates the corresponding resource binding set.
void updateResources(UpdateFlags flags) override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
~QNullShaderResourceBindings()
QSize pixelSize() const override
float devicePixelRatio() const override
~QNullSwapChainRenderTarget()
QNullSwapChainRenderTarget(QRhiImplementation *rhi, QRhiSwapChain *swapchain)
int sampleCount() const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
bool createOrResize() override
Creates the swapchain if not already done and resizes the swapchain buffers to match the current size...
QSize surfacePixelSize() override
bool isFormatSupported(Format f) override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QRhiCommandBuffer * currentFrameCommandBuffer() override
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() override
QRhiRenderTarget * currentFrameRenderTarget() override
QNullSwapChain(QRhiImplementation *rhi)
~QNullTextureRenderTarget()
QSize pixelSize() const override
int sampleCount() const override
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor() override
bool create() override
Creates the corresponding native graphics resources.
QNullTextureRenderTarget(QRhiImplementation *rhi, const QRhiTextureRenderTargetDescription &desc, Flags flags)
float devicePixelRatio() const override
bool create() override
Creates the corresponding native graphics resources.
bool createFrom(NativeTexture src) override
Similar to create(), except that no new native textures are created.
QNullTexture(QRhiImplementation *rhi, Format format, const QSize &pixelSize, int depth, int arraySize, int sampleCount, Flags flags)
void destroy() override
Releases (or requests deferred releasing of) the underlying native graphics resources.
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h