summaryrefslogtreecommitdiffstats
path: root/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp')
m---------src/Runtime/ogl-runtime0
-rw-r--r--src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp319
2 files changed, 0 insertions, 319 deletions
diff --git a/src/Runtime/ogl-runtime b/src/Runtime/ogl-runtime
new file mode 160000
+Subproject 2025912174c4cf99270b7439ec3b021e1d089ae
diff --git a/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp b/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp
deleted file mode 100644
index 311b2189..00000000
--- a/src/Runtime/ogl-runtime/src/runtimerender/Qt3DSRenderWidgets.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-/****************************************************************************
-**
-** 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 "Qt3DSRenderWidgets.h"
-#include "Qt3DSRenderNode.h"
-#include "render/Qt3DSRenderContext.h"
-#include "Qt3DSRenderShaderCodeGeneratorV2.h"
-#include "render/Qt3DSRenderShaderProgram.h"
-
-using namespace qt3ds::render;
-
-namespace {
-
-struct SWidgetBBox : public IRenderWidget
-{
- NVBounds3 m_Bounds;
- QT3DSVec3 m_Color;
- NVRenderVertexBuffer *m_BoxVertexBuffer;
- NVRenderIndexBuffer *m_BoxIndexBuffer;
- NVRenderInputAssembler *m_BoxInputAssembler;
- NVRenderShaderProgram *m_BoxShader;
- CRegisteredString m_ItemName;
- SWidgetBBox(SNode &inNode, const NVBounds3 &inBounds, const QT3DSVec3 &inColor)
- : IRenderWidget(inNode)
- , m_Bounds(inBounds)
- , m_Color(inColor)
- , m_BoxVertexBuffer(NULL)
- , m_BoxIndexBuffer(NULL)
- , m_BoxInputAssembler(NULL)
- , m_BoxShader(NULL)
- {
- }
-
- void SetupBoxShader(IRenderWidgetContext &inContext)
- {
- m_BoxShader = inContext.GetShader(m_ItemName);
- if (!m_BoxShader) {
- qt3ds::render::IShaderProgramGenerator &theGenerator(inContext.GetProgramGenerator());
- theGenerator.BeginProgram();
- qt3ds::render::IShaderStageGenerator &theVertexGenerator(
- *theGenerator.GetStage(qt3ds::render::ShaderGeneratorStages::Vertex));
- qt3ds::render::IShaderStageGenerator &theFragmentGenerator(
- *theGenerator.GetStage(qt3ds::render::ShaderGeneratorStages::Fragment));
-
- theVertexGenerator.AddIncoming("attr_pos", "vec3");
- theVertexGenerator.AddUniform("model_view_projection", "mat4");
- theVertexGenerator.Append("void main() {");
- theVertexGenerator.Append(
- "\tgl_Position = model_view_projection * vec4(attr_pos, 1.0);");
- theVertexGenerator.Append("}");
- theFragmentGenerator.AddUniform("output_color", "vec3");
- theFragmentGenerator.Append("void main() {");
- theFragmentGenerator.Append("\tgl_FragColor.rgb = output_color;");
- theFragmentGenerator.Append("\tgl_FragColor.a = 1.0;");
- theFragmentGenerator.Append("}");
- m_BoxShader = inContext.CompileAndStoreShader(m_ItemName);
- }
- }
-
- void SetupBoundingBoxGraphicsObjects(IRenderWidgetContext &inContext,
- NVDataRef<QT3DSVec3> thePoints)
- {
- qt3ds::render::NVRenderVertexBufferEntry theEntry(
- "attr_pos", qt3ds::render::NVRenderComponentTypes::QT3DSF32, 3);
- m_BoxVertexBuffer = &inContext.GetOrCreateVertexBuffer(
- m_ItemName, 3 * sizeof(QT3DSF32), toU8DataRef(thePoints.begin(), thePoints.size()));
- m_BoxIndexBuffer = inContext.GetIndexBuffer(m_ItemName);
- if (!m_BoxIndexBuffer) {
- // The way the bounds lays out the bounds for the box
- // capitalization indicates whether this was a max or min value.
- enum _Indexes {
- xyz = 0,
- Xyz,
- xYz,
- xyZ,
- XYZ,
- xYZ,
- XyZ,
- XYz,
- };
- QT3DSU8 indexes[] = {
- // The toBoxBounds function lays out points such that
- // xyz, Xyz, xYz, xyZ, XYZ, xYZ, XyZ, XYz
- // Min corner
- xyz, Xyz, xyz, xYz, xyz, xyZ,
-
- // Max corner
- XYZ, xYZ, XYZ, XyZ, XYZ, XYz,
-
- // Now connect the rest of the dots.
- // the rules are that only one letter can change
- // else you are connecting *across* the box somehow.
-
- Xyz, XYz, Xyz, XyZ,
-
- xYz, XYz, xYz, xYZ,
-
- xyZ, XyZ, xyZ, xYZ,
- };
- m_BoxIndexBuffer = &inContext.GetOrCreateIndexBuffer(
- m_ItemName, qt3ds::render::NVRenderComponentTypes::QT3DSU8, sizeof(indexes),
- toU8DataRef(indexes, sizeof(indexes)));
- }
-
- m_BoxInputAssembler = inContext.GetInputAssembler(m_ItemName);
- if (!m_BoxInputAssembler && m_BoxIndexBuffer && m_BoxVertexBuffer) {
- // create our attribute layout
- NVRenderAttribLayout *theAttribLAyout =
- &inContext.CreateAttributeLayout(toConstDataRef(&theEntry, 1));
-
- QT3DSU32 strides = m_BoxVertexBuffer->GetStride();
- QT3DSU32 offsets = 0;
- m_BoxInputAssembler = &inContext.GetOrCreateInputAssembler(
- m_ItemName, theAttribLAyout, toConstDataRef(&m_BoxVertexBuffer, 1),
- m_BoxIndexBuffer, toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1));
- }
- SetupBoxShader(inContext);
- }
-
- void Render(IRenderWidgetContext &inWidgetContext, NVRenderContext &inRenderContext) override
- {
- m_ItemName = inRenderContext.GetStringTable().RegisterStr("SWidgetBBox");
- SWidgetRenderInformation theInfo(inWidgetContext.GetWidgetRenderInformation(
- *m_Node, m_Node->m_Position, RenderWidgetModes::Local));
- TNVBounds2BoxPoints thePoints;
- m_Bounds.expand(thePoints);
- QT3DSMat44 theNodeRotation;
- QT3DSMat44 theNodeToCamera = theInfo.m_NodeParentToCamera * m_Node->m_LocalTransform;
- for (QT3DSU32 idx = 0; idx < 8; ++idx)
- thePoints[idx] = theNodeToCamera.transform(thePoints[idx]);
- SetupBoundingBoxGraphicsObjects(inWidgetContext, toDataRef(thePoints, 8));
- if (m_BoxShader && m_BoxInputAssembler) {
- inRenderContext.SetBlendingEnabled(false);
- inRenderContext.SetDepthWriteEnabled(true);
- inRenderContext.SetDepthTestEnabled(true);
- inRenderContext.SetCullingEnabled(false);
- inRenderContext.SetActiveShader(m_BoxShader);
- m_BoxShader->SetPropertyValue("model_view_projection", theInfo.m_LayerProjection);
- m_BoxShader->SetPropertyValue("output_color", m_Color);
- inRenderContext.SetInputAssembler(m_BoxInputAssembler);
- inRenderContext.Draw(qt3ds::render::NVRenderDrawMode::Lines,
- m_BoxInputAssembler->GetIndexCount(), 0);
- }
- }
-};
-
-struct SWidgetAxis : public IRenderWidget
-{
- NVRenderVertexBuffer *m_AxisVertexBuffer;
- NVRenderInputAssembler *m_AxisInputAssembler;
- NVRenderShaderProgram *m_AxisShader;
- CRegisteredString m_ItemName;
-
- SWidgetAxis(SNode &inNode)
- : IRenderWidget(inNode)
- , m_AxisVertexBuffer(NULL)
- , m_AxisInputAssembler(NULL)
- , m_AxisShader(NULL)
- {
- }
-
- void SetupAxisShader(IRenderWidgetContext &inContext)
- {
- m_AxisShader = inContext.GetShader(m_ItemName);
- if (!m_AxisShader) {
- qt3ds::render::IShaderProgramGenerator &theGenerator(inContext.GetProgramGenerator());
- theGenerator.BeginProgram();
- qt3ds::render::IShaderStageGenerator &theVertexGenerator(
- *theGenerator.GetStage(qt3ds::render::ShaderGeneratorStages::Vertex));
- qt3ds::render::IShaderStageGenerator &theFragmentGenerator(
- *theGenerator.GetStage(qt3ds::render::ShaderGeneratorStages::Fragment));
- theVertexGenerator.AddIncoming("attr_pos", "vec3");
- theVertexGenerator.AddIncoming("attr_color", "vec3");
- theVertexGenerator.AddOutgoing("output_color", "vec3");
- theVertexGenerator.AddUniform("model_view_projection", "mat4");
- theVertexGenerator.Append("void main() {");
- theVertexGenerator.Append(
- "\tgl_Position = model_view_projection * vec4(attr_pos, 1.0);");
- theVertexGenerator.Append("\toutput_color = attr_color;");
- theVertexGenerator.Append("}");
- theFragmentGenerator.Append("void main() {");
- theFragmentGenerator.Append("\tgl_FragColor.rgb = output_color;");
- theFragmentGenerator.Append("\tgl_FragColor.a = 1.0;");
- theFragmentGenerator.Append("}");
- m_AxisShader = inContext.CompileAndStoreShader(m_ItemName);
- }
- }
-
- void SetupAxesGraphicsObjects(IRenderWidgetContext &inContext, NVDataRef<QT3DSVec3> theAxes)
- {
- qt3ds::render::NVRenderVertexBufferEntry theEntries[] = {
- qt3ds::render::NVRenderVertexBufferEntry("attr_pos",
- qt3ds::render::NVRenderComponentTypes::QT3DSF32, 3),
- qt3ds::render::NVRenderVertexBufferEntry("attr_color",
- qt3ds::render::NVRenderComponentTypes::QT3DSF32, 3, 12),
- };
-
- m_AxisVertexBuffer = &inContext.GetOrCreateVertexBuffer(
- m_ItemName, 6 * sizeof(QT3DSF32), toU8DataRef(theAxes.begin(), theAxes.size()));
- m_AxisInputAssembler = inContext.GetInputAssembler(m_ItemName);
- if (!m_AxisInputAssembler && m_AxisVertexBuffer) {
- // create our attribute layout
- NVRenderAttribLayout *theAttribLAyout =
- &inContext.CreateAttributeLayout(toConstDataRef(theEntries, 2));
-
- QT3DSU32 strides = m_AxisVertexBuffer->GetStride();
- QT3DSU32 offsets = 0;
- m_AxisInputAssembler = &inContext.GetOrCreateInputAssembler(
- m_ItemName, theAttribLAyout, toConstDataRef(&m_AxisVertexBuffer, 1), nullptr,
- toConstDataRef(&strides, 1), toConstDataRef(&offsets, 1));
- }
- }
-
- inline QT3DSVec3 TransformDirection(const QT3DSMat33 &inMatrix, const QT3DSVec3 &inDir)
- {
- QT3DSVec3 retval = inMatrix.transform(inDir);
- return retval;
- }
-
- void Render(IRenderWidgetContext &inWidgetContext, NVRenderContext &inRenderContext) override
- {
- m_ItemName = inRenderContext.GetStringTable().RegisterStr("SWidgetAxis");
-
- SetupAxisShader(inWidgetContext);
-
- if (m_AxisShader) {
- static const QT3DSVec3 pivotCol = QT3DSVec3(0, 0, 1);
- if (m_Node->m_Parent && m_Node->m_Parent->m_Type != GraphObjectTypes::Layer) {
- m_Node->m_Parent->CalculateGlobalVariables();
- }
- QT3DSVec3 thePivot(m_Node->m_Pivot);
- if (m_Node->m_Flags.IsLeftHanded())
- thePivot.z *= -1;
-
- SWidgetRenderInformation theInfo(inWidgetContext.GetWidgetRenderInformation(
- *m_Node, QT3DSVec3(0, 0, 0), RenderWidgetModes::Local));
-
- QT3DSMat44 theNodeRotation;
- m_Node->CalculateRotationMatrix(theNodeRotation);
- if (m_Node->m_Flags.IsLeftHanded())
- SNode::FlipCoordinateSystem(theNodeRotation);
-
- QT3DSMat33 theRotationMatrix(theNodeRotation.column0.getXYZ(),
- theNodeRotation.column1.getXYZ(),
- theNodeRotation.column2.getXYZ());
-
- // Move the camera position into camera space. This is so that when we render we don't
- // have to account
- // for scaling done in the camera's MVP.
- QT3DSVec3 theItemPosition = theInfo.m_Position;
-
- QT3DSMat33 theAxisTransform = theInfo.m_NormalMatrix * theRotationMatrix;
-
- // Scale the effective pivot line end point according to node scale
- // so that pivot line always hits object center.
- thePivot = thePivot.multiply(m_Node->m_Scale);
- QT3DSVec3 pivotVec = TransformDirection(
- theAxisTransform, QT3DSVec3(-thePivot.x, -thePivot.y, -thePivot.z));
-
- QT3DSVec3 thePivotLine[] = {
- theItemPosition, pivotCol, theItemPosition + pivotVec, pivotCol
- };
-
- SetupAxesGraphicsObjects(inWidgetContext, toDataRef(thePivotLine, 4));
-
- if (m_AxisInputAssembler) {
- inRenderContext.SetBlendingEnabled(false);
- inRenderContext.SetDepthWriteEnabled(false);
- inRenderContext.SetDepthTestEnabled(false);
- inRenderContext.SetCullingEnabled(false);
- inRenderContext.SetActiveShader(m_AxisShader);
- m_AxisShader->SetPropertyValue("model_view_projection", theInfo.m_LayerProjection);
- inRenderContext.SetInputAssembler(m_AxisInputAssembler);
- // Draw line from pivot to object center.
- inRenderContext.Draw(qt3ds::render::NVRenderDrawMode::Lines, 2, 0);
- }
- }
- }
-};
-}
-
-IRenderWidget &IRenderWidget::CreateBoundingBoxWidget(SNode &inNode, const NVBounds3 &inBounds,
- const QT3DSVec3 &inColor,
- NVAllocatorCallback &inAlloc)
-{
- return *QT3DS_NEW(inAlloc, SWidgetBBox)(inNode, inBounds, inColor);
-}
-
-IRenderWidget &IRenderWidget::CreateAxisWidget(SNode &inNode, NVAllocatorCallback &inAlloc)
-{
- return *QT3DS_NEW(inAlloc, SWidgetAxis)(inNode);
-}