QMultiSampleAntiAliasing Class▲
-
Header: QMultiSampleAntiAliasing
-
Since: Qt 5.7
-
CMake:
find_package(Qt6 REQUIRED COMPONENTS 3drender)
target_link_libraries(mytarget PRIVATE Qt6::3drender)
-
qmake: QT += 3drender
-
Inherited By:
-
Instantiated By: qml-qt3d-render-multisampleantialiasing.xml
-
Inherits: Qt3DRender::QRenderState
-
Group: QMultiSampleAntiAliasing is part of renderstates
Detailed Description▲
A Qt3DRender::QMultiSampleAntiAliasing class enables multisample antialiasing.
It can be added to a QRenderPass by calling QRenderPass::addRenderState():
QRenderPass *
renderPass =
new
QRenderPass();
QMultiSampleAntiAliasing *
msaa =
new
QMultiSampleAntiAliasing();
renderPass-&
gt;addRenderState(msaa);
Or a QRenderStateSet by calling QRenderStateSet::addRenderState():
QRenderStateSet *
renderStateSet =
new
QRenderStateSet();
QMultiSampleAntiAliasing *
msaa =
new
QMultiSampleAntiAliasing();
renderStateSet-&
gt;addRenderState(msaa);
For multisampling to take effect, the render target must have been allocated with multisampling enabled:
QTexture2DMultisample *
colorTex =
new
QTexture2DMultisample;
colorTex-&
gt;setFormat(QAbstractTexture::
RGBA8_UNorm);
colorTex-&
gt;setWidth(1024
);
colorTex-&
gt;setHeight(1024
);
QRenderTargetOutput *
color =
new
QRenderTargetOutput;
color-&
gt;setAttachmentPoint(QRenderTargetOutput::
Color0);
color-&
gt;setTexture(colorTex);
QTexture2DMultisample *
depthStencilTex =
new
QTexture2DMultisample;
depthStencilTex-&
gt;setFormat(QAbstractTexture::
RGBA8_UNorm);
depthStencilTex-&
gt;setWidth(1024
);
depthStencilTex-&
gt;setHeight(1024
);
QRenderTargetOutput *
depthStencil =
new
QRenderTargetOutput;
depthStencil-&
gt;setAttachmentPoint(QRenderTargetOutput::
DepthStencil);
depthStencil-&
gt;setTexture(depthStencilTex);
Qt3DRender::
QRenderTarget *
renderTarget =
new
Qt3DRender::
QRenderTarget;
renderTarget-&
gt;addOutput(color);
renderTarget-&
gt;addOutput(depthStencil);
Further, the shader code must use multisampling sampler types and texelFetch() instead of texture().
For example, if you have code like
#version 150
uniform sampler2D colorTexture;
in vec2 texCoord;
out vec4 fragColor;
void
main()
{
fragColor =
texture(colorTexture, texCoord);
}
you can rewrite it as
#version 150
uniform sampler2DMS colorTexture;
in vec2 texCoord;
out vec4 fragColor;
void
main()
{
ivec2 tc =
ivec2(floor(textureSize(colorTexture) *
texCoord));
vec4 c =
texelFetch(colorTexture, tc, 0
) +
texelFetch(colorTexture, tc, 1
) +
texelFetch(colorTexture, tc, 2
) +
texelFetch(colorTexture, tc, 3
);
fragColor =
c /
4.0
;
}
When using OpenGL as the graphics API, glEnable(GL_MULTISAMPLE) will be called if QMultiSampleAntiAliasing has been added to the render states.
Member Function Documentation▲
[explicit] QMultiSampleAntiAliasing::QMultiSampleAntiAliasing(Qt3DCore::QNode *parent = nullptr)▲
The constructor creates a new QMultiSampleAntiAliasing::QMultiSampleAntiAliasing instance with the specified parent.