mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-28 18:31:40 +00:00
Stub out BufferViewer UI controls, and make camera control properly
This commit is contained in:
@@ -80,6 +80,11 @@ void CustomPaintWidget::keyPressEvent(QKeyEvent *e)
|
||||
emit keyPress(e);
|
||||
}
|
||||
|
||||
void CustomPaintWidget::keyReleaseEvent(QKeyEvent *e)
|
||||
{
|
||||
emit keyRelease(e);
|
||||
}
|
||||
|
||||
void CustomPaintWidget::paintEvent(QPaintEvent *e)
|
||||
{
|
||||
if(m_Ctx)
|
||||
|
||||
@@ -58,6 +58,7 @@ signals:
|
||||
void resize(QResizeEvent *e);
|
||||
void mouseWheel(QWheelEvent *e);
|
||||
void keyPress(QKeyEvent *e);
|
||||
void keyRelease(QKeyEvent *e);
|
||||
|
||||
private:
|
||||
void mousePressEvent(QMouseEvent *e) override;
|
||||
@@ -66,6 +67,7 @@ private:
|
||||
void wheelEvent(QWheelEvent *e) override;
|
||||
void resizeEvent(QResizeEvent *e) override;
|
||||
void keyPressEvent(QKeyEvent *e) override;
|
||||
void keyReleaseEvent(QKeyEvent *e) override;
|
||||
|
||||
public slots:
|
||||
|
||||
|
||||
+368
-111
@@ -25,8 +25,278 @@
|
||||
#include "BufferViewer.h"
|
||||
#include <QFontDatabase>
|
||||
#include <QMouseEvent>
|
||||
#include <QTimer>
|
||||
#include "ui_BufferViewer.h"
|
||||
|
||||
class CameraWrapper
|
||||
{
|
||||
public:
|
||||
virtual bool Update(QRect winSize) = 0;
|
||||
virtual Camera *camera() = 0;
|
||||
|
||||
virtual void MouseWheel(QWheelEvent *e) = 0;
|
||||
|
||||
virtual void MouseClick(QMouseEvent *e) { m_DragStartPos = e->pos(); }
|
||||
virtual void MouseMove(QMouseEvent *e)
|
||||
{
|
||||
if(e->buttons() & Qt::LeftButton)
|
||||
{
|
||||
if(m_DragStartPos.x() < 0)
|
||||
{
|
||||
m_DragStartPos = e->pos();
|
||||
}
|
||||
|
||||
m_DragStartPos = e->pos();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_DragStartPos = QPoint(-1, -1);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void KeyUp(QKeyEvent *e)
|
||||
{
|
||||
if(e->key() == Qt::Key_A || e->key() == Qt::Key_D)
|
||||
setMove(Direction::Horiz, 0);
|
||||
if(e->key() == Qt::Key_Q || e->key() == Qt::Key_E)
|
||||
setMove(Direction::Vert, 0);
|
||||
if(e->key() == Qt::Key_W || e->key() == Qt::Key_S)
|
||||
setMove(Direction::Fwd, 0);
|
||||
|
||||
if(e->modifiers() && Qt::ShiftModifier)
|
||||
m_CurrentSpeed = 3.0f;
|
||||
else
|
||||
m_CurrentSpeed = 1.0f;
|
||||
}
|
||||
|
||||
virtual void KeyDown(QKeyEvent *e)
|
||||
{
|
||||
if(e->key() == Qt::Key_W)
|
||||
setMove(Direction::Fwd, 1);
|
||||
if(e->key() == Qt::Key_S)
|
||||
setMove(Direction::Fwd, -1);
|
||||
if(e->key() == Qt::Key_Q)
|
||||
setMove(Direction::Vert, 1);
|
||||
if(e->key() == Qt::Key_E)
|
||||
setMove(Direction::Vert, -1);
|
||||
if(e->key() == Qt::Key_D)
|
||||
setMove(Direction::Horiz, 1);
|
||||
if(e->key() == Qt::Key_A)
|
||||
setMove(Direction::Horiz, -1);
|
||||
|
||||
if(e->modifiers() && Qt::ShiftModifier)
|
||||
m_CurrentSpeed = 3.0f;
|
||||
else
|
||||
m_CurrentSpeed = 1.0f;
|
||||
}
|
||||
|
||||
float SpeedMultiplier = 0.05f;
|
||||
|
||||
protected:
|
||||
enum class Direction
|
||||
{
|
||||
Fwd,
|
||||
Horiz,
|
||||
Vert,
|
||||
Num
|
||||
};
|
||||
|
||||
int move(Direction dir) { return m_CurrentMove[(int)dir]; }
|
||||
float currentSpeed() { return m_CurrentSpeed * SpeedMultiplier; }
|
||||
QPoint dragStartPos() { return m_DragStartPos; }
|
||||
private:
|
||||
float m_CurrentSpeed = 1.0f;
|
||||
int m_CurrentMove[(int)Direction::Num] = {0, 0, 0};
|
||||
|
||||
void setMove(Direction dir, int val) { m_CurrentMove[(int)dir] = val; }
|
||||
QPoint m_DragStartPos = QPoint(-1, -1);
|
||||
};
|
||||
|
||||
class ArcballWrapper : public CameraWrapper
|
||||
{
|
||||
public:
|
||||
ArcballWrapper() { m_Cam = Camera_InitArcball(); }
|
||||
~ArcballWrapper() { Camera_Shutdown(m_Cam); }
|
||||
Camera *camera() override { return m_Cam; }
|
||||
void Reset(FloatVector pos, float dist)
|
||||
{
|
||||
Camera_ResetArcball(m_Cam);
|
||||
|
||||
setLookAtPos(pos);
|
||||
SetDistance(dist);
|
||||
}
|
||||
|
||||
void SetDistance(float dist)
|
||||
{
|
||||
m_Distance = qAbs(dist);
|
||||
Camera_SetArcballDistance(m_Cam, m_Distance);
|
||||
}
|
||||
|
||||
bool Update(QRect size) override
|
||||
{
|
||||
m_WinSize = size;
|
||||
return false;
|
||||
}
|
||||
|
||||
void MouseWheel(QWheelEvent *e) override
|
||||
{
|
||||
float mod = (1.0f - e->delta() / 2500.0f);
|
||||
|
||||
SetDistance(qMax(1e-6f, m_Distance * mod));
|
||||
}
|
||||
|
||||
void MouseMove(QMouseEvent *e) override
|
||||
{
|
||||
if(dragStartPos().x() > 0)
|
||||
{
|
||||
if(e->buttons() == Qt::MiddleButton ||
|
||||
(e->buttons() == Qt::LeftButton && e->modifiers() & Qt::AltModifier))
|
||||
{
|
||||
float xdelta = (float)(e->pos().x() - dragStartPos().x()) / 300.0f;
|
||||
float ydelta = (float)(e->pos().y() - dragStartPos().y()) / 300.0f;
|
||||
|
||||
xdelta *= qMax(1.0f, m_Distance);
|
||||
ydelta *= qMax(1.0f, m_Distance);
|
||||
|
||||
FloatVector pos, fwd, right, up;
|
||||
Camera_GetBasis(m_Cam, &pos, &fwd, &right, &up);
|
||||
|
||||
m_LookAt.x -= right.x * xdelta;
|
||||
m_LookAt.y -= right.y * xdelta;
|
||||
m_LookAt.z -= right.z * xdelta;
|
||||
|
||||
m_LookAt.x += up.x * ydelta;
|
||||
m_LookAt.y += up.y * ydelta;
|
||||
m_LookAt.z += up.z * ydelta;
|
||||
|
||||
Camera_SetPosition(m_Cam, m_LookAt.x, m_LookAt.y, m_LookAt.z);
|
||||
}
|
||||
else if(e->buttons() == Qt::LeftButton)
|
||||
{
|
||||
RotateArcball(dragStartPos(), e->pos());
|
||||
}
|
||||
}
|
||||
|
||||
CameraWrapper::MouseMove(e);
|
||||
}
|
||||
|
||||
FloatVector lookAtPos() { return m_LookAt; }
|
||||
void setLookAtPos(const FloatVector &v)
|
||||
{
|
||||
m_LookAt = v;
|
||||
Camera_SetPosition(m_Cam, v.x, v.y, v.z);
|
||||
}
|
||||
|
||||
private:
|
||||
Camera *m_Cam;
|
||||
|
||||
QRect m_WinSize;
|
||||
|
||||
float m_Distance = 10.0f;
|
||||
FloatVector m_LookAt;
|
||||
|
||||
void RotateArcball(QPoint from, QPoint to)
|
||||
{
|
||||
float ax = ((float)from.x() / (float)m_WinSize.width()) * 2.0f - 1.0f;
|
||||
float ay = ((float)from.y() / (float)m_WinSize.height()) * 2.0f - 1.0f;
|
||||
float bx = ((float)to.x() / (float)m_WinSize.width()) * 2.0f - 1.0f;
|
||||
float by = ((float)to.y() / (float)m_WinSize.height()) * 2.0f - 1.0f;
|
||||
|
||||
// this isn't a 'true arcball' but it handles extreme aspect ratios
|
||||
// better. We basically 'centre' around the from point always being
|
||||
// 0,0 (straight out of the screen) as if you're always dragging
|
||||
// the arcball from the middle, and just use the relative movement
|
||||
int minDimension = qMin(m_WinSize.width(), m_WinSize.height());
|
||||
|
||||
ax = ay = 0;
|
||||
bx = ((float)(to.x() - from.x()) / (float)minDimension) * 2.0f;
|
||||
by = ((float)(to.y() - from.y()) / (float)minDimension) * 2.0f;
|
||||
|
||||
ay = -ay;
|
||||
by = -by;
|
||||
|
||||
Camera_RotateArcball(m_Cam, ax, ay, bx, by);
|
||||
}
|
||||
};
|
||||
|
||||
class FlycamWrapper : public CameraWrapper
|
||||
{
|
||||
public:
|
||||
FlycamWrapper() { m_Cam = Camera_InitFPSLook(); }
|
||||
~FlycamWrapper() { Camera_Shutdown(m_Cam); }
|
||||
Camera *camera() override { return m_Cam; }
|
||||
void Reset(FloatVector pos)
|
||||
{
|
||||
m_Position = pos;
|
||||
m_Rotation = FloatVector();
|
||||
|
||||
Camera_SetPosition(m_Cam, m_Position.x, m_Position.y, m_Position.z);
|
||||
Camera_SetFPSRotation(m_Cam, m_Rotation.x, m_Rotation.y, m_Rotation.z);
|
||||
}
|
||||
|
||||
bool Update(QRect size) override
|
||||
{
|
||||
FloatVector pos, fwd, right, up;
|
||||
Camera_GetBasis(m_Cam, &pos, &fwd, &right, &up);
|
||||
|
||||
float speed = currentSpeed();
|
||||
|
||||
int horizMove = move(CameraWrapper::Direction::Horiz);
|
||||
if(horizMove)
|
||||
{
|
||||
m_Position.x += right.x * speed * (float)horizMove;
|
||||
m_Position.y += right.y * speed * (float)horizMove;
|
||||
m_Position.z += right.z * speed * (float)horizMove;
|
||||
}
|
||||
|
||||
int vertMove = move(CameraWrapper::Direction::Vert);
|
||||
if(vertMove)
|
||||
{
|
||||
// this makes less intuitive sense, instead go 'absolute' up
|
||||
// m_Position.x += up.x * speed * (float)vertMove;
|
||||
// m_Position.y += up.y * speed * (float)vertMove;
|
||||
// m_Position.z += up.z * speed * (float)vertMove;
|
||||
|
||||
m_Position.y += speed * (float)vertMove;
|
||||
}
|
||||
|
||||
int fwdMove = move(CameraWrapper::Direction::Fwd);
|
||||
if(fwdMove)
|
||||
{
|
||||
m_Position.x += fwd.x * speed * (float)fwdMove;
|
||||
m_Position.y += fwd.y * speed * (float)fwdMove;
|
||||
m_Position.z += fwd.z * speed * (float)fwdMove;
|
||||
}
|
||||
|
||||
if(horizMove || vertMove || fwdMove)
|
||||
{
|
||||
Camera_SetPosition(m_Cam, m_Position.x, m_Position.y, m_Position.z);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void MouseWheel(QWheelEvent *e) override {}
|
||||
void MouseMove(QMouseEvent *e) override
|
||||
{
|
||||
if(dragStartPos().x() > 0 && e->buttons() == Qt::LeftButton)
|
||||
{
|
||||
m_Rotation.y -= (float)(e->pos().x() - dragStartPos().x()) / 300.0f;
|
||||
m_Rotation.x -= (float)(e->pos().y() - dragStartPos().y()) / 300.0f;
|
||||
|
||||
Camera_SetFPSRotation(m_Cam, m_Rotation.x, m_Rotation.y, m_Rotation.z);
|
||||
}
|
||||
|
||||
CameraWrapper::MouseMove(e);
|
||||
}
|
||||
|
||||
private:
|
||||
Camera *m_Cam;
|
||||
|
||||
FloatVector m_Position, m_Rotation;
|
||||
};
|
||||
|
||||
struct BufferData
|
||||
{
|
||||
BufferData()
|
||||
@@ -224,13 +494,68 @@ BufferViewer::BufferViewer(CaptureContext *ctx, QWidget *parent)
|
||||
|
||||
ui->vsinData->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
||||
ui->vsoutData->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
||||
ui->gsoutData->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
||||
|
||||
ui->formatSpecifier->setVisible(false);
|
||||
ui->cameraControlsGroup->setVisible(false);
|
||||
|
||||
ui->outputTabs->setWindowTitle(tr("Preview"));
|
||||
ui->dockarea->addToolWindow(ui->outputTabs, ToolWindowManager::EmptySpace);
|
||||
ui->dockarea->setToolWindowProperties(ui->outputTabs, ToolWindowManager::HideCloseButton);
|
||||
|
||||
ui->vsinData->setWindowTitle(tr("VS Input"));
|
||||
ui->dockarea->addToolWindow(
|
||||
ui->vsinData, ToolWindowManager::AreaReference(ToolWindowManager::TopOf,
|
||||
ui->dockarea->areaOf(ui->outputTabs), 0.5f));
|
||||
ui->dockarea->setToolWindowProperties(ui->vsinData, ToolWindowManager::HideCloseButton);
|
||||
|
||||
ui->vsoutData->setWindowTitle(tr("VS Output"));
|
||||
ui->dockarea->addToolWindow(
|
||||
ui->vsoutData, ToolWindowManager::AreaReference(ToolWindowManager::RightOf,
|
||||
ui->dockarea->areaOf(ui->vsinData), 0.5f));
|
||||
ui->dockarea->setToolWindowProperties(ui->vsoutData, ToolWindowManager::HideCloseButton);
|
||||
|
||||
ui->gsoutData->setWindowTitle(tr("GS/DS Output"));
|
||||
ui->dockarea->addToolWindow(
|
||||
ui->gsoutData, ToolWindowManager::AreaReference(ToolWindowManager::AddTo,
|
||||
ui->dockarea->areaOf(ui->vsoutData), 0.5f));
|
||||
ui->dockarea->setToolWindowProperties(ui->gsoutData, ToolWindowManager::HideCloseButton);
|
||||
|
||||
ToolWindowManager::raiseToolWindow(ui->vsoutData);
|
||||
|
||||
ui->dockarea->setAllowFloatingWindow(false);
|
||||
ui->dockarea->setRubberBandLineWidth(50);
|
||||
|
||||
QVBoxLayout *vertical = new QVBoxLayout(this);
|
||||
|
||||
vertical->setSpacing(3);
|
||||
vertical->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
vertical->addWidget(ui->meshToolbar);
|
||||
vertical->addWidget(ui->dockarea);
|
||||
|
||||
ui->controlType->addItems({tr("Arcball"), tr("WASD")});
|
||||
ui->controlType->adjustSize();
|
||||
|
||||
ui->drawRange->addItems({tr("Only this draw"), tr("Show previous instances"),
|
||||
tr("Show all instances"), tr("Show whole pass")});
|
||||
ui->drawRange->adjustSize();
|
||||
|
||||
ui->solidShading->addItems({tr("None"), tr("Solid Colour"), tr("Flat Shaded"), tr("Secondary")});
|
||||
ui->solidShading->adjustSize();
|
||||
|
||||
m_ModelVSIn = new BufferItemModel(ui->vsinData, this);
|
||||
m_ModelVSOut = new BufferItemModel(ui->vsoutData, this);
|
||||
// m_ModelGSOut = new BufferItemModel(ui->gsoutData, this);
|
||||
m_ModelGSOut = new BufferItemModel(ui->gsoutData, this);
|
||||
|
||||
m_Flycam = new FlycamWrapper();
|
||||
m_Arcball = new ArcballWrapper();
|
||||
m_CurrentCamera = m_Arcball;
|
||||
|
||||
m_Arcball->Reset(FloatVector(), 10.0f);
|
||||
m_Flycam->Reset(FloatVector());
|
||||
|
||||
m_ConfigVSIn.type = eMeshDataStage_VSIn;
|
||||
m_ConfigVSIn.cam = Camera_InitArcball();
|
||||
m_ConfigVSIn.ortho = false;
|
||||
m_ConfigVSIn.showPrevInstances = false;
|
||||
m_ConfigVSIn.showAllInstances = false;
|
||||
@@ -242,16 +567,10 @@ BufferViewer::BufferViewer(CaptureContext *ctx, QWidget *parent)
|
||||
memset(&m_ConfigVSIn.position, 0, sizeof(m_ConfigVSIn.position));
|
||||
memset(&m_ConfigVSIn.second, 0, sizeof(m_ConfigVSIn.second));
|
||||
|
||||
m_CamDist = 10.0f;
|
||||
|
||||
Camera_SetArcballDistance(m_ConfigVSIn.cam, m_CamDist);
|
||||
|
||||
m_ConfigVSIn.position.showAlpha = false;
|
||||
|
||||
m_ConfigVSOut = m_ConfigVSIn;
|
||||
|
||||
m_ConfigVSOut.cam = Camera_InitFPSLook();
|
||||
|
||||
m_curConfig = &m_ConfigVSIn;
|
||||
ui->outputTabs->setCurrentIndex(0);
|
||||
|
||||
@@ -260,6 +579,12 @@ BufferViewer::BufferViewer(CaptureContext *ctx, QWidget *parent)
|
||||
QObject::connect(ui->vsoutData->selectionModel(), &QItemSelectionModel::selectionChanged, this,
|
||||
&BufferViewer::data_selected);
|
||||
|
||||
QTimer *renderTimer = new QTimer(this);
|
||||
QObject::connect(renderTimer, &QTimer::timeout, this, &BufferViewer::render_timer);
|
||||
renderTimer->setSingleShot(false);
|
||||
renderTimer->setInterval(1000);
|
||||
renderTimer->start();
|
||||
|
||||
Reset();
|
||||
}
|
||||
|
||||
@@ -270,8 +595,8 @@ BufferViewer::~BufferViewer()
|
||||
for(auto vb : m_ModelVSIn->buffers)
|
||||
delete[] vb.data;
|
||||
|
||||
Camera_Shutdown(m_ConfigVSIn.cam);
|
||||
Camera_Shutdown(m_ConfigVSOut.cam);
|
||||
delete m_Arcball;
|
||||
delete m_Flycam;
|
||||
|
||||
m_Ctx->windowClosed(this);
|
||||
m_Ctx->RemoveLogViewer(this);
|
||||
@@ -308,7 +633,7 @@ void BufferViewer::OnEventChanged(uint32_t eventID)
|
||||
{
|
||||
m_ModelVSIn->beginReset();
|
||||
m_ModelVSOut->beginReset();
|
||||
// m_ModelGSOut->beginReset();
|
||||
m_ModelGSOut->beginReset();
|
||||
|
||||
// this doesn't account for sign characters
|
||||
m_ModelVSIn->componentWidth = 0;
|
||||
@@ -368,11 +693,6 @@ void BufferViewer::OnEventChanged(uint32_t eventID)
|
||||
uint64_t ioffset = 0;
|
||||
m_Ctx->CurPipelineState.GetIBuffer(ib, ioffset);
|
||||
|
||||
m_CamDist = 10.0f;
|
||||
|
||||
Camera_ResetArcball(m_ConfigVSIn.cam);
|
||||
Camera_SetArcballDistance(m_ConfigVSIn.cam, m_CamDist);
|
||||
|
||||
m_ConfigVSIn.fov = 90.0f;
|
||||
m_ConfigVSIn.aspect =
|
||||
m_Ctx->CurPipelineState.GetViewport(0).width / m_Ctx->CurPipelineState.GetViewport(0).height;
|
||||
@@ -482,11 +802,6 @@ void BufferViewer::OnEventChanged(uint32_t eventID)
|
||||
m_ConfigVSOut.aspect = m_ConfigVSIn.aspect;
|
||||
m_ConfigVSOut.highlightVert = m_ConfigVSIn.highlightVert;
|
||||
|
||||
Camera_SetPosition(m_ConfigVSOut.cam, 0.0f, 0.0f, 0.0f);
|
||||
Camera_SetFPSRotation(m_ConfigVSOut.cam, 0.0f, 0.0f, 0.0f);
|
||||
m_pos = FloatVector();
|
||||
m_rot = FloatVector();
|
||||
|
||||
m_Ctx->Renderer()->AsyncInvoke([this, draw, vbs, ib, ioffset](IReplayRenderer *r) {
|
||||
|
||||
rdctype::array<byte> idata;
|
||||
@@ -650,16 +965,16 @@ void BufferViewer::OnEventChanged(uint32_t eventID)
|
||||
GUIInvoke::call([this] {
|
||||
m_ModelVSIn->endReset();
|
||||
m_ModelVSOut->endReset();
|
||||
ui->vsinData->resizeColumnsToContents();
|
||||
ui->vsoutData->resizeColumnsToContents();
|
||||
// ui->vsinData->resizeColumnsToContents();
|
||||
// ui->vsoutData->resizeColumnsToContents();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void BufferViewer::on_outputTabs_currentChanged(int index)
|
||||
{
|
||||
ui->render->parentWidget()->layout()->removeWidget(ui->render);
|
||||
ui->outputTabs->widget(index)->layout()->addWidget(ui->render);
|
||||
ui->renderContainer->parentWidget()->layout()->removeWidget(ui->renderContainer);
|
||||
ui->outputTabs->widget(index)->layout()->addWidget(ui->renderContainer);
|
||||
|
||||
if(index == 0)
|
||||
m_curConfig = &m_ConfigVSIn;
|
||||
@@ -674,55 +989,11 @@ void BufferViewer::render_mouseMove(QMouseEvent *e)
|
||||
if(!m_Ctx->LogLoaded())
|
||||
return;
|
||||
|
||||
QPoint curpos = e->pos();
|
||||
|
||||
if(e->buttons() & Qt::LeftButton)
|
||||
{
|
||||
if(m_PrevPos != QPoint())
|
||||
{
|
||||
if(m_curConfig == &m_ConfigVSIn)
|
||||
{
|
||||
float ax = ((float)m_PrevPos.x() / (float)ui->render->rect().width()) * 2.0f - 1.0f;
|
||||
float ay = ((float)m_PrevPos.y() / (float)ui->render->rect().height()) * 2.0f - 1.0f;
|
||||
float bx = ((float)curpos.x() / (float)ui->render->rect().width()) * 2.0f - 1.0f;
|
||||
float by = ((float)curpos.y() / (float)ui->render->rect().height()) * 2.0f - 1.0f;
|
||||
|
||||
// this isn't a 'true arcball' but it handles extreme aspect ratios
|
||||
// better. We basically 'centre' around the from point always being
|
||||
// 0,0 (straight out of the screen) as if you're always dragging
|
||||
// the arcball from the middle, and just use the relative movement
|
||||
int minDimension = qMin(ui->render->rect().width(), ui->render->rect().height());
|
||||
|
||||
ax = ay = 0;
|
||||
bx = ((float)(curpos.x() - m_PrevPos.x()) / (float)minDimension) * 2.0f;
|
||||
by = ((float)(curpos.y() - m_PrevPos.y()) / (float)minDimension) * 2.0f;
|
||||
|
||||
ay = -ay;
|
||||
by = -by;
|
||||
|
||||
Camera_RotateArcball(m_curConfig->cam, ax, ay, bx, by);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_rot.y -= (float)(curpos.x() - m_PrevPos.x()) / 300.0f;
|
||||
m_rot.x -= (float)(curpos.y() - m_PrevPos.y()) / 300.0f;
|
||||
|
||||
Camera_SetFPSRotation(m_curConfig->cam, m_rot.x, m_rot.y, m_rot.z);
|
||||
}
|
||||
}
|
||||
|
||||
m_PrevPos = curpos;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PrevPos = QPoint();
|
||||
}
|
||||
if(m_CurrentCamera)
|
||||
m_CurrentCamera->MouseMove(e);
|
||||
|
||||
if(e->buttons() & Qt::RightButton)
|
||||
{
|
||||
render_clicked(e);
|
||||
return;
|
||||
}
|
||||
|
||||
INVOKE_MEMFN(RT_UpdateAndDisplay);
|
||||
}
|
||||
@@ -732,8 +1003,6 @@ void BufferViewer::render_clicked(QMouseEvent *e)
|
||||
if(!m_Ctx->LogLoaded())
|
||||
return;
|
||||
|
||||
ui->render->setFocus();
|
||||
|
||||
QPoint curpos = e->pos();
|
||||
|
||||
if((e->buttons() & Qt::RightButton) && m_Output)
|
||||
@@ -765,62 +1034,43 @@ void BufferViewer::render_clicked(QMouseEvent *e)
|
||||
});
|
||||
}
|
||||
|
||||
if(m_CurrentCamera)
|
||||
m_CurrentCamera->MouseClick(e);
|
||||
|
||||
ui->render->setFocus();
|
||||
|
||||
INVOKE_MEMFN(RT_UpdateAndDisplay);
|
||||
}
|
||||
|
||||
void BufferViewer::render_mouseWheel(QWheelEvent *e)
|
||||
{
|
||||
float mod = (1.0f - e->delta() / 2500.0f);
|
||||
|
||||
m_CamDist = qMax(1e-6f, m_CamDist * mod);
|
||||
|
||||
Camera_SetArcballDistance(m_ConfigVSIn.cam, m_CamDist);
|
||||
if(m_CurrentCamera)
|
||||
m_CurrentCamera->MouseWheel(e);
|
||||
|
||||
INVOKE_MEMFN(RT_UpdateAndDisplay);
|
||||
}
|
||||
|
||||
void BufferViewer::render_keyPress(QKeyEvent *e)
|
||||
{
|
||||
if(m_curConfig != &m_ConfigVSIn)
|
||||
{
|
||||
FloatVector pos, fwd, right, up;
|
||||
Camera_GetBasis(m_curConfig->cam, &pos, &fwd, &right, &up);
|
||||
m_CurrentCamera->KeyDown(e);
|
||||
}
|
||||
|
||||
if(e->key() == Qt::Key_W)
|
||||
{
|
||||
m_pos.x += fwd.x * 0.1f;
|
||||
m_pos.y += fwd.y * 0.1f;
|
||||
m_pos.z += fwd.z * 0.1f;
|
||||
}
|
||||
if(e->key() == Qt::Key_S)
|
||||
{
|
||||
m_pos.x -= fwd.x * 0.1f;
|
||||
m_pos.y -= fwd.y * 0.1f;
|
||||
m_pos.z -= fwd.z * 0.1f;
|
||||
}
|
||||
if(e->key() == Qt::Key_A)
|
||||
{
|
||||
m_pos.x -= right.x * 0.1f;
|
||||
m_pos.y -= right.y * 0.1f;
|
||||
m_pos.z -= right.z * 0.1f;
|
||||
}
|
||||
if(e->key() == Qt::Key_D)
|
||||
{
|
||||
m_pos.x += right.x * 0.1f;
|
||||
m_pos.y += right.y * 0.1f;
|
||||
m_pos.z += right.z * 0.1f;
|
||||
}
|
||||
void BufferViewer::render_keyRelease(QKeyEvent *e)
|
||||
{
|
||||
m_CurrentCamera->KeyUp(e);
|
||||
}
|
||||
|
||||
Camera_SetPosition(m_curConfig->cam, m_pos.x, m_pos.y, m_pos.z);
|
||||
}
|
||||
|
||||
INVOKE_MEMFN(RT_UpdateAndDisplay);
|
||||
void BufferViewer::render_timer()
|
||||
{
|
||||
if(m_CurrentCamera && m_CurrentCamera->Update(ui->render->rect()))
|
||||
INVOKE_MEMFN(RT_UpdateAndDisplay);
|
||||
}
|
||||
|
||||
void BufferViewer::RT_UpdateAndDisplay(IReplayRenderer *)
|
||||
{
|
||||
if(m_Output)
|
||||
{
|
||||
m_curConfig->cam = m_CurrentCamera->camera();
|
||||
m_Output->SetMeshDisplay(*m_curConfig);
|
||||
m_Output->Display();
|
||||
}
|
||||
@@ -854,12 +1104,14 @@ void BufferViewer::Reset()
|
||||
render->setSizePolicy(ui->render->sizePolicy());
|
||||
delete ui->render;
|
||||
ui->render = render;
|
||||
ui->outputTabs->currentWidget()->layout()->addWidget(ui->render);
|
||||
ui->renderContainerGridLayout->addWidget(ui->render, 1, 1, 1, 1);
|
||||
}
|
||||
|
||||
QObject::connect(ui->render, &CustomPaintWidget::mouseMove, this, &BufferViewer::render_mouseMove);
|
||||
QObject::connect(ui->render, &CustomPaintWidget::clicked, this, &BufferViewer::render_clicked);
|
||||
QObject::connect(ui->render, &CustomPaintWidget::keyPress, this, &BufferViewer::render_keyPress);
|
||||
QObject::connect(ui->render, &CustomPaintWidget::keyRelease, this,
|
||||
&BufferViewer::render_keyRelease);
|
||||
QObject::connect(ui->render, &CustomPaintWidget::mouseWheel, this,
|
||||
&BufferViewer::render_mouseWheel);
|
||||
|
||||
@@ -882,3 +1134,8 @@ void BufferViewer::data_selected(const QItemSelection &selected, const QItemSele
|
||||
INVOKE_MEMFN(RT_UpdateAndDisplay);
|
||||
}
|
||||
}
|
||||
|
||||
void BufferViewer::on_toggleControls_toggled(bool checked)
|
||||
{
|
||||
ui->cameraControlsGroup->setVisible(checked);
|
||||
}
|
||||
|
||||
@@ -33,6 +33,9 @@ class BufferViewer;
|
||||
}
|
||||
|
||||
class BufferItemModel;
|
||||
class CameraWrapper;
|
||||
class ArcballWrapper;
|
||||
class FlycamWrapper;
|
||||
|
||||
class BufferViewer : public QFrame, public ILogViewerForm
|
||||
{
|
||||
@@ -50,12 +53,15 @@ public:
|
||||
private slots:
|
||||
// automatic slots
|
||||
void on_outputTabs_currentChanged(int index);
|
||||
void on_toggleControls_toggled(bool checked);
|
||||
|
||||
// manual slots
|
||||
void render_mouseMove(QMouseEvent *e);
|
||||
void render_clicked(QMouseEvent *e);
|
||||
void render_mouseWheel(QWheelEvent *e);
|
||||
void render_keyPress(QKeyEvent *e);
|
||||
void render_keyRelease(QKeyEvent *e);
|
||||
void render_timer();
|
||||
void data_selected(const QItemSelection &selected, const QItemSelection &deselected);
|
||||
|
||||
private:
|
||||
@@ -70,13 +76,13 @@ private:
|
||||
MeshDisplay m_ConfigVSOut;
|
||||
MeshDisplay *m_curConfig;
|
||||
|
||||
QPoint m_PrevPos;
|
||||
FloatVector m_pos, m_rot;
|
||||
float m_CamDist;
|
||||
CameraWrapper *m_CurrentCamera = NULL;
|
||||
ArcballWrapper *m_Arcball = NULL;
|
||||
FlycamWrapper *m_Flycam = NULL;
|
||||
|
||||
BufferItemModel *m_ModelVSIn;
|
||||
BufferItemModel *m_ModelVSOut;
|
||||
// BufferItemModel *m_ModelGSOut;
|
||||
BufferItemModel *m_ModelGSOut;
|
||||
|
||||
void Reset();
|
||||
};
|
||||
|
||||
+759
-111
@@ -6,125 +6,760 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>612</width>
|
||||
<height>429</height>
|
||||
<width>761</width>
|
||||
<height>537</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Buffer Viewer</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="RDTableView" name="vsinData">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragDropOverwriteMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="cornerButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderHighlightSections">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="RDTableView" name="vsoutData">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragDropOverwriteMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="cornerButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderHighlightSections">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QTabWidget" name="outputTabs">
|
||||
<property name="currentIndex">
|
||||
<widget class="RDTableView" name="vsinData">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>60</x>
|
||||
<y>50</y>
|
||||
<width>194</width>
|
||||
<height>91</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragDropOverwriteMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="cornerButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderHighlightSections">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="RDTableView" name="vsoutData">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>280</x>
|
||||
<y>50</y>
|
||||
<width>194</width>
|
||||
<height>101</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragDropOverwriteMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="cornerButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderHighlightSections">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QTabWidget" name="outputTabs">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>220</y>
|
||||
<width>666</width>
|
||||
<height>312</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="vsinTab">
|
||||
<attribute name="title">
|
||||
<string>VS In</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="vsinTab">
|
||||
<attribute name="title">
|
||||
<string>VS In</string>
|
||||
</attribute>
|
||||
<layout class="QHBoxLayout" name="vsinLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="CustomPaintWidget" name="render" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QFrame" name="renderContainer">
|
||||
<layout class="QGridLayout" name="renderContainerGridLayout">
|
||||
<property name="leftMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QFrame" name="controlsToolbar">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>28</height>
|
||||
</size>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toggleControls">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../resources.qrc">
|
||||
<normaloff>:/Resources/cog.png</normaloff>:/Resources/cog.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="resetCamera">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../resources.qrc">
|
||||
<normaloff>:/Resources/arrow_undo.png</normaloff>:/Resources/arrow_undo.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="autofitCamera">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../resources.qrc">
|
||||
<normaloff>:/Resources/wand.png</normaloff>:/Resources/wand.png</iconset>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="controlType"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="drawRange"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="instanceLabel_2">
|
||||
<property name="text">
|
||||
<string>Solid Shading</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="solidShading"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="wireframeRender">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Wireframe</string>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextOnly</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="highlightVerts">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Highlight Vertices</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../resources.qrc">
|
||||
<normaloff>:/Resources/asterisk_orange.png</normaloff>:/Resources/asterisk_orange.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="cameraControlsGroup">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Camera Controls</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="6" column="1">
|
||||
<widget class="QDoubleSpinBox" name="farGuess"/>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QDoubleSpinBox" name="nearGuess"/>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QDoubleSpinBox" name="aspectGuess"/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="farGuessLabel">
|
||||
<property name="text">
|
||||
<string>Far Plane:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QDoubleSpinBox" name="camSpeed">
|
||||
<property name="decimals">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000100000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.000100000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="nearGuessLabel">
|
||||
<property name="text">
|
||||
<string>Near Plane:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="aspectGuessLabel">
|
||||
<property name="text">
|
||||
<string>Aspect Ratio:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="fovGuessLabel">
|
||||
<property name="text">
|
||||
<string>Persp. FOV:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="camSpeedLabel">
|
||||
<property name="text">
|
||||
<string>Speed:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="matrixType">
|
||||
<property name="maxVisibleItems">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="maxCount">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="insertPolicy">
|
||||
<enum>QComboBox::NoInsert</enum>
|
||||
</property>
|
||||
<property name="frame">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QLabel" name="guessInstructions">
|
||||
<property name="text">
|
||||
<string>Manually set auto-guessed values
|
||||
Blank to use automatic value</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="fovGuess">
|
||||
<property name="inputMask">
|
||||
<string extracomment="Positive integer (< 180)">D00</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="matrixTypeLabel">
|
||||
<property name="text">
|
||||
<string>Matrix Type:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="CustomPaintWidget" name="render" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="vsoutTab">
|
||||
<attribute name="title">
|
||||
<string>VS Out</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="gsoutTab">
|
||||
<attribute name="title">
|
||||
<string>GS Out</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="RDTableView" name="gsoutData">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>500</x>
|
||||
<y>50</y>
|
||||
<width>194</width>
|
||||
<height>81</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="showDropIndicator" stdset="0">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="dragDropOverwriteMode">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollMode">
|
||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||
</property>
|
||||
<property name="cornerButtonEnabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="horizontalHeaderHighlightSections">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<attribute name="verticalHeaderVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QFrame" name="meshToolbar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>10</y>
|
||||
<width>435</width>
|
||||
<height>28</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>28</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="zoomLabel">
|
||||
<property name="text">
|
||||
<string>Controls</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QWidget" name="vsoutTab">
|
||||
<attribute name="title">
|
||||
<string>VS Out</string>
|
||||
</attribute>
|
||||
<layout class="QHBoxLayout" name="vsoutLayout">
|
||||
<property name="leftMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="exportDrop">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../resources.qrc">
|
||||
<normaloff>:/Resources/save.png</normaloff>:/Resources/save.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::MenuButtonPopup</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="syncViews">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Sync Views</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../resources.qrc">
|
||||
<normaloff>:/Resources/arrow_join.png</normaloff>:/Resources/arrow_join.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="rowOffsetLabel">
|
||||
<property name="text">
|
||||
<string>Row Offset</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="rowOffset">
|
||||
<property name="prefix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>1000000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="instanceLabel">
|
||||
<property name="text">
|
||||
<string>Instance</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="instance">
|
||||
<property name="maximum">
|
||||
<number>100000</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="ToolWindowManager" name="dockarea" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>50</y>
|
||||
<width>119</width>
|
||||
<height>100</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="BufferFormatSpecifier" name="formatSpecifier" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>139</x>
|
||||
<y>160</y>
|
||||
<width>521</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
@@ -137,7 +772,20 @@
|
||||
<extends>QTableView</extends>
|
||||
<header>Widgets/Extended/RDTableView.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>ToolWindowManager</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ToolWindowManager.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>BufferFormatSpecifier</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>Widgets/BufferFormatSpecifier.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<resources>
|
||||
<include location="../resources.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
Reference in New Issue
Block a user