diff options
Diffstat (limited to 'src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp')
-rw-r--r-- | src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp b/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp new file mode 100644 index 00000000..4028373b --- /dev/null +++ b/src/Runtime/Source/runtimerender/Qt3DSOldNBustedRenderPlugin.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ +#include "Qt3DSOldNBustedRenderPlugin.h" +#include "SystemPrefix.h" +#include "Qt3DSDLLManager.h" +#include "render/Qt3DSRenderContext.h" + +#ifdef WIN32 +#pragma warning(disable : 4355) // this used in initializer list. I have never seen this result in + // a physical error +#endif + +namespace qt3ds { +namespace render { + + COldNBustedPluginRenderer::COldNBustedPluginRenderer(IQt3DSRenderContext &inRenderContext, + long inDLLHandle) + : m_RenderContext(inRenderContext) + , m_DLLHandle(inDLLHandle) + , mRefCount(0) + , m_OffscreenRendererType(inRenderContext.GetStringTable().RegisterStr(GetRendererName())) + { + if (m_DLLHandle != -1) { + Q3DStudio::CDLLManager &theManager = Q3DStudio::CDLLManager::GetDLLManager(); + + // Grab function procs + m_GetTextureSizeProc = reinterpret_cast<PROC_GetDesiredTextureSize>( + theManager.GetProc("GetDesiredTextureSize", m_DLLHandle)); + Q3DStudio_ASSERT(m_GetTextureSizeProc); + + m_RenderProc = reinterpret_cast<PROC_Render>(theManager.GetProc("Render", m_DLLHandle)); + Q3DStudio_ASSERT(m_RenderProc); + } + } + + NVRenderTextureFormats::Enum convertTextureFormat(ETEXTUREFORMAT fmt) + { + NVRenderTextureFormats::Enum ret = NVRenderTextureFormats::RGBA8; + switch (fmt) { + + case ETEXTUREFORMAT_RGBA8: + break; + + case ETEXTUREFORMAT_RGB8: + ret = NVRenderTextureFormats::RGB8; + break; + + default: + break; + + } + return ret; + } + + SOffscreenRendererEnvironment + COldNBustedPluginRenderer::GetDesiredEnvironment(QT3DSVec2 inPresScale) + { + long width, height; + ETEXTUREFORMAT format; + + m_GetTextureSizeProc(&width, &height, &format); + + return SOffscreenRendererEnvironment( + (QT3DSU32)(width * inPresScale.x), (QT3DSU32)(height * inPresScale.y), + convertTextureFormat(format), OffscreenRendererDepthValues::Depth24, false, + AAModeValues::NoAA); + } + + SOffscreenRenderFlags + COldNBustedPluginRenderer::NeedsRender(const SOffscreenRendererEnvironment & /*inEnvironment*/, + QT3DSVec2 /*inPresScale*/, + const SRenderInstanceId) + { + return SOffscreenRenderFlags(true, true); + } + + // Returns true if the rendered result image has transparency, or false + // if it should be treated as a completely opaque image. + void COldNBustedPluginRenderer::Render(const SOffscreenRendererEnvironment &inEnvironment, + NVRenderContext &inRenderContext, QT3DSVec2 /*inPresScale*/, + SScene::RenderClearCommand /*inClearColorBuffer*/, + const SRenderInstanceId) + { + inRenderContext.PushPropertySet(); + + m_RenderProc(inEnvironment.m_Width, inEnvironment.m_Height, 1); + + inRenderContext.PopPropertySet(true); + } +} +} |