diff options
author | Määttä Antti <antti.maatta@qt.io> | 2018-04-12 12:27:30 +0300 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@qt.io> | 2018-04-27 03:22:53 +0000 |
commit | ce587826578771e90dc99992c527c228090e8a24 (patch) | |
tree | 217f8fc22830530eb2e526ec9dc28c1322fc061d /src/Authoring/Studio/Render/StudioVisualAidWidget.h | |
parent | 8a99aa395bf95bf7b5215f138400d7469d005da4 (diff) |
Implement camera and lights perspective mode
Add visual representation for camera and lights.
Add camera and light picking using billboards.
Task-number: QT3DS-375
Task-number: QT3DS-376
Task-number: QT3DS-383
Change-Id: I36548a993aeeb44421a71d56248539687f2f3a68
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Authoring/Studio/Render/StudioVisualAidWidget.h')
-rw-r--r-- | src/Authoring/Studio/Render/StudioVisualAidWidget.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/Authoring/Studio/Render/StudioVisualAidWidget.h b/src/Authoring/Studio/Render/StudioVisualAidWidget.h new file mode 100644 index 00000000..8a91fa9c --- /dev/null +++ b/src/Authoring/Studio/Render/StudioVisualAidWidget.h @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt 3D Studio. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** 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 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** 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$ +** +****************************************************************************/ +#ifndef QT3DS_STUDIO_VISUAL_AID_WIDGET_H +#define QT3DS_STUDIO_VISUAL_AID_WIDGET_H + +#include "StudioWidget.h" +#include "foundation/Qt3DSContainers.h" +#include "render/Qt3DSRenderShaderProgram.h" + +#include "Qt3DSRenderNode.h" +#include "Qt3DSRenderShaderCodeGeneratorV2.h" + + +namespace qt3ds { +namespace widgets { + +struct SVisualAidWidget +{ + SNode *m_node; + NVScopedRefCounted<NVRenderInputAssembler> m_billboard; + NVScopedRefCounted<NVRenderInputAssembler> m_cameraBox; + NVScopedRefCounted<NVRenderInputAssembler> m_directionalLight; + NVScopedRefCounted<NVRenderInputAssembler> m_pointLight; + NVScopedRefCounted<NVRenderInputAssembler> m_areaLight; + NVScopedRefCounted<NVRenderShaderProgram> m_renderCameraShader; + NVScopedRefCounted<NVRenderShaderProgram> m_renderShader; + NVScopedRefCounted<NVRenderShaderProgram> m_billboardShader; + NVScopedRefCounted<NVRenderTexture2D> m_billboardCameraTexture; + NVScopedRefCounted<NVRenderTexture2D> m_billboardLightTexture; + + bool m_selected; + NVAllocatorCallback &m_allocator; + volatile QT3DSI32 mRefCount; + + SVisualAidWidget(NVAllocatorCallback &inAlloc); + + QT3DS_IMPLEMENT_REF_COUNT_ADDREF_RELEASE(m_allocator) + + NVConstDataRef<NVRenderVertexBufferEntry> getCameraBoxAttributesAndStride(QT3DSU32 &stride); + NVConstDataRef<NVRenderVertexBufferEntry> getLightAttributesAndStride(QT3DSU32 &stride); + NVConstDataRef<NVRenderVertexBufferEntry> getBillboardAttributesAndStride(QT3DSU32 &stride); + void renderCamera(SNode *node, IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + void renderLight(SNode *node, IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + void renderBillboard(SNode *node, IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + void SetNode(SNode *inNode); + NVRenderShaderProgram *createRenderShader(IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + NVRenderShaderProgram *createBillboardShader(IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + NVRenderShaderProgram *createRenderCameraShader(IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + NVRenderInputAssembler *createCameraBox(IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + NVRenderInputAssembler *createBillboard(IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + NVRenderInputAssembler *createDirectionalLight(IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + NVRenderInputAssembler *createPointLight(IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + NVRenderInputAssembler *createAreaLight(IRenderWidgetContext &inWidgetContext, + NVRenderContext &inRenderContext); + void Render(IRenderWidgetContext &inWidgetContext, NVRenderContext &inRenderContext); + + bool pick(IRenderWidgetContext &inWidgetContext, float &dist, + QT3DSVec2 viewport, QT3DSVec2 pos); + + void setSelected(bool selected) + { + m_selected = selected; + } + + static SVisualAidWidget &CreateVisualAidWidget(NVAllocatorCallback &inAlloc); +}; + +} +} + + +#endif // QT3DS_STUDIO_VISUAL_AID_WIDGET_H |