summaryrefslogtreecommitdiffstats
path: root/src/render/backends/gl/Qt3DSRenderBackendGLBase.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/backends/gl/Qt3DSRenderBackendGLBase.h')
-rw-r--r--src/render/backends/gl/Qt3DSRenderBackendGLBase.h531
1 files changed, 531 insertions, 0 deletions
diff --git a/src/render/backends/gl/Qt3DSRenderBackendGLBase.h b/src/render/backends/gl/Qt3DSRenderBackendGLBase.h
new file mode 100644
index 0000000..28e4dbb
--- /dev/null
+++ b/src/render/backends/gl/Qt3DSRenderBackendGLBase.h
@@ -0,0 +1,531 @@
+/****************************************************************************
+**
+** 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_GL_BASE_H
+#define QT3DS_RENDER_BACKEND_GL_BASE_H
+
+/// @file Qt3DSRenderBackendGLBase.h
+/// NVRender OpenGL Core backend definition.
+
+#include "foundation/Qt3DSContainers.h"
+#include "foundation/StringTable.h"
+#include "render/backends/Qt3DSRenderBackend.h"
+#include "render/backends/gl/Qt3DSOpenGLUtil.h"
+#include <EASTL/string.h>
+
+#include <QtGui/QSurfaceFormat>
+#include <QtGui/QOpenGLFunctions>
+#include <QtOpenGLExtensions/QtOpenGLExtensions>
+
+#define NVRENDER_BACKEND_UNUSED(arg) (void)arg;
+
+// Enable this to log opengl errors instead of an assert
+//#define RENDER_BACKEND_LOG_GL_ERRORS
+
+namespace qt3ds {
+namespace render {
+
+ ///< forward declaration
+ class NVRenderBackendRasterizerStateGL;
+ class NVRenderBackendDepthStencilStateGL;
+
+ using namespace foundation;
+
+ typedef eastl::basic_string<char8_t, ForwardingAllocator> TContextStr;
+
+ class NVRenderBackendGLBase : public NVRenderBackend
+ {
+ public:
+ /// constructor
+ NVRenderBackendGLBase(NVFoundationBase &fnd,
+ qt3ds::foundation::IStringTable &stringTable,
+ const QSurfaceFormat &format);
+ /// destructor
+ virtual ~NVRenderBackendGLBase();
+
+ public:
+ /// API Interface
+ NVRenderContextType GetRenderContextType() const override;
+ bool isESCompatible() const;
+
+ const char *GetShadingLanguageVersion() override;
+ /// get implementation depended values
+ QT3DSU32 GetMaxCombinedTextureUnits() override;
+ bool GetRenderBackendCap(NVRenderBackendCaps::Enum inCap) const override;
+ QT3DSU32 GetDepthBits() const override;
+ QT3DSU32 GetStencilBits() const override;
+ void GetRenderBackendValue(NVRenderBackendQuery::Enum inQuery, QT3DSI32 *params) const override;
+
+ /// state get/set functions
+ void SetRenderState(bool bEnable, const NVRenderState::Enum value) override;
+ bool GetRenderState(const NVRenderState::Enum value) override;
+ virtual NVRenderBackendDepthStencilStateObject
+ CreateDepthStencilState(bool enableDepth, bool depthMask, NVRenderBoolOp::Enum depthFunc,
+ bool enableStencil,
+ NVRenderStencilFunctionArgument &stencilFuncFront,
+ NVRenderStencilFunctionArgument &stencilFuncBack,
+ NVRenderStencilOperationArgument &depthStencilOpFront,
+ NVRenderStencilOperationArgument &depthStencilOpBack) override;
+ virtual void
+ ReleaseDepthStencilState(NVRenderBackendDepthStencilStateObject inDepthStencilState) override;
+ virtual NVRenderBackendRasterizerStateObject
+ CreateRasterizerState(QT3DSF32 depthBias, QT3DSF32 depthScale, NVRenderFaces::Enum cullFace) override;
+ void ReleaseRasterizerState(NVRenderBackendRasterizerStateObject rasterizerState) override;
+ virtual void
+ SetDepthStencilState(NVRenderBackendDepthStencilStateObject inDepthStencilState) override;
+ void SetRasterizerState(NVRenderBackendRasterizerStateObject rasterizerState) override;
+ NVRenderBoolOp::Enum GetDepthFunc() override;
+ void SetDepthFunc(const NVRenderBoolOp::Enum func) override;
+ bool GetDepthWrite() override;
+ void SetDepthWrite(bool bEnable) override;
+ void SetColorWrites(bool bRed, bool bGreen, bool bBlue, bool bAlpha) override;
+ void SetMultisample(bool bEnable) override;
+ void GetBlendFunc(NVRenderBlendFunctionArgument *pBlendFuncArg) override;
+ void SetBlendFunc(const NVRenderBlendFunctionArgument &blendFuncArg) override;
+ void SetBlendEquation(const NVRenderBlendEquationArgument &pBlendEquArg) override;
+ void SetBlendBarrier(void) override;
+ void GetScissorRect(NVRenderRect *pRect) override;
+ void SetScissorRect(const NVRenderRect &rect) override;
+ void GetViewportRect(NVRenderRect *pRect) override;
+ void SetViewportRect(const NVRenderRect &rect) override;
+
+ void SetClearColor(const QT3DSVec4 *pClearColor) override;
+ void Clear(NVRenderClearFlags flags) override;
+
+ /// resource handling
+ NVRenderBackendBufferObject CreateBuffer(size_t size,
+ NVRenderBufferBindFlags bindFlags,
+ NVRenderBufferUsageType::Enum usage,
+ const void *hostPtr = NULL) override;
+ void BindBuffer(NVRenderBackendBufferObject bo, NVRenderBufferBindFlags bindFlags) override;
+ void ReleaseBuffer(NVRenderBackendBufferObject bo) override;
+ void UpdateBuffer(NVRenderBackendBufferObject bo, NVRenderBufferBindFlags bindFlags,
+ size_t size, NVRenderBufferUsageType::Enum usage,
+ const void *data) override;
+ void UpdateBufferRange(NVRenderBackendBufferObject bo,
+ NVRenderBufferBindFlags bindFlags, size_t offset,
+ size_t size, const void *data) override;
+ void *MapBuffer(NVRenderBackendBufferObject bo, NVRenderBufferBindFlags bindFlags,
+ size_t offset, size_t length,
+ NVRenderBufferAccessFlags accessFlags) override;
+ bool UnmapBuffer(NVRenderBackendBufferObject bo, NVRenderBufferBindFlags bindFlags) override;
+ void SetMemoryBarrier(NVRenderBufferBarrierFlags barriers) override;
+
+ NVRenderBackendQueryObject CreateQuery() override;
+ void ReleaseQuery(NVRenderBackendQueryObject qo) override;
+ void BeginQuery(NVRenderBackendQueryObject qo, NVRenderQueryType::Enum type) override;
+ void EndQuery(NVRenderBackendQueryObject qo, NVRenderQueryType::Enum type) override;
+ void GetQueryResult(NVRenderBackendQueryObject qo,
+ NVRenderQueryResultType::Enum resultType, QT3DSU32 *params) override;
+ void GetQueryResult(NVRenderBackendQueryObject qo,
+ NVRenderQueryResultType::Enum resultType, QT3DSU64 *params) override;
+ void SetQueryTimer(NVRenderBackendQueryObject qo) override;
+
+ NVRenderBackendSyncObject CreateSync(NVRenderSyncType::Enum tpye,
+ NVRenderSyncFlags syncFlags) override;
+ void ReleaseSync(NVRenderBackendSyncObject so) override;
+ void WaitSync(NVRenderBackendSyncObject so, NVRenderCommandFlushFlags syncFlags,
+ QT3DSU64 timeout) override;
+
+ NVRenderBackendRenderTargetObject CreateRenderTarget() override;
+ void ReleaseRenderTarget(NVRenderBackendRenderTargetObject rto) override;
+ void RenderTargetAttach(NVRenderBackendRenderTargetObject rto,
+ NVRenderFrameBufferAttachments::Enum attachment,
+ NVRenderBackendRenderbufferObject rbo) override;
+ void RenderTargetAttach(
+ NVRenderBackendRenderTargetObject rto, NVRenderFrameBufferAttachments::Enum attachment,
+ NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target = NVRenderTextureTargetType::Texture2D) override;
+ void RenderTargetAttach(NVRenderBackendRenderTargetObject rto,
+ NVRenderFrameBufferAttachments::Enum attachment,
+ NVRenderBackendTextureObject to, QT3DSI32 level, QT3DSI32 layer) override;
+ void SetRenderTarget(NVRenderBackendRenderTargetObject rto) override;
+ bool RenderTargetIsValid(NVRenderBackendRenderTargetObject rto) override;
+
+ virtual NVRenderBackendRenderbufferObject
+ CreateRenderbuffer(NVRenderRenderBufferFormats::Enum storageFormat, size_t width,
+ size_t height) override;
+ void ReleaseRenderbuffer(NVRenderBackendRenderbufferObject rbo) override;
+ bool ResizeRenderbuffer(NVRenderBackendRenderbufferObject rbo,
+ NVRenderRenderBufferFormats::Enum storageFormat,
+ size_t width, size_t height) override;
+
+ NVRenderBackendTextureObject CreateTexture() override;
+ void BindTexture(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target, QT3DSU32 unit) override;
+ void BindImageTexture(NVRenderBackendTextureObject to, QT3DSU32 unit, QT3DSI32 level,
+ bool layered, QT3DSI32 layer,
+ NVRenderImageAccessType::Enum access,
+ NVRenderTextureFormats::Enum format) override;
+ void ReleaseTexture(NVRenderBackendTextureObject to) override;
+ void SetTextureData2D(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target, QT3DSU32 level,
+ NVRenderTextureFormats::Enum internalFormat, size_t width,
+ size_t height, QT3DSI32 border,
+ NVRenderTextureFormats::Enum format,
+ const void *hostPtr = NULL) override;
+ void SetTextureDataCubeFace(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target, QT3DSU32 level,
+ NVRenderTextureFormats::Enum internalFormat,
+ size_t width, size_t height, QT3DSI32 border,
+ NVRenderTextureFormats::Enum format,
+ const void *hostPtr = NULL) override;
+ void CreateTextureStorage2D(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target, QT3DSU32 levels,
+ NVRenderTextureFormats::Enum internalFormat,
+ size_t width, size_t height) override;
+ void SetTextureSubData2D(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target, QT3DSU32 level,
+ QT3DSI32 xOffset, QT3DSI32 yOffset, size_t width, size_t height,
+ NVRenderTextureFormats::Enum format,
+ const void *hostPtr = NULL) override;
+ void SetCompressedTextureData2D(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target, QT3DSU32 level,
+ NVRenderTextureFormats::Enum internalFormat,
+ size_t width, size_t height, QT3DSI32 border,
+ size_t imageSize, const void *hostPtr = NULL) override;
+ void SetCompressedTextureDataCubeFace(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target,
+ QT3DSU32 level,
+ NVRenderTextureFormats::Enum internalFormat,
+ size_t width, size_t height, QT3DSI32 border,
+ size_t imageSize, const void *hostPtr = NULL) override;
+ void SetCompressedTextureSubData2D(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target,
+ QT3DSU32 level, QT3DSI32 xOffset, QT3DSI32 yOffset,
+ size_t width, size_t height,
+ NVRenderTextureFormats::Enum format,
+ size_t imageSize, const void *hostPtr = NULL) override;
+ void SetMultisampledTextureData2D(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target,
+ size_t samples,
+ NVRenderTextureFormats::Enum internalFormat,
+ size_t width, size_t height,
+ bool fixedsamplelocations) override = 0;
+
+ void SetTextureData3D(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target, QT3DSU32 level,
+ NVRenderTextureFormats::Enum internalFormat, size_t width,
+ size_t height, size_t depth, QT3DSI32 border,
+ NVRenderTextureFormats::Enum format,
+ const void *hostPtr = NULL) override;
+
+ void GenerateMipMaps(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target,
+ NVRenderHint::Enum genType) override;
+
+ virtual NVRenderTextureSwizzleMode::Enum
+ GetTextureSwizzleMode(const NVRenderTextureFormats::Enum inFormat) const override;
+
+ NVRenderBackendSamplerObject CreateSampler(
+ NVRenderTextureMinifyingOp::Enum minFilter = NVRenderTextureMinifyingOp::Linear,
+ NVRenderTextureMagnifyingOp::Enum magFilter = NVRenderTextureMagnifyingOp::Linear,
+ NVRenderTextureCoordOp::Enum wrapS = NVRenderTextureCoordOp::ClampToEdge,
+ NVRenderTextureCoordOp::Enum wrapT = NVRenderTextureCoordOp::ClampToEdge,
+ NVRenderTextureCoordOp::Enum wrapR = NVRenderTextureCoordOp::ClampToEdge,
+ QT3DSI32 minLod = -1000, QT3DSI32 maxLod = 1000, QT3DSF32 lodBias = 0.0,
+ NVRenderTextureCompareMode::Enum compareMode = NVRenderTextureCompareMode::NoCompare,
+ NVRenderTextureCompareOp::Enum compareFunc = NVRenderTextureCompareOp::LessThanOrEqual,
+ QT3DSF32 anisotropy = 1.0, QT3DSF32 *borderColor = NULL) override;
+
+ void UpdateSampler(
+ NVRenderBackendSamplerObject so, NVRenderTextureTargetType::Enum target,
+ NVRenderTextureMinifyingOp::Enum minFilter = NVRenderTextureMinifyingOp::Linear,
+ NVRenderTextureMagnifyingOp::Enum magFilter = NVRenderTextureMagnifyingOp::Linear,
+ NVRenderTextureCoordOp::Enum wrapS = NVRenderTextureCoordOp::ClampToEdge,
+ NVRenderTextureCoordOp::Enum wrapT = NVRenderTextureCoordOp::ClampToEdge,
+ NVRenderTextureCoordOp::Enum wrapR = NVRenderTextureCoordOp::ClampToEdge,
+ QT3DSF32 minLod = -1000.0, QT3DSF32 maxLod = 1000.0, QT3DSF32 lodBias = 0.0,
+ NVRenderTextureCompareMode::Enum compareMode = NVRenderTextureCompareMode::NoCompare,
+ NVRenderTextureCompareOp::Enum compareFunc = NVRenderTextureCompareOp::LessThanOrEqual,
+ QT3DSF32 anisotropy = 1.0, QT3DSF32 *borderColor = NULL) override;
+
+ void UpdateTextureObject(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target, QT3DSI32 baseLevel,
+ QT3DSI32 maxLevel) override;
+
+ void UpdateTextureSwizzle(NVRenderBackendTextureObject to,
+ NVRenderTextureTargetType::Enum target,
+ NVRenderTextureSwizzleMode::Enum swizzleMode) override;
+
+ void ReleaseSampler(NVRenderBackendSamplerObject so) override;
+
+ virtual NVRenderBackendAttribLayoutObject
+ CreateAttribLayout(NVConstDataRef<NVRenderVertexBufferEntry> attribs) override;
+ void ReleaseAttribLayout(NVRenderBackendAttribLayoutObject ao) override;
+
+ virtual NVRenderBackendInputAssemblerObject
+ CreateInputAssembler(NVRenderBackendAttribLayoutObject attribLayout,
+ NVConstDataRef<NVRenderBackendBufferObject> buffers,
+ const NVRenderBackendBufferObject indexBuffer,
+ NVConstDataRef<QT3DSU32> strides, NVConstDataRef<QT3DSU32> offsets,
+ QT3DSU32 patchVertexCount) override;
+ void ReleaseInputAssembler(NVRenderBackendInputAssemblerObject iao) override;
+
+ bool SetInputAssembler(NVRenderBackendInputAssemblerObject iao,
+ NVRenderBackendShaderProgramObject po) override = 0;
+ void SetPatchVertexCount(NVRenderBackendInputAssemblerObject, QT3DSU32) override
+ {
+ QT3DS_ASSERT(false);
+ }
+
+ // shader
+ virtual NVRenderBackendVertexShaderObject
+ CreateVertexShader(NVConstDataRef<QT3DSI8> source, eastl::string &errorMessage, bool binary) override;
+ virtual NVRenderBackendFragmentShaderObject
+ CreateFragmentShader(NVConstDataRef<QT3DSI8> source, eastl::string &errorMessage, bool binary) 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;
+ virtual NVRenderBackendComputeShaderObject
+ CreateComputeShader(NVConstDataRef<QT3DSI8> source, eastl::string &errorMessage, bool binary) override;
+ void ReleaseVertexShader(NVRenderBackendVertexShaderObject vso) override;
+ void ReleaseFragmentShader(NVRenderBackendFragmentShaderObject fso) override;
+ void ReleaseTessControlShader(NVRenderBackendTessControlShaderObject tcso) override;
+ void ReleaseTessEvaluationShader(NVRenderBackendTessEvaluationShaderObject teso) override;
+ void ReleaseGeometryShader(NVRenderBackendGeometryShaderObject gso) override;
+ void ReleaseComputeShader(NVRenderBackendComputeShaderObject cso) override;
+ void AttachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendVertexShaderObject vso) override;
+ void AttachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendFragmentShaderObject fso) override;
+ void AttachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendTessControlShaderObject tcso) override;
+ void AttachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendTessEvaluationShaderObject teso) override;
+ void AttachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendGeometryShaderObject gso) override;
+ void AttachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendComputeShaderObject cso) override;
+ void DetachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendVertexShaderObject vso) override;
+ void DetachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendFragmentShaderObject fso) override;
+ void DetachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendTessControlShaderObject tcso) override;
+ void DetachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendTessEvaluationShaderObject teso) override;
+ void DetachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendGeometryShaderObject gso) override;
+ void DetachShader(NVRenderBackendShaderProgramObject po,
+ NVRenderBackendComputeShaderObject cso) override;
+ NVRenderBackendShaderProgramObject CreateShaderProgram(bool isSeparable) override;
+ void ReleaseShaderProgram(NVRenderBackendShaderProgramObject po) override;
+ bool LinkProgram(NVRenderBackendShaderProgramObject po,
+ eastl::string &errorMessage) override;
+ void SetActiveProgram(NVRenderBackendShaderProgramObject po) override;
+ void DispatchCompute(NVRenderBackendShaderProgramObject po, QT3DSU32 numGroupsX,
+ QT3DSU32 numGroupsY, QT3DSU32 numGroupsZ) override;
+ NVRenderBackendProgramPipeline CreateProgramPipeline() override;
+ void ReleaseProgramPipeline(NVRenderBackendProgramPipeline po) override;
+ void SetActiveProgramPipeline(NVRenderBackendProgramPipeline po) override;
+ void SetProgramStages(NVRenderBackendProgramPipeline ppo,
+ NVRenderShaderTypeFlags flags,
+ NVRenderBackendShaderProgramObject po) override;
+
+ // uniforms
+ QT3DSI32 GetConstantCount(NVRenderBackendShaderProgramObject po) override;
+ QT3DSI32 GetConstantInfoByID(NVRenderBackendShaderProgramObject po, QT3DSU32 id,
+ QT3DSU32 bufSize, QT3DSI32 *numElem,
+ NVRenderShaderDataTypes::Enum *type, QT3DSI32 *binding,
+ char *nameBuf) override;
+ void SetConstantValue(NVRenderBackendShaderProgramObject po, QT3DSU32 id,
+ NVRenderShaderDataTypes::Enum type, QT3DSI32 count,
+ const void *value, bool transpose) override;
+
+ // uniform buffers
+ QT3DSI32 GetConstantBufferCount(NVRenderBackendShaderProgramObject po) override;
+ QT3DSI32 GetConstantBufferInfoByID(NVRenderBackendShaderProgramObject po, QT3DSU32 id,
+ QT3DSU32 nameBufSize, QT3DSI32 *paramCount,
+ QT3DSI32 *bufferSize, QT3DSI32 *length, char *nameBuf) override;
+ void GetConstantBufferParamIndices(NVRenderBackendShaderProgramObject po, QT3DSU32 id,
+ QT3DSI32 *indices) override;
+ void GetConstantBufferParamInfoByIndices(NVRenderBackendShaderProgramObject po,
+ QT3DSU32 count, QT3DSU32 *indices, QT3DSI32 *type,
+ QT3DSI32 *size, QT3DSI32 *offset) override;
+ void ProgramSetConstantBlock(NVRenderBackendShaderProgramObject po,
+ QT3DSU32 blockIndex, QT3DSU32 binding) override;
+ void ProgramSetConstantBuffer(QT3DSU32 index, NVRenderBackendBufferObject bo) override;
+
+ // storage buffers
+ 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;
+
+ // atomic counter buffers
+ 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;
+
+ /// draw calls
+ void Draw(NVRenderDrawMode::Enum drawMode, QT3DSU32 start, QT3DSU32 count) override;
+ void DrawIndirect(NVRenderDrawMode::Enum drawMode, const void *indirect) override;
+ void DrawIndexed(NVRenderDrawMode::Enum drawMode, QT3DSU32 count,
+ NVRenderComponentTypes::Enum type, const void *indices) override;
+ void DrawIndexedIndirect(NVRenderDrawMode::Enum drawMode,
+ NVRenderComponentTypes::Enum type, const void *indirect) override;
+
+ // read calls
+ void ReadPixel(NVRenderBackendRenderTargetObject rto, QT3DSI32 x, QT3DSI32 y, QT3DSI32 width,
+ QT3DSI32 height, NVRenderReadPixelFormats::Enum inFormat, void *pixels) override;
+
+ // NV path rendering
+ NVRenderBackendPathObject CreatePathNVObject(size_t range) override;
+ // Pathing requires gl4 backend.
+ void SetPathSpecification(NVRenderBackendPathObject, NVConstDataRef<QT3DSU8>,
+ NVConstDataRef<QT3DSF32>) override
+ {
+ }
+
+ ///< Bounds of the fill and stroke
+ NVBounds3 GetPathObjectBoundingBox(NVRenderBackendPathObject /*inPathObject*/) override
+ {
+ return NVBounds3();
+ }
+ NVBounds3 GetPathObjectFillBox(NVRenderBackendPathObject /*inPathObject*/) override
+ {
+ return NVBounds3();
+ }
+ NVBounds3 GetPathObjectStrokeBox(NVRenderBackendPathObject /*inPathObject*/) override
+ {
+ return NVBounds3();
+ }
+
+ /**
+ * Defaults to 0 if unset.
+ */
+ void SetStrokeWidth(NVRenderBackendPathObject /*inPathObject*/, QT3DSF32) 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 LoadPathGlyphs(NVRenderBackendPathObject, NVRenderPathFontTarget::Enum,
+ const void *, NVRenderPathFontStyleFlags, size_t,
+ NVRenderPathFormatType::Enum, const void *,
+ NVRenderPathMissingGlyphs::Enum, NVRenderBackendPathObject,
+ QT3DSF32) 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, const void *,
+ NVRenderPathFontStyleFlags,
+ NVRenderBackend::NVRenderBackendPathObject, QT3DSF32, QT3DSU32 *) override;
+ void LoadPathGlyphRange(NVRenderBackendPathObject, NVRenderPathFontTarget::Enum,
+ const void *, NVRenderPathFontStyleFlags, QT3DSU32, size_t,
+ NVRenderPathMissingGlyphs::Enum, NVRenderBackendPathObject,
+ QT3DSF32) override;
+ void GetPathMetrics(NVRenderBackendPathObject, size_t,
+ NVRenderPathGlyphFontMetricFlags, NVRenderPathFormatType::Enum,
+ const void *, size_t, QT3DSF32 *) override;
+ void GetPathMetricsRange(NVRenderBackendPathObject, size_t,
+ NVRenderPathGlyphFontMetricFlags, size_t, QT3DSF32 *) override;
+ void GetPathSpacing(NVRenderBackendPathObject, size_t, NVRenderPathListMode::Enum,
+ NVRenderPathFormatType::Enum, const void *, QT3DSF32, QT3DSF32,
+ NVRenderPathTransformType::Enum, QT3DSF32 *) override;
+
+ void StencilFillPathInstanced(NVRenderBackendPathObject, size_t,
+ NVRenderPathFormatType::Enum, const void *,
+ NVRenderPathFillMode::Enum, QT3DSU32,
+ NVRenderPathTransformType::Enum, const QT3DSF32 *) override;
+ void StencilStrokePathInstancedN(NVRenderBackendPathObject, size_t,
+ NVRenderPathFormatType::Enum, const void *, QT3DSI32,
+ QT3DSU32, NVRenderPathTransformType::Enum,
+ const QT3DSF32 *) override;
+ void CoverFillPathInstanced(NVRenderBackendPathObject, size_t,
+ NVRenderPathFormatType::Enum, const void *,
+ NVRenderPathCoverMode::Enum,
+ NVRenderPathTransformType::Enum, const QT3DSF32 *) override;
+ void CoverStrokePathInstanced(NVRenderBackendPathObject, size_t,
+ NVRenderPathFormatType::Enum, const void *,
+ NVRenderPathCoverMode::Enum,
+ NVRenderPathTransformType::Enum, const QT3DSF32 *) override;
+
+ QSurfaceFormat format() const override
+ {
+ return m_format;
+ }
+
+ protected:
+ virtual NVFoundationBase &GetFoundation() { return m_Foundation; }
+ virtual bool compileSource(GLuint shaderID, NVConstDataRef<QT3DSI8> source,
+ eastl::string &errorMessage, bool binary);
+ virtual const char *getVersionString();
+ virtual const char *getVendorString();
+ virtual const char *getRendererString();
+ virtual const char *getExtensionString();
+
+ virtual void setAndInspectHardwareCaps();
+
+ protected:
+ volatile QT3DSI32 mRefCount; ///< reference count
+ NVFoundationBase &m_Foundation; ///< Foundation class for allocations and other base things
+ NVScopedRefCounted<qt3ds::foundation::IStringTable>
+ m_StringTable; ///< pointer to a string table
+ GLConversion m_Conversion; ///< Class for conversion from base type to GL types
+ QStringList m_extensions; ///< contains the OpenGL extension string
+ QT3DSI32 m_MaxAttribCount; ///< Maximum attributes which can be used
+ nvvector<GLenum> m_DrawBuffersArray; ///< Contains the drawbuffer enums
+ QSurfaceFormat m_format;
+
+ NVRenderBackendRasterizerStateGL
+ *m_pCurrentRasterizerState; ///< this holds the current rasterizer state
+ NVRenderBackendDepthStencilStateGL
+ *m_pCurrentDepthStencilState; ///< this holds the current depth stencil state
+
+#ifdef RENDER_BACKEND_LOG_GL_ERRORS
+ void checkGLError(const char *function, const char *file, const unsigned int line) const;
+#else
+ void checkGLError() const;
+#endif
+ QOpenGLFunctions *m_glFunctions;
+ QOpenGLExtraFunctions *m_glExtraFunctions;
+ GLfloat m_maxAnisotropy;
+ };
+}
+}
+
+#endif