2015-09-01 10:05:48 -07:00
|
|
|
#include "CModelEditorViewport.h"
|
2015-12-14 18:07:22 -08:00
|
|
|
#include <Core/Render/CDrawUtil.h>
|
2015-09-01 10:05:48 -07:00
|
|
|
|
|
|
|
CModelEditorViewport::CModelEditorViewport(QWidget *pParent)
|
2016-03-27 12:09:38 -07:00
|
|
|
: CBasicViewport(pParent)
|
2018-12-16 13:00:40 -08:00
|
|
|
, mMode(EDrawMode::DrawMesh)
|
2016-03-27 12:09:38 -07:00
|
|
|
, mpActiveMaterial(nullptr)
|
|
|
|
, mpModelNode(nullptr)
|
|
|
|
, mGridEnabled(true)
|
2015-09-01 10:05:48 -07:00
|
|
|
{
|
|
|
|
mpRenderer = new CRenderer();
|
2019-11-06 18:52:45 -08:00
|
|
|
qreal pixelRatio = devicePixelRatioF();
|
|
|
|
mpRenderer->SetViewportSize(width() * pixelRatio, height() * pixelRatio);
|
2015-09-01 10:05:48 -07:00
|
|
|
mpRenderer->SetClearColor(CColor::skBlack);
|
|
|
|
mpRenderer->ToggleGrid(true);
|
2015-11-27 04:26:32 -08:00
|
|
|
|
|
|
|
mViewInfo.pRenderer = mpRenderer;
|
|
|
|
mViewInfo.pScene = nullptr;
|
|
|
|
mViewInfo.GameMode = false;
|
2015-09-01 10:05:48 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
CModelEditorViewport::~CModelEditorViewport()
|
|
|
|
{
|
|
|
|
delete mpRenderer;
|
|
|
|
}
|
|
|
|
|
|
|
|
void CModelEditorViewport::SetNode(CModelNode *pNode)
|
|
|
|
{
|
|
|
|
mpModelNode = pNode;
|
|
|
|
}
|
|
|
|
|
|
|
|
void CModelEditorViewport::SetActiveMaterial(CMaterial *pMat)
|
|
|
|
{
|
|
|
|
mpActiveMaterial = pMat;
|
|
|
|
}
|
|
|
|
|
2016-03-27 12:09:38 -07:00
|
|
|
void CModelEditorViewport::SetDrawMode(EDrawMode Mode)
|
2015-09-01 10:05:48 -07:00
|
|
|
{
|
2016-03-27 12:09:38 -07:00
|
|
|
mMode = Mode;
|
2015-09-01 10:05:48 -07:00
|
|
|
}
|
|
|
|
|
2016-03-27 12:09:38 -07:00
|
|
|
void CModelEditorViewport::SetClearColor(CColor Color)
|
2015-09-01 10:05:48 -07:00
|
|
|
{
|
2016-03-27 12:09:38 -07:00
|
|
|
mpRenderer->SetClearColor(Color);
|
2015-09-01 10:05:48 -07:00
|
|
|
}
|
|
|
|
|
2016-02-20 03:48:17 -08:00
|
|
|
void CModelEditorViewport::SetGridEnabled(bool Enable)
|
|
|
|
{
|
|
|
|
mGridEnabled = Enable;
|
|
|
|
}
|
|
|
|
|
2015-09-01 10:05:48 -07:00
|
|
|
void CModelEditorViewport::Paint()
|
|
|
|
{
|
|
|
|
mpRenderer->BeginFrame();
|
|
|
|
mCamera.LoadMatrices();
|
|
|
|
|
|
|
|
if (!mpModelNode->Model())
|
2016-02-20 03:48:17 -08:00
|
|
|
{
|
|
|
|
if (mGridEnabled)
|
2016-04-27 23:44:50 -07:00
|
|
|
mGrid.AddToRenderer(mpRenderer, mViewInfo);
|
|
|
|
|
|
|
|
mpRenderer->RenderBuckets(mViewInfo);
|
2016-02-20 03:48:17 -08:00
|
|
|
}
|
2015-09-01 10:05:48 -07:00
|
|
|
|
2018-12-16 13:00:40 -08:00
|
|
|
else if (mMode == EDrawMode::DrawMesh)
|
2015-09-01 10:05:48 -07:00
|
|
|
{
|
2016-02-20 03:48:17 -08:00
|
|
|
if (mGridEnabled)
|
2016-04-27 23:44:50 -07:00
|
|
|
mGrid.AddToRenderer(mpRenderer, mViewInfo);
|
2016-02-20 03:48:17 -08:00
|
|
|
|
2015-11-25 13:37:34 -08:00
|
|
|
mpModelNode->AddToRenderer(mpRenderer, mViewInfo);
|
|
|
|
mpRenderer->RenderBuckets(mViewInfo);
|
2015-09-01 10:05:48 -07:00
|
|
|
}
|
|
|
|
|
2018-12-16 13:00:40 -08:00
|
|
|
else if (mMode == EDrawMode::DrawSphere)
|
2015-09-01 10:05:48 -07:00
|
|
|
{
|
|
|
|
if (!mpActiveMaterial) return;
|
|
|
|
glEnable(GL_CULL_FACE);
|
|
|
|
|
2015-12-16 02:28:40 -08:00
|
|
|
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor;
|
2015-09-01 10:05:48 -07:00
|
|
|
CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity;
|
|
|
|
CGraphics::UpdateMVPBlock();
|
|
|
|
CGraphics::SetDefaultLighting();
|
|
|
|
CGraphics::UpdateLightBlock(); // Note: vertex block is updated by the material
|
|
|
|
|
2019-11-24 18:46:57 -08:00
|
|
|
for (CMaterial* passMat = mpActiveMaterial; passMat; passMat = passMat->GetNextDrawPass())
|
|
|
|
{
|
|
|
|
passMat->SetCurrent(ERenderOption::EnableUVScroll | ERenderOption::EnableBackfaceCull | ERenderOption::EnableOccluders);
|
|
|
|
CDrawUtil::DrawSphere(true);
|
|
|
|
}
|
2015-09-01 10:05:48 -07:00
|
|
|
}
|
|
|
|
|
2018-12-16 13:00:40 -08:00
|
|
|
else if (mMode == EDrawMode::DrawSquare)
|
2015-09-01 10:05:48 -07:00
|
|
|
{
|
|
|
|
if (!mpActiveMaterial) return;
|
|
|
|
glDisable(GL_CULL_FACE);
|
|
|
|
|
|
|
|
CGraphics::SetDefaultLighting();
|
|
|
|
CGraphics::UpdateLightBlock();
|
2015-12-16 02:28:40 -08:00
|
|
|
CGraphics::sVertexBlock.COLOR0_Amb = CGraphics::skDefaultAmbientColor;
|
2015-09-01 10:05:48 -07:00
|
|
|
|
|
|
|
CGraphics::sMVPBlock.ModelMatrix = CMatrix4f::skIdentity;
|
|
|
|
CGraphics::sMVPBlock.ViewMatrix = CMatrix4f::skIdentity;
|
|
|
|
CGraphics::sMVPBlock.ProjectionMatrix = CMatrix4f::skIdentity;
|
|
|
|
CGraphics::UpdateMVPBlock();
|
|
|
|
|
2019-11-24 18:46:57 -08:00
|
|
|
for (CMaterial* passMat = mpActiveMaterial; passMat; passMat = passMat->GetNextDrawPass())
|
|
|
|
{
|
|
|
|
passMat->SetCurrent(ERenderOption::EnableUVScroll | ERenderOption::EnableOccluders);
|
|
|
|
float Aspect = (float) width() / (float) height();
|
|
|
|
CDrawUtil::DrawSquare(CVector2f(0,1), CVector2f(1 * Aspect, 1), CVector2f(1 * Aspect, 0), CVector2f(0,0));
|
|
|
|
}
|
2015-09-01 10:05:48 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
mpRenderer->EndFrame();
|
|
|
|
}
|
|
|
|
|
|
|
|
void CModelEditorViewport::OnResize()
|
|
|
|
{
|
2019-11-06 18:52:45 -08:00
|
|
|
qreal pixelRatio = devicePixelRatioF();
|
|
|
|
mpRenderer->SetViewportSize(width() * pixelRatio, height() * pixelRatio);
|
2015-09-01 10:05:48 -07:00
|
|
|
}
|