summaryrefslogtreecommitdiffstats
path: root/src/Runtime/Source/render/backends/gl/Qt3DSRenderBackendGL4.h
blob: bfdc03b7361c32d0df18770978ca02dddf53f441 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/****************************************************************************
**
** Copyright (C) 2008-2012 NVIDIA Corporation.
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt 3D Studio.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#pragma once
#ifndef QT3DS_RENDER_BACKEND_GL4_H
#define QT3DS_RENDER_BACKEND_GL4_H

/// @file Qt3DSRenderBackendGL4.h
///       NVRender OpenGL 4 backend definition.

#include "foundation/Qt3DSAtomic.h"
#include "render/backends/gl/Qt3DSRenderBackendGL3.h"

namespace qt3ds {
namespace render {

    using namespace foundation;

    class NVRenderBackendGL4Impl : public NVRenderBackendGL3Impl
    {
    public:
        /// constructor
        NVRenderBackendGL4Impl(NVFoundationBase &fnd,
            qt3ds::foundation::IStringTable &stringTable,
            const QSurfaceFormat &format);
        /// destructor
        virtual ~NVRenderBackendGL4Impl();

        QT3DS_IMPLEMENT_REF_COUNT_ADDREF_RELEASE_OVERRIDE(m_Foundation)

    public:
        void DrawIndirect(NVRenderDrawMode::Enum drawMode, const void *indirect) override;
        void DrawIndexedIndirect(NVRenderDrawMode::Enum drawMode,
                                         NVRenderComponentTypes::Enum type, const void *indirect) override;

        void CreateTextureStorage2D(NVRenderBackendTextureObject to,
                                            NVRenderTextureTargetType::Enum target, QT3DSU32 levels,
                                            NVRenderTextureFormats::Enum internalFormat,
                                            size_t width, size_t height) override;

        void SetMultisampledTextureData2D(NVRenderBackendTextureObject to,
                                                  NVRenderTextureTargetType::Enum target,
                                                  size_t samples,
                                                  NVRenderTextureFormats::Enum internalFormat,
                                                  size_t width, size_t height,
                                                  bool fixedsamplelocations) override;

        void SetConstantValue(NVRenderBackendShaderProgramObject po, QT3DSU32 id,
                              NVRenderShaderDataTypes::Enum type, QT3DSI32 count, const void *value,
                              bool transpose) override;

        void SetPatchVertexCount(NVRenderBackendInputAssemblerObject iao, QT3DSU32 count) override;
        virtual NVRenderBackendTessControlShaderObject
        CreateTessControlShader(NVConstDataRef<QT3DSI8> source, eastl::string &errorMessage,
                                bool binary) override;
        virtual NVRenderBackendTessEvaluationShaderObject
        CreateTessEvaluationShader(NVConstDataRef<QT3DSI8> source, eastl::string &errorMessage,
                                   bool binary) override;
        virtual NVRenderBackendGeometryShaderObject
        CreateGeometryShader(NVConstDataRef<QT3DSI8> source, eastl::string &errorMessage, bool binary) override;

        QT3DSI32 GetStorageBufferCount(NVRenderBackendShaderProgramObject po) override;
        QT3DSI32 GetStorageBufferInfoByID(NVRenderBackendShaderProgramObject po, QT3DSU32 id,
                                               QT3DSU32 nameBufSize, QT3DSI32 *paramCount,
                                               QT3DSI32 *bufferSize, QT3DSI32 *length, char *nameBuf) override;
        void ProgramSetStorageBuffer(QT3DSU32 index, NVRenderBackendBufferObject bo) override;

        QT3DSI32 GetAtomicCounterBufferCount(NVRenderBackendShaderProgramObject po) override;
        QT3DSI32 GetAtomicCounterBufferInfoByID(NVRenderBackendShaderProgramObject po,
                                                     QT3DSU32 id, QT3DSU32 nameBufSize, QT3DSI32 *paramCount,
                                                     QT3DSI32 *bufferSize, QT3DSI32 *length,
                                                     char *nameBuf) override;
        void ProgramSetAtomicCounterBuffer(QT3DSU32 index, NVRenderBackendBufferObject bo) override;

        void SetMemoryBarrier(NVRenderBufferBarrierFlags barriers) override;
        void BindImageTexture(NVRenderBackendTextureObject to, QT3DSU32 unit, QT3DSI32 level,
                                      bool layered, QT3DSI32 layer,
                                      NVRenderImageAccessType::Enum access,
                                      NVRenderTextureFormats::Enum format) override;

        virtual NVRenderBackendComputeShaderObject
        CreateComputeShader(NVConstDataRef<QT3DSI8> source, eastl::string &errorMessage, bool binary) override;
        void DispatchCompute(NVRenderBackendShaderProgramObject po, QT3DSU32 numGroupsX,
                                     QT3DSU32 numGroupsY, QT3DSU32 numGroupsZ) override;

        NVRenderBackendProgramPipeline CreateProgramPipeline() override;
        void ReleaseProgramPipeline(NVRenderBackendProgramPipeline ppo) override;
        void SetActiveProgramPipeline(NVRenderBackendProgramPipeline ppo) override;
        void SetProgramStages(NVRenderBackendProgramPipeline ppo,
                                      NVRenderShaderTypeFlags flags,
                                      NVRenderBackendShaderProgramObject po) override;

        void SetBlendEquation(const NVRenderBlendEquationArgument &pBlendEquArg) override;
        void SetBlendBarrier(void) override;

        NVRenderBackendPathObject CreatePathNVObject(size_t range) override;
        void SetPathSpecification(NVRenderBackendPathObject inPathObject,
                                          NVConstDataRef<QT3DSU8> inPathCommands,
                                          NVConstDataRef<QT3DSF32> inPathCoords) override;
        NVBounds3 GetPathObjectBoundingBox(NVRenderBackendPathObject inPathObject) override;
        NVBounds3 GetPathObjectFillBox(NVRenderBackendPathObject inPathObject) override;
        NVBounds3 GetPathObjectStrokeBox(NVRenderBackendPathObject inPathObject) override;
        void SetStrokeWidth(NVRenderBackendPathObject inPathObject, QT3DSF32 inStrokeWidth) override;

        void SetPathProjectionMatrix(const QT3DSMat44 inPathProjection) override;
        void SetPathModelViewMatrix(const QT3DSMat44 inPathModelview) override;
        void SetPathStencilDepthOffset(QT3DSF32 inSlope, QT3DSF32 inBias) override;
        void SetPathCoverDepthFunc(NVRenderBoolOp::Enum inDepthFunction) override;
        void StencilStrokePath(NVRenderBackendPathObject inPathObject) override;
        void StencilFillPath(NVRenderBackendPathObject inPathObject) override;
        void ReleasePathNVObject(NVRenderBackendPathObject po, size_t range) override;

        void StencilFillPathInstanced(
            NVRenderBackendPathObject po, size_t numPaths, NVRenderPathFormatType::Enum type,
            const void *charCodes, NVRenderPathFillMode::Enum fillMode, QT3DSU32 stencilMask,
            NVRenderPathTransformType::Enum transformType, const QT3DSF32 *transformValues) override;
        void StencilStrokePathInstancedN(NVRenderBackendPathObject po, size_t numPaths,
                                                 NVRenderPathFormatType::Enum type,
                                                 const void *charCodes, QT3DSI32 stencilRef,
                                                 QT3DSU32 stencilMask,
                                                 NVRenderPathTransformType::Enum transformType,
                                                 const QT3DSF32 *transformValues) override;
        void CoverFillPathInstanced(NVRenderBackendPathObject po, size_t numPaths,
                                            NVRenderPathFormatType::Enum type,
                                            const void *charCodes,
                                            NVRenderPathCoverMode::Enum coverMode,
                                            NVRenderPathTransformType::Enum transformType,
                                            const QT3DSF32 *transformValues) override;
        void CoverStrokePathInstanced(NVRenderBackendPathObject po, size_t numPaths,
                                              NVRenderPathFormatType::Enum type,
                                              const void *charCodes,
                                              NVRenderPathCoverMode::Enum coverMode,
                                              NVRenderPathTransformType::Enum transformType,
                                              const QT3DSF32 *transformValues) override;
        void LoadPathGlyphs(NVRenderBackendPathObject po,
                                    NVRenderPathFontTarget::Enum fontTarget, const void *fontName,
                                    NVRenderPathFontStyleFlags fontStyle, size_t numGlyphs,
                                    NVRenderPathFormatType::Enum type, const void *charCodes,
                                    NVRenderPathMissingGlyphs::Enum handleMissingGlyphs,
                                    NVRenderBackendPathObject pathParameterTemplate, QT3DSF32 emScale) override;
        virtual NVRenderPathReturnValues::Enum
        LoadPathGlyphsIndexed(NVRenderBackendPathObject po, NVRenderPathFontTarget::Enum fontTarget,
                              const void *fontName, NVRenderPathFontStyleFlags fontStyle,
                              QT3DSU32 firstGlyphIndex, size_t numGlyphs,
                              NVRenderBackendPathObject pathParameterTemplate, QT3DSF32 emScale) override;
        virtual NVRenderBackendPathObject
        LoadPathGlyphsIndexedRange(NVRenderPathFontTarget::Enum fontTarget, const void *fontName,
                                   NVRenderPathFontStyleFlags fontStyle,
                                   NVRenderBackendPathObject pathParameterTemplate, QT3DSF32 emScale,
                                   QT3DSU32 *count) override;
        void LoadPathGlyphRange(NVRenderBackendPathObject po,
                                        NVRenderPathFontTarget::Enum fontTarget,
                                        const void *fontName, NVRenderPathFontStyleFlags fontStyle,
                                        QT3DSU32 firstGlyph, size_t numGlyphs,
                                        NVRenderPathMissingGlyphs::Enum handleMissingGlyphs,
                                        NVRenderBackendPathObject pathParameterTemplate,
                                        QT3DSF32 emScale) override;
        void GetPathMetrics(NVRenderBackendPathObject po, size_t numPaths,
                                    NVRenderPathGlyphFontMetricFlags metricQueryMask,
                                    NVRenderPathFormatType::Enum type, const void *charCodes,
                                    size_t stride, QT3DSF32 *metrics) override;
        void GetPathMetricsRange(NVRenderBackendPathObject po, size_t numPaths,
                                         NVRenderPathGlyphFontMetricFlags metricQueryMask,
                                         size_t stride, QT3DSF32 *metrics) override;
        void GetPathSpacing(NVRenderBackendPathObject po, size_t numPaths,
                                    NVRenderPathListMode::Enum pathListMode,
                                    NVRenderPathFormatType::Enum type, const void *charCodes,
                                    QT3DSF32 advanceScale, QT3DSF32 kerningScale,
                                    NVRenderPathTransformType::Enum transformType, QT3DSF32 *spacing) override;
    private:
#if !defined(QT_OPENGL_ES)
        QOpenGLExtension_NV_path_rendering *m_nvPathRendering;
        QOpenGLExtension_EXT_direct_state_access *m_directStateAccess;
#endif
    };
}
}

#endif