mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-25 11:45:53 +01:00
388 lines
14 KiB
C++
388 lines
14 KiB
C++
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
the Free Software Foundation
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
|
|
// DlgRenderingPreferences.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "DlgRenderingPreferences.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef new
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDlgRenderingPreferences dialog
|
|
|
|
|
|
CDlgRenderingPreferences::CDlgRenderingPreferences( INDEX iBuffer, CWnd* pParent /*=NULL*/)
|
|
: CDialog(CDlgRenderingPreferences::IDD, pParent)
|
|
{
|
|
m_iBuffer = iBuffer;
|
|
//{{AFX_DATA_INIT(CDlgRenderingPreferences)
|
|
m_bBoundingBox = FALSE;
|
|
m_bHidenLines = FALSE;
|
|
m_bShadows = FALSE;
|
|
m_bWireFrame = FALSE;
|
|
m_fRenderingRange = 0.0f;
|
|
m_bAutoRenderingRange = FALSE;
|
|
m_bRenderEditorModels = FALSE;
|
|
m_bUseTextureForBcg = FALSE;
|
|
m_bRenderFieldBrushes = FALSE;
|
|
m_bRenderFog = FALSE;
|
|
m_bRenderHaze = FALSE;
|
|
m_bRenderMirrors = FALSE;
|
|
m_strBcgTexture = _T("");
|
|
m_fFarClipPlane = 0.0f;
|
|
m_bApplyFarClipInIsometricProjection = FALSE;
|
|
//}}AFX_DATA_INIT
|
|
m_VertexColors.SetPickerType( CColoredButton::PT_MFC);
|
|
m_EdgesColors.SetPickerType( CColoredButton::PT_MFC);
|
|
m_PolygonColors.SetPickerType( CColoredButton::PT_MFC);
|
|
m_PaperColor.SetPickerType( CColoredButton::PT_MFC);
|
|
m_SelectionColor.SetPickerType( CColoredButton::PT_MFC);
|
|
m_GridColor.SetPickerType( CColoredButton::PT_MFC);
|
|
}
|
|
|
|
|
|
void CDlgRenderingPreferences::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
|
|
CModelRenderPrefs &pmrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_mrpModelRenderPrefs;
|
|
CWorldRenderPrefs &pwrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_wrpWorldRenderPrefs;
|
|
// if dialog is recieving data
|
|
if( (pDX->m_bSaveAndValidate == FALSE) && IsWindow( m_hWnd) &&
|
|
IsWindow( m_VertexFillType.m_hWnd) &&
|
|
IsWindow( m_EdgesFillType.m_hWnd) &&
|
|
IsWindow( m_PolygonFillType.m_hWnd) &&
|
|
IsWindow( m_TextureFillType.m_hWnd) )
|
|
{
|
|
// world rendering preferences
|
|
m_VertexColors.SetColor( pwrpPrefs.GetVerticesInkColor());
|
|
m_EdgesColors.SetColor( pwrpPrefs.GetEdgesInkColor());
|
|
m_PolygonColors.SetColor( pwrpPrefs.GetPolygonsInkColor());
|
|
m_PaperColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_PaperColor);
|
|
m_SelectionColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_SelectionColor);
|
|
m_GridColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_GridColor);
|
|
m_fFarClipPlane=pwrpPrefs.wrp_fFarClipPlane;
|
|
m_bApplyFarClipInIsometricProjection=pwrpPrefs.wrp_bApplyFarClipPlaneInIsometricProjection;
|
|
|
|
m_strBcgTexture = CTFileName(CTString( theApp.m_vpViewPrefs[ m_iBuffer].m_achrBcgPicture)).FileName();
|
|
|
|
// get render editor models flag
|
|
m_bRenderEditorModels = pwrpPrefs.IsEditorModelsOn();
|
|
// get render field brushes flag
|
|
m_bRenderFieldBrushes = pwrpPrefs.IsFieldBrushesOn();
|
|
// get use texture for background flag
|
|
m_bUseTextureForBcg = pwrpPrefs.IsBackgroundTextureOn();
|
|
|
|
m_bRenderMirrors = pwrpPrefs.IsMirrorsOn();
|
|
m_bRenderFog = pwrpPrefs.IsFogOn();
|
|
m_bRenderHaze = pwrpPrefs.IsHazeOn();
|
|
|
|
// get auto rendering range flag
|
|
m_bAutoRenderingRange = theApp.m_vpViewPrefs[ m_iBuffer].m_bAutoRenderingRange;
|
|
// get rendering range
|
|
m_fRenderingRange = theApp.m_vpViewPrefs[ m_iBuffer].m_fRenderingRange;
|
|
// enable/disable edit render range control depending on auto range flag
|
|
UpdateEditRangeControl();
|
|
|
|
// fill values for vertice's combo box
|
|
m_VertexFillType.ResetContent();
|
|
m_VertexFillType.AddString( L"No vertices");
|
|
m_VertexFillType.AddString( L"Vertices ink");
|
|
m_VertexFillType.AddString( L"Polygon color");
|
|
m_VertexFillType.AddString( L"Sector color");
|
|
// fill values for edges's combo box
|
|
m_EdgesFillType.ResetContent();
|
|
m_EdgesFillType.AddString( L"No edges");
|
|
m_EdgesFillType.AddString( L"Edges ink");
|
|
m_EdgesFillType.AddString( L"Polygon color");
|
|
m_EdgesFillType.AddString( L"Sector color");
|
|
// fill values for polygons's combo box
|
|
m_PolygonFillType.ResetContent();
|
|
m_PolygonFillType.AddString( L"No polygons");
|
|
m_PolygonFillType.AddString( L"Polygons ink");
|
|
m_PolygonFillType.AddString( L"Polygon color");
|
|
m_PolygonFillType.AddString( L"Sector color");
|
|
m_PolygonFillType.AddString( L"Texture");
|
|
// fill values for model's texture combo
|
|
m_TextureFillType.ResetContent();
|
|
m_TextureFillType.AddString( L"No fill");
|
|
m_TextureFillType.AddString( L"White color");
|
|
m_TextureFillType.AddString( L"Surface colors");
|
|
m_TextureFillType.AddString( L"On colors");
|
|
m_TextureFillType.AddString( L"Off colors");
|
|
m_TextureFillType.AddString( L"Texture");
|
|
// fill values for flare FX combo
|
|
m_comboFlareFX.ResetContent();
|
|
m_comboFlareFX.AddString( L"None");
|
|
m_comboFlareFX.AddString( L"Single flare");
|
|
m_comboFlareFX.AddString( L"Reflections");
|
|
m_comboFlareFX.AddString( L"Reflections and glare");
|
|
|
|
INDEX iFillType;
|
|
// set current fill type to vertices combo box
|
|
iFillType = pwrpPrefs.GetVerticesFillType();
|
|
m_VertexFillType.SetCurSel( iFillType);
|
|
// set current fill type to edges combo box
|
|
iFillType = pwrpPrefs.GetEdgesFillType();
|
|
m_EdgesFillType.SetCurSel( iFillType);
|
|
// set current fill type to polygons combo box
|
|
iFillType = pwrpPrefs.GetPolygonsFillType();
|
|
m_PolygonFillType.SetCurSel( iFillType);
|
|
// set currently selected modeler's texture rendering type
|
|
ULONG rtRenderType = pmrpPrefs.GetRenderType();
|
|
iFillType = 0;
|
|
if( (rtRenderType & RT_NO_POLYGON_FILL) != 0) iFillType = 0;
|
|
else if( (rtRenderType & RT_WHITE_TEXTURE) != 0) iFillType = 1;
|
|
else if( (rtRenderType & RT_SURFACE_COLORS) != 0) iFillType = 2;
|
|
else if( (rtRenderType & RT_ON_COLORS) != 0) iFillType = 3;
|
|
else if( (rtRenderType & RT_OFF_COLORS) != 0) iFillType = 4;
|
|
else if( (rtRenderType & RT_TEXTURE) != 0) iFillType = 5;
|
|
m_TextureFillType.SetCurSel( iFillType);
|
|
|
|
enum CWorldRenderPrefs::LensFlaresType lftFlareFX = pwrpPrefs.GetLensFlares();
|
|
m_comboFlareFX.SetCurSel( (INDEX) lftFlareFX);
|
|
|
|
// set model rendering flags
|
|
m_bBoundingBox = pmrpPrefs.BBoxAllVisible();
|
|
m_bHidenLines = pmrpPrefs.HiddenLines();
|
|
m_bShadows = pmrpPrefs.GetShadowQuality() == 0;
|
|
m_bWireFrame = pmrpPrefs.WireOn();
|
|
}
|
|
|
|
//{{AFX_DATA_MAP(CDlgRenderingPreferences)
|
|
DDX_Control(pDX, IDC_FLARE_FX, m_comboFlareFX);
|
|
DDX_Control(pDX, IDC_SELECTION_COLOR, m_SelectionColor);
|
|
DDX_Control(pDX, IDC_GRID_COLOR, m_GridColor);
|
|
DDX_Control(pDX, IDC_PAPER_COLOR, m_PaperColor);
|
|
DDX_Control(pDX, IDC_TEXTURE_FILL_TYPE, m_TextureFillType);
|
|
DDX_Control(pDX, IDC_EDGES_FILL_TYPE, m_EdgesFillType);
|
|
DDX_Control(pDX, IDC_POLYGON_FILL_TYPE, m_PolygonFillType);
|
|
DDX_Control(pDX, IDC_VERTEX_FILL_TYPE, m_VertexFillType);
|
|
DDX_Control(pDX, IDC_VERTEX_COLORS, m_VertexColors);
|
|
DDX_Control(pDX, IDC_POLYGON_COLORS, m_PolygonColors);
|
|
DDX_Control(pDX, IDC_EDGES_COLORS, m_EdgesColors);
|
|
DDX_Check(pDX, IDC_BBOX, m_bBoundingBox);
|
|
DDX_Check(pDX, IDC_HIDEN_LINES, m_bHidenLines);
|
|
DDX_Check(pDX, IDC_SHADOWS, m_bShadows);
|
|
DDX_Check(pDX, IDC_WIRE_FRAME, m_bWireFrame);
|
|
DDX_Text(pDX, IDC_RENDERING_RANGE, m_fRenderingRange);
|
|
DDV_MinMaxFloat(pDX, m_fRenderingRange, 1.f, 10000.f);
|
|
DDX_Check(pDX, IDC_AUTO_RENDERING_RANGE, m_bAutoRenderingRange);
|
|
DDX_Check(pDX, IDC_RENDER_EDITOR_MODELS, m_bRenderEditorModels);
|
|
DDX_Check(pDX, IDC_USE_TEXTURE_FOR_BCG, m_bUseTextureForBcg);
|
|
DDX_Check(pDX, IDC_RENDER_FIELDS, m_bRenderFieldBrushes);
|
|
DDX_Check(pDX, IDC_RENDER_FOG, m_bRenderFog);
|
|
DDX_Check(pDX, IDC_RENDER_HAZE, m_bRenderHaze);
|
|
DDX_Check(pDX, IDC_RENDER_MIRRORS, m_bRenderMirrors);
|
|
DDX_Text(pDX, IDC_BCG_PICTURE_T, m_strBcgTexture);
|
|
DDX_Text(pDX, IDC_FAR_CLIP_PLANE, m_fFarClipPlane);
|
|
DDV_MinMaxFloat(pDX, m_fFarClipPlane, -1.f, 1.e+007f);
|
|
DDX_Check(pDX, IDC_APPLY_CLIP_FOR_ISOMETRIC, m_bApplyFarClipInIsometricProjection);
|
|
//}}AFX_DATA_MAP
|
|
|
|
// if dialog is giving data
|
|
if( pDX->m_bSaveAndValidate != FALSE)
|
|
{
|
|
// set auto rendering range flag
|
|
theApp.m_vpViewPrefs[ m_iBuffer].m_bAutoRenderingRange = m_bAutoRenderingRange;
|
|
|
|
// set rendering range
|
|
theApp.m_vpViewPrefs[ m_iBuffer].m_fRenderingRange = m_fRenderingRange;
|
|
|
|
// set drawing of editor models on or off
|
|
pwrpPrefs.SetEditorModelsOn( m_bRenderEditorModels);
|
|
// set render field brushes flag
|
|
pwrpPrefs.SetFieldBrushesOn( m_bRenderFieldBrushes);
|
|
// set use texture for background flag
|
|
pwrpPrefs.SetBackgroundTextureOn( m_bUseTextureForBcg);
|
|
|
|
pwrpPrefs.SetMirrorsOn( m_bRenderMirrors);
|
|
pwrpPrefs.SetFogOn( m_bRenderFog);
|
|
pwrpPrefs.SetHazeOn( m_bRenderHaze);
|
|
|
|
// enable/disable edit render range control depending on auto range flag
|
|
UpdateEditRangeControl();
|
|
|
|
// set colors
|
|
pwrpPrefs.SetVerticesInkColor( m_VertexColors.GetColor());
|
|
pwrpPrefs.SetEdgesInkColor( m_EdgesColors.GetColor());
|
|
pwrpPrefs.SetPolygonsInkColor( m_PolygonColors.GetColor());
|
|
theApp.m_vpViewPrefs[ m_iBuffer].m_PaperColor = m_PaperColor.GetColor();
|
|
theApp.m_vpViewPrefs[ m_iBuffer].m_GridColor = m_GridColor.GetColor();
|
|
theApp.m_vpViewPrefs[ m_iBuffer].m_SelectionColor = m_SelectionColor.GetColor();
|
|
pwrpPrefs.wrp_fFarClipPlane=m_fFarClipPlane;
|
|
pwrpPrefs.wrp_bApplyFarClipPlaneInIsometricProjection=m_bApplyFarClipInIsometricProjection;
|
|
enum CWorldRenderPrefs::FillType ftFillType;
|
|
// get current fill type from vertices combo box
|
|
ftFillType = (enum CWorldRenderPrefs::FillType) m_VertexFillType.GetCurSel();
|
|
pwrpPrefs.SetVerticesFillType( ftFillType);
|
|
// get current fill type from edges combo box
|
|
ftFillType = (enum CWorldRenderPrefs::FillType) m_EdgesFillType.GetCurSel();
|
|
pwrpPrefs.SetEdgesFillType( ftFillType);
|
|
// get current fill type from polygons combo box
|
|
ftFillType = (enum CWorldRenderPrefs::FillType) m_PolygonFillType.GetCurSel();
|
|
pwrpPrefs.SetPolygonsFillType( ftFillType);
|
|
|
|
enum CWorldRenderPrefs::LensFlaresType lftFlares;
|
|
// get type for rendering flares
|
|
lftFlares = (enum CWorldRenderPrefs::LensFlaresType) m_comboFlareFX.GetCurSel();
|
|
pwrpPrefs.SetLensFlaresType( lftFlares);
|
|
|
|
// get current model's texturizing type from model's texture combo box
|
|
ULONG ulMdlFillType;
|
|
ulMdlFillType = m_TextureFillType.GetCurSel();
|
|
switch( ulMdlFillType)
|
|
{
|
|
case 0: {
|
|
pmrpPrefs.SetRenderType( RT_NO_POLYGON_FILL);
|
|
break;
|
|
}
|
|
case 1: {
|
|
pmrpPrefs.SetRenderType( RT_WHITE_TEXTURE);
|
|
break;
|
|
}
|
|
case 2: {
|
|
pmrpPrefs.SetRenderType( RT_SURFACE_COLORS);
|
|
break;
|
|
}
|
|
case 3: {
|
|
pmrpPrefs.SetRenderType( RT_ON_COLORS);
|
|
break;
|
|
}
|
|
case 4: {
|
|
pmrpPrefs.SetRenderType( RT_OFF_COLORS);
|
|
break;
|
|
}
|
|
case 5: {
|
|
pmrpPrefs.SetRenderType( RT_TEXTURE);
|
|
break;
|
|
}
|
|
default: {
|
|
ASSERTALWAYS( "Invalid selection found in model's texture combo box");
|
|
}
|
|
}
|
|
// get rest of model's rendering preferences
|
|
pmrpPrefs.SetWire( m_bWireFrame);
|
|
pmrpPrefs.SetHiddenLines( m_bHidenLines);
|
|
pmrpPrefs.BBoxAllShow( m_bBoundingBox);
|
|
if( m_bShadows) {
|
|
pmrpPrefs.SetShadowQuality( 0);
|
|
} else {
|
|
pmrpPrefs.SetShadowQuality( 255);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDlgRenderingPreferences, CDialog)
|
|
//{{AFX_MSG_MAP(CDlgRenderingPreferences)
|
|
ON_BN_CLICKED(ID_LOAD_PREFERENCES, OnLoadPreferences)
|
|
ON_BN_CLICKED(ID_SAVE_PREFERENCES, OnSavePreferences)
|
|
ON_BN_CLICKED(IDC_AUTO_RENDERING_RANGE, OnAutoRenderingRange)
|
|
ON_BN_CLICKED(IDC_BROWSE_BCG_PICTURE, OnBrowseBcgPicture)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDlgRenderingPreferences message handlers
|
|
|
|
BOOL CDlgRenderingPreferences::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
CModelRenderPrefs &pmrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_mrpModelRenderPrefs;
|
|
CWorldRenderPrefs &pwrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_wrpWorldRenderPrefs;
|
|
// we will set window's name so we know on which buffer we are working on
|
|
char chrWndTitle[ 64];
|
|
// create new name
|
|
if( m_iBuffer!=10)
|
|
{
|
|
sprintf( chrWndTitle, "Change rendering preferences of buffer %d.", m_iBuffer+1);
|
|
}
|
|
else
|
|
{
|
|
sprintf( chrWndTitle, "Change rendering preferences");
|
|
}
|
|
// set it as window new title
|
|
SetWindowText( CString(chrWndTitle));
|
|
|
|
// set dialog data
|
|
UpdateData( FALSE);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CDlgRenderingPreferences::OnLoadPreferences()
|
|
{
|
|
// load world and model's rendering preferences
|
|
theApp.LoadRenderingPreferences();
|
|
// set dialog data
|
|
UpdateData( FALSE);
|
|
}
|
|
|
|
void CDlgRenderingPreferences::OnSavePreferences()
|
|
{
|
|
// get data from dialog
|
|
UpdateData( TRUE);
|
|
// load world and model's rendering preferences
|
|
theApp.SaveRenderingPreferences();
|
|
}
|
|
|
|
void CDlgRenderingPreferences::UpdateEditRangeControl()
|
|
{
|
|
// get edit rendering range control
|
|
CWnd *pWnd = GetDlgItem( IDC_RENDERING_RANGE);
|
|
// must exists
|
|
ASSERT( pWnd != NULL);
|
|
// if rendering range flag is on
|
|
if( m_bAutoRenderingRange)
|
|
{
|
|
// disable edit rendering range control
|
|
pWnd->EnableWindow( FALSE);
|
|
}
|
|
else
|
|
{
|
|
// otherwise enable it
|
|
pWnd->EnableWindow( TRUE);
|
|
}
|
|
}
|
|
|
|
void CDlgRenderingPreferences::OnAutoRenderingRange()
|
|
{
|
|
m_bAutoRenderingRange = !m_bAutoRenderingRange;
|
|
// set dialog data
|
|
UpdateData( TRUE);
|
|
// enable/disable edit range control
|
|
UpdateEditRangeControl();
|
|
}
|
|
|
|
void CDlgRenderingPreferences::OnBrowseBcgPicture()
|
|
{
|
|
CTFileName fnBcgPicture = _EngineGUI.FileRequester( "Select background texture",
|
|
"Texture (*.tex)\0*.tex\0" FILTER_TEX FILTER_END, "Background textures", "");
|
|
if( fnBcgPicture == "") return;
|
|
sprintf( theApp.m_vpViewPrefs[ m_iBuffer].m_achrBcgPicture, "%s", fnBcgPicture);
|
|
m_strBcgTexture = fnBcgPicture.FileName();
|
|
UpdateData( FALSE);
|
|
}
|