Skip to content

Commit

Permalink
Add option to draw grid in RenderPreview (#4572).
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Jul 16, 2017
1 parent 1bc034f commit 510c6da
Show file tree
Hide file tree
Showing 5 changed files with 204 additions and 7 deletions.
112 changes: 109 additions & 3 deletions install/ui/renderpreview.fbp
Expand Up @@ -338,7 +338,7 @@
<property name="separation">5</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTB_HORIZONTAL|wxTB_HORZ_TEXT</property>
<property name="style">wxTB_HORIZONTAL|wxTB_HORZ_TEXT|wxTB_NODIVIDER</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
Expand Down Expand Up @@ -385,7 +385,7 @@
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmapsize"></property>
<property name="bitmapsize">20,20</property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
Expand Down Expand Up @@ -423,7 +423,7 @@
<property name="separation">5</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTB_HORIZONTAL</property>
<property name="style">wxTB_HORIZONTAL|wxTB_NODIVIDER</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
Expand Down Expand Up @@ -497,6 +497,112 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">3</property>
<property name="flag">wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP</property>
<property name="proportion">0</property>
<object class="wxToolBar" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmapsize">20,20</property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="margins"></property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">RenderPreviewUtilToolbar</property>
<property name="packing">1</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="separation">5</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxTB_HORIZONTAL|wxTB_NODIVIDER</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="tool" expanded="1">
<property name="bitmap">Load From Art Provider; darkradiant:grid_toggle.png; wxART_TOOLBAR</property>
<property name="context_menu">0</property>
<property name="id">wxID_ANY</property>
<property name="kind">wxITEM_CHECK</property>
<property name="label">gridButton</property>
<property name="name">gridButton</property>
<property name="permission">protected</property>
<property name="statusbar"></property>
<property name="tooltip">Toggle a 16 unit wide Grid</property>
<event name="OnAuiToolBarBeginDrag"></event>
<event name="OnAuiToolBarMiddleClick"></event>
<event name="OnAuiToolBarOverflowClick"></event>
<event name="OnAuiToolBarRightClick"></event>
<event name="OnAuiToolBarToolDropDown"></event>
<event name="OnMenuSelection"></event>
<event name="OnToolClicked"></event>
<event name="OnToolEnter"></event>
<event name="OnToolRClicked"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
</object>
</object>
Expand Down
25 changes: 22 additions & 3 deletions install/ui/renderpreview.xrc
Expand Up @@ -59,7 +59,7 @@
<flag>wxEXPAND</flag>
<border>5</border>
<object class="wxToolBar" name="RenderPreviewFilterToolbar">
<style>wxTB_HORIZONTAL|wxTB_HORZ_TEXT</style>
<style>wxTB_HORIZONTAL|wxTB_HORZ_TEXT|wxTB_NODIVIDER</style>
<bitmapsize></bitmapsize>
<margins></margins>
<packing>1</packing>
Expand All @@ -71,8 +71,8 @@
<flag>wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP</flag>
<border>3</border>
<object class="wxToolBar" name="RenderPreviewRenderModeToolbar">
<style>wxTB_HORIZONTAL</style>
<bitmapsize></bitmapsize>
<style>wxTB_HORIZONTAL|wxTB_NODIVIDER</style>
<bitmapsize>20,20</bitmapsize>
<margins></margins>
<packing>1</packing>
<separation>5</separation>
Expand All @@ -92,6 +92,25 @@
</object>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxBOTTOM|wxEXPAND|wxRIGHT|wxTOP</flag>
<border>3</border>
<object class="wxToolBar" name="RenderPreviewUtilToolbar">
<style>wxTB_HORIZONTAL|wxTB_NODIVIDER</style>
<bitmapsize>20,20</bitmapsize>
<margins></margins>
<packing>1</packing>
<separation>5</separation>
<object class="tool" name="gridButton">
<label>gridButton</label>
<tooltip>Toggle a 16 unit wide Grid</tooltip>
<longhelp></longhelp>
<bitmap stock_id="darkradiant:grid_toggle.png" stock_client="wxART_TOOLBAR">undefined.png</bitmap>
<toggle>1</toggle>
</object>
</object>
</object>
</object>
</object>
</object>
Expand Down
3 changes: 3 additions & 0 deletions install/user.xml
Expand Up @@ -191,6 +191,9 @@
<window xPosition="0" yPosition="0" width="1000" height="830" />
<splitPos position="500" />
</particleEditor>
<renderPreview>
<showGrid value="1" />
</renderPreview>
<camera>
<toggleFreeMove value="1" />
<enableCubicClipping value="1" />
Expand Down
67 changes: 66 additions & 1 deletion libs/wxutil/preview/RenderPreview.cpp
Expand Up @@ -10,6 +10,7 @@

#include "math/AABB.h"
#include "util/ScopedBoolLock.h"
#include "registry/registry.h"

#include "../GLWidget.h"
#include <wx/sizer.h>
Expand All @@ -30,12 +31,15 @@ namespace
const std::string BOTTOM_BOX("bottomBox");
const std::string PAUSE_BUTTON("pauseButton");
const std::string STOP_BUTTON("stopButton");

const std::string RKEY_RENDERPREVIEW_SHOWGRID("ui/renderPreview/showGrid");
}

RenderPreview::RenderPreview(wxWindow* parent, bool enableAnimation) :
_mainPanel(loadNamedPanel(parent, "RenderPreviewPanel")),
_glWidget(new wxutil::GLWidget(_mainPanel, std::bind(&RenderPreview::drawPreview, this), "RenderPreview")),
_initialised(false),
_renderGrid(registry::getValue<bool>(RKEY_RENDERPREVIEW_SHOWGRID)),
_renderSystem(GlobalRenderSystemFactory().createRenderSystem()),
_sceneWalker(_renderer, _volumeTest),
_viewOrigin(0, 0, 0),
Expand Down Expand Up @@ -116,6 +120,13 @@ void RenderPreview::setupToolbars(bool enableAnimation)
wxEVT_TOOL, wxCommandEventHandler(RenderPreview::onRenderModeChanged), NULL, this);

updateActiveRenderModeButton();

wxToolBar* utilToolbar = findNamedObject<wxToolBar>(_mainPanel, "RenderPreviewUtilToolbar");

utilToolbar->Connect(getToolBarToolByLabel(utilToolbar, "gridButton")->GetId(),
wxEVT_TOOL, wxCommandEventHandler(RenderPreview::onGridButtonClick), NULL, this);

utilToolbar->ToggleTool(getToolBarToolByLabel(utilToolbar, "gridButton")->GetId(), _renderGrid);
}

void RenderPreview::connectToolbarSignals()
Expand Down Expand Up @@ -449,7 +460,19 @@ void RenderPreview::drawPreview()
return;
}

// Front-end render phase, collect OpenGLRenderable objects from the scene
// Set the projection and modelview matrices
glMatrixMode(GL_PROJECTION);
glLoadMatrixd(projection);

glMatrixMode(GL_MODELVIEW);
glLoadMatrixd(_volumeTest.GetModelview());

if (_renderGrid)
{
drawGrid();
}

// Front-end render phase, collect OpenGLRenderable objects from the scene
getScene()->foreachVisibleNodeInVolume(_volumeTest, _sceneWalker);

RenderStateFlags flags = getRenderFlagsFill();
Expand Down Expand Up @@ -616,6 +639,15 @@ void RenderPreview::onRenderModeChanged(wxCommandEvent& ev)
}
}

void RenderPreview::onGridButtonClick(wxCommandEvent& ev)
{
_renderGrid = (ev.GetInt() != 0);

registry::setValue<bool>(RKEY_RENDERPREVIEW_SHOWGRID, _renderGrid);

queueDraw();
}

void RenderPreview::onStartPlaybackClick(wxCommandEvent& ev)
{
startPlayback();
Expand Down Expand Up @@ -682,6 +714,39 @@ void RenderPreview::onSizeAllocate(wxSizeEvent& ev)
_previewHeight = ev.GetSize().GetHeight();
}

void RenderPreview::drawGrid()
{
static float GRID_MAX_DIM = 512.0f;
static float GRID_STEP = 16.0f;

glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_1D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND);

glLineWidth(1);
glColor3f(0.7f, 0.7f, 0.7f);

glBegin(GL_LINES);

for (float x = -GRID_MAX_DIM; x < GRID_MAX_DIM; x += GRID_STEP)
{
Vector3 start(x, -GRID_MAX_DIM, 0);
Vector3 end(x, GRID_MAX_DIM, 0);

Vector3 start2(GRID_MAX_DIM, x, 0);
Vector3 end2(-GRID_MAX_DIM, x, 0);

glVertex2dv(start);
glVertex2dv(end);

glVertex2dv(start2);
glVertex2dv(end2);
}

glEnd();
}

void RenderPreview::drawTime()
{
glMatrixMode(GL_PROJECTION);
Expand Down
4 changes: 4 additions & 0 deletions libs/wxutil/preview/RenderPreview.h
Expand Up @@ -58,8 +58,10 @@ class RenderPreview :
void onSizeAllocate(wxSizeEvent& ev);
void filtersChanged();
void onRenderModeChanged(wxCommandEvent& ev);
void onGridButtonClick(wxCommandEvent& ev);

void drawTime();
void drawGrid();

// Called each frame by wxTimer
void _onFrame(wxTimerEvent& ev);
Expand All @@ -83,6 +85,8 @@ class RenderPreview :

FreezePointer _freezePointer;

bool _renderGrid;

protected:
// The backend rendersystem instance
RenderSystemPtr _renderSystem;
Expand Down

0 comments on commit 510c6da

Please sign in to comment.