QMultiSampleAntiAliasing Class | Qt 3D 5.12.10

- Qt 5.12
- Qt 3D
- C++ Classes
- QMultiSampleAntiAliasing
- Qt 5.12.10 Reference Documentation

# QMultiSampleAntiAliasing Class

(Qt3DRender::QMultiSampleAntiAliasing)

Enable multisample antialiasing. More...

Header: | #include <QMultiSampleAntiAliasing>
qmake: | QT += 3drender
Since: | Qt 5.7
Instantiated By: | MultiSampleAntiAliasing
Inherits: | Qt3DRender::QRenderState

- List of all members, including inherited members
- Obsolete members

## Public Functions

| QMultiSampleAntiAliasing(Qt3DCore::QNode *parent = nullptr)

- 13 public functions inherited from Qt3DCore::QNode
- 31 public functions inherited from QObject

## Static Public Members

const QMetaObject | staticMetaObject

- 9 static public members inherited from QObject

### Additional Inherited Members

- 3 properties inherited from Qt3DCore::QNode
- 1 property inherited from QObject
- 3 public slots inherited from Qt3DCore::QNode
- 1 public slot inherited from QObject
- 4 signals inherited from Qt3DCore::QNode
- 2 signals inherited from QObject
- 2 protected functions inherited from Qt3DCore::QNode
- 9 protected functions inherited from QObject

## Detailed Description

Enable multisample antialiasing.

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().

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;
     }

Note: 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

### QMultiSampleAntiAliasing::QMultiSampleAntiAliasing(Qt3DCore::QNode *parent = nullptr)

The constructor creates a new QMultiSampleAntiAliasing::QMultiSampleAntiAliasing instance with the specified parent.