QMultiSampleAntiAliasing Class▲
-
Header: QMultiSampleAntiAliasing
-
Since: Qt 5.7
-
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->addRenderState(msaa);Or a QRenderStateSet by calling QRenderStateSet::addRenderState():
QRenderStateSet *renderStateSet = new QRenderStateSet();
QMultiSampleAntiAliasing *msaa = new QMultiSampleAntiAliasing();
renderStateSet->addRenderState(msaa);For multisampling to take effect, the render target must have been allocated with multisampling enabled:
QTexture2DMultisample *colorTex = new QTexture2DMultisample;
colorTex->setFormat(QAbstractTexture::RGBA8_UNorm);
colorTex->setWidth(1024);
colorTex->setHeight(1024);
QRenderTargetOutput *color = new QRenderTargetOutput;
color->setAttachmentPoint(QRenderTargetOutput::Color0);
color->setTexture(colorTex);
QTexture2DMultisample *depthStencilTex = new QTexture2DMultisample;
depthStencilTex->setFormat(QAbstractTexture::RGBA8_UNorm);
depthStencilTex->setWidth(1024);
depthStencilTex->setHeight(1024);
QRenderTargetOutput *depthStencil = new QRenderTargetOutput;
depthStencil->setAttachmentPoint(QRenderTargetOutput::DepthStencil);
depthStencil->setTexture(depthStencilTex);
Qt3DRender::QRenderTarget *renderTarget = new Qt3DRender::QRenderTarget;
renderTarget->addOutput(color);
renderTarget->addOutput(depthStencil);Further, the shader code must use multisampling sampler types and texelFetch() instead of texture().
<Unknown command>oldcode
#version 150
uniform sampler2D colorTexture; in vec2 texCoord; out vec4 fragColor;
void main() { fragColor = texture(colorTexture, texCoord); }
<Unknown command>newcode
#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.


