75 const QString &renderNodeObjName)
89 const QByteArray rtName = renderNodeObjName.toLatin1();
100 pEntry->destroyRhiResources();
104 pEntry->destroyRhiResources();
106 }
else if (pEntry->m_rhiDepthMap) {
108 if (pEntry->m_rhiDepthMap->pixelSize() != pixelSize) {
109 pEntry->destroyRhiResources();
112 }
else if (pEntry->m_rhiDepthCube) {
114 if (pEntry->m_rhiDepthCube->pixelSize() != pixelSize) {
115 pEntry->destroyRhiResources();
119 pEntry->m_shadowMapMode =
mode;
126 pEntry = &m_shadowMapList.back();
134 pEntry = &m_shadowMapList.back();
140 if (pEntry->m_rhiRenderTargets.isEmpty()) {
141 pEntry->m_rhiRenderTargets.resize(1);
142 pEntry->m_rhiRenderTargets[0] =
nullptr;
144 Q_ASSERT(pEntry->m_rhiRenderTargets.size() == 1);
150 rtDesc.setDepthStencilBuffer(pEntry->m_rhiDepthStencil);
155 if (!pEntry->m_rhiRenderPassDesc)
159 qWarning(
"Failed to build shadow map render target");
163 if (!pEntry->m_rhiBlurRenderTarget0) {
166 if (!pEntry->m_rhiBlurRenderPassDesc)
168 pEntry->m_rhiBlurRenderTarget0->setRenderPassDescriptor(pEntry->m_rhiBlurRenderPassDesc);
169 pEntry->m_rhiBlurRenderTarget0->create();
171 pEntry->m_rhiBlurRenderTarget0->setName(rtName +
QByteArrayLiteral(
" shadow blur X"));
172 if (!pEntry->m_rhiBlurRenderTarget1) {
176 pEntry->m_rhiBlurRenderTarget1->create();
178 pEntry->m_rhiBlurRenderTarget1->setName(rtName +
QByteArrayLiteral(
" shadow blur Y"));
180 if (pEntry->m_rhiRenderTargets.isEmpty()) {
181 pEntry->m_rhiRenderTargets.resize(6);
182 for (
int i = 0;
i < 6; ++
i)
183 pEntry->m_rhiRenderTargets[
i] =
nullptr;
185 Q_ASSERT(pEntry->m_rhiRenderTargets.size() == 6);
194 rtDesc.setDepthStencilBuffer(pEntry->m_rhiDepthStencil);
197 if (!pEntry->m_rhiRenderPassDesc)
201 qWarning(
"Failed to build shadow map render target");
208 if (!pEntry->m_rhiBlurRenderTarget0) {
218 if (!pEntry->m_rhiBlurRenderPassDesc)
220 pEntry->m_rhiBlurRenderTarget0->setRenderPassDescriptor(pEntry->m_rhiBlurRenderPassDesc);
221 pEntry->m_rhiBlurRenderTarget0->create();
223 pEntry->m_rhiBlurRenderTarget0->setName(rtName +
QByteArrayLiteral(
" shadow cube blur X"));
224 if (!pEntry->m_rhiBlurRenderTarget1) {
235 pEntry->m_rhiBlurRenderTarget1->create();
237 pEntry->m_rhiBlurRenderTarget1->setName(rtName +
QByteArrayLiteral(
" shadow cube blur Y"));
239 static bool warned =
false;
242 qWarning(
"Cubemap-based shadow maps will not be blurred because MaxColorAttachments is less than 6");
247 pEntry->m_lightIndex = lightIdx;
void setColorAttachments(std::initializer_list< QRhiColorAttachment > list)
Sets the list of color attachments.
void setDescription(const QRhiTextureRenderTargetDescription &desc)
Sets the render target description desc.
virtual QRhiRenderPassDescriptor * newCompatibleRenderPassDescriptor()=0
virtual bool create()=0
Creates the corresponding native graphics resources.
Format
Specifies the texture format.
const std::unique_ptr< QSSGRhiContext > & rhiContext() const
QRhiTextureRenderTarget * m_rhiBlurRenderTarget0
QRhiRenderPassDescriptor * m_rhiRenderPassDesc
QVarLengthArray< QRhiTextureRenderTarget *, 6 > m_rhiRenderTargets
static QSSGShadowMapEntry withRhiDepthCubeMap(quint32 lightIdx, ShadowMapModes mode, QRhiTexture *depthCube, QRhiTexture *cubeCopy, QRhiRenderBuffer *depthStencil)
QRhiRenderPassDescriptor * m_rhiBlurRenderPassDesc
ShadowMapModes m_shadowMapMode
shadow map method
QRhiTextureRenderTarget * m_rhiBlurRenderTarget1
static QSSGShadowMapEntry withRhiDepthMap(quint32 lightIdx, ShadowMapModes mode, QRhiTexture *depthMap, QRhiTexture *depthCopy, QRhiRenderBuffer *depthStencil)
quint32 m_lightIndex
the light index it belongs to