123
This commit is contained in:
298
Editor/ShaderTemplatePanel.cpp
Normal file
298
Editor/ShaderTemplatePanel.cpp
Normal file
@@ -0,0 +1,298 @@
|
||||
// ShaderTemplatePanel.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "ShaderTemplatePanel.h"
|
||||
#include "ShaderTemplateTool.h" // CTemplateTool
|
||||
#include "resource.h" // IDC_SHADERTEMPL_XML
|
||||
|
||||
#include "Objects\\BaseObject.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CShaderTemplatePanel dialog
|
||||
|
||||
|
||||
CShaderTemplatePanel::CShaderTemplatePanel( CShaderTemplateTool *obj,XmlNodeRef &node,CWnd* pParent /*=NULL*/)
|
||||
: CDialog(CShaderTemplatePanel::IDD, pParent)
|
||||
, m_sParameterSetName(_T(""))
|
||||
{
|
||||
//{{AFX_DATA_INIT(CShaderTemplatePanel)
|
||||
// NOTE: the ClassWizard will add member initialization here
|
||||
//}}AFX_DATA_INIT
|
||||
m_node = node;
|
||||
m_object = obj;
|
||||
m_sFilename = "shader.stp";
|
||||
m_sParameterSetName = "unnamed";
|
||||
|
||||
assert( m_object != 0 );
|
||||
|
||||
|
||||
Create( IDD,pParent );
|
||||
}
|
||||
|
||||
|
||||
void CShaderTemplatePanel::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CShaderTemplatePanel)
|
||||
// NOTE: the ClassWizard will add DDX and DDV calls here
|
||||
//}}AFX_DATA_MAP
|
||||
DDX_Control(pDX, IDC_TEMPLATECOMBO, m_TemplateCombo);
|
||||
DDX_Control(pDX, IDC_SHADERTEMPL_MATERIALNAME, m_Material);
|
||||
DDX_Text(pDX, IDC_SHADERTEMPL_FILENAME, m_sFilename);
|
||||
DDX_Text(pDX, IDC_SHADERTEMPL_NAME, m_sParameterSetName);
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CShaderTemplatePanel, CDialog)
|
||||
//{{AFX_MSG_MAP(CShaderTemplatePanel)
|
||||
ON_WM_DESTROY()
|
||||
ON_WM_KILLFOCUS()
|
||||
ON_WM_SIZE()
|
||||
//}}AFX_MSG_MAP
|
||||
ON_CBN_SELCHANGE(IDC_TEMPLATECOMBO, OnCbnSelchangeTemplatecombo)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_COPY, OnBnClickedShadertemplCopy)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_SETDEFAULT, OnBnClickedShadertemplSetdefault)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_PASTE, OnBnClickedShadertemplPaste)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_LOAD, OnBnClickedShadertemplLoad)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_SAVE, OnBnClickedShadertemplSave)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_GETFROMSEL, OnBnClickedShadertemplGetfromsel)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_SELECTBYSTP, OnBnClickedShadertemplSelectbystp)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_TOLIB, OnBnClickedShadertemplTolib)
|
||||
ON_BN_CLICKED(IDC_SHADERTEMPL_FROMLIB, OnBnClickedShadertemplFromlib)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CShaderTemplatePanel message handlers
|
||||
|
||||
BOOL CShaderTemplatePanel::OnInitDialog()
|
||||
{
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
m_TemplateCombo.SetWindowPos(0,0,0,190,180,SWP_NOREPOSITION | SWP_NOMOVE | SWP_NOZORDER);
|
||||
m_TemplateCombo.SetItemHeight(-1,15);
|
||||
|
||||
CRect rc;
|
||||
CWnd *w=GetDlgItem(IDC_SHADERTEMPL_XML);
|
||||
w->GetWindowRect( rc );
|
||||
ScreenToClient(rc);
|
||||
|
||||
m_propWnd.Create( WS_CHILD,rc,this );
|
||||
m_propWnd.ShowWindow( SW_SHOW );
|
||||
m_propWnd.SetSplitter( (2*rc.right)/5 );
|
||||
SetProperties( m_node );
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
// EXCEPTION: OCX Property Pages should return FALSE
|
||||
}
|
||||
|
||||
|
||||
void CShaderTemplatePanel::SetProperties( XmlNodeRef &props )
|
||||
{
|
||||
m_node = props;
|
||||
// If properties window is already created.
|
||||
|
||||
if (GetSafeHwnd())
|
||||
{
|
||||
if (m_node)
|
||||
{
|
||||
m_propWnd.CreateItems(m_node);
|
||||
m_propWnd.SetUpdateCallback( functor(*this,&CShaderTemplatePanel::OnPropertyChanged) );
|
||||
|
||||
Invalidate();
|
||||
UpdateWindow();
|
||||
|
||||
// calles OnSize()
|
||||
// SetWindowPos( NULL,0,0,rc.right,MIN((rc.bottom+yOffset*2),listSize.cy+yOffset*2)+30,SWP_NOMOVE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnDestroy()
|
||||
{
|
||||
CDialog::OnDestroy();
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnKillFocus(CWnd* pNewWnd)
|
||||
{
|
||||
CDialog::OnKillFocus(pNewWnd);
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnSize(UINT nType, int cx, int cy)
|
||||
{
|
||||
CDialog::OnSize(nType, cx, cy);
|
||||
|
||||
/*
|
||||
if (m_propWnd)
|
||||
{
|
||||
FRect fr = m_propWnd->GetWindowRect();
|
||||
CRect rc( fr.Min.X,fr.Min.Y,fr.Max.X,fr.Max.Y );
|
||||
ScreenToClient( &rc );
|
||||
|
||||
m_propWnd->EnableUpdateCallback(false);
|
||||
m_propWnd->MoveWindow( 2,4,cx-2,fr.Height()+30,TRUE );
|
||||
m_propWnd->DividerWidth = (2*cx)/5;
|
||||
m_propWnd->Resizable = true;
|
||||
m_propWnd->ResizeList();
|
||||
m_propWnd->Resizable = false;
|
||||
m_propWnd->ForceRefresh();
|
||||
m_propWnd->EnableUpdateCallback(true);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CShaderTemplatePanel::OnPropertyChanged( XmlNodeRef node )
|
||||
{
|
||||
// m_object->OnPropertyChange( node->getTag() );
|
||||
}
|
||||
void CShaderTemplatePanel::OnCbnSelchangeTemplatecombo()
|
||||
{
|
||||
int sel=m_TemplateCombo.GetCurSel();
|
||||
|
||||
CString str;
|
||||
|
||||
m_TemplateCombo.GetLBText(sel,str);
|
||||
|
||||
IShader *sshader=GetIEditor()->GetRenderer()->EF_LoadShader(str.GetBuffer(64),eSH_World,0);
|
||||
|
||||
if(sshader)
|
||||
{
|
||||
TArray<SShaderParam> &shaderparams=sshader->GetPublicParams();
|
||||
|
||||
// struct SShaderParam
|
||||
// string m_Name;
|
||||
// EParamType m_Type;
|
||||
// UParamVal m_Value;
|
||||
//
|
||||
// union UParamVal
|
||||
// {
|
||||
// byte m_Byte;
|
||||
// short m_Short;
|
||||
// int m_Int;
|
||||
// float m_Float;
|
||||
// char *m_String;
|
||||
// };
|
||||
|
||||
CString str="<Root>";
|
||||
|
||||
int nParamCount=shaderparams.Num();
|
||||
|
||||
for(int e=0;e<nParamCount;e++)
|
||||
{
|
||||
SShaderParam *ptr=&shaderparams[e];
|
||||
|
||||
// Min Max attribute
|
||||
|
||||
switch(ptr->m_Type)
|
||||
{
|
||||
case eType_BYTE:
|
||||
{
|
||||
CString val; val.Format("%d",(int)(ptr->m_Value.m_Byte));
|
||||
str+="<"+CString(ptr->m_Name)+" type=\"Int\" value=\"" +val+ "\"/>";
|
||||
}
|
||||
break;
|
||||
case eType_SHORT:
|
||||
{
|
||||
CString val; val.Format("%d",(int)(ptr->m_Value.m_Short));
|
||||
str+="<"+CString(ptr->m_Name)+" type=\"Int\" value=\"" +val+ "\"/>";
|
||||
}
|
||||
break;
|
||||
case eType_INT:
|
||||
{
|
||||
CString val; val.Format("%d",(int)(ptr->m_Value.m_Int));
|
||||
str+="<"+CString(ptr->m_Name)+" type=\"Int\" value=\"" +val+ "\"/>";
|
||||
}
|
||||
break;
|
||||
case eType_FLOAT:
|
||||
{
|
||||
CString val; val.Format("%f",(float)(ptr->m_Value.m_Float));
|
||||
str+="<"+CString(ptr->m_Name)+" type=\"Float\" value=\"" +val+ "\" Precision=\"5\"/>";
|
||||
}
|
||||
break;
|
||||
case eType_STRING:
|
||||
{
|
||||
CString val; val.Format("%s",(char *)(ptr->m_Value.m_String));
|
||||
str+="<"+CString(ptr->m_Name)+" type=\"String\" value=\"" +val+ "\"/>";
|
||||
}
|
||||
break;
|
||||
|
||||
case eType_UNKNOWN:
|
||||
default:
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
str+="</Root>";
|
||||
|
||||
XmlParser xml;
|
||||
|
||||
m_node=xml.parseBuffer(str);
|
||||
|
||||
SetProperties(m_node);
|
||||
|
||||
sshader->Release();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplCopy()
|
||||
{
|
||||
AfxMessageBox("todo");
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplSetdefault()
|
||||
{
|
||||
AfxMessageBox("todo");
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplPaste()
|
||||
{
|
||||
AfxMessageBox("todo");
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplLoad()
|
||||
{
|
||||
assert(m_object);
|
||||
|
||||
m_object->OnBnClickedShadertemplLoad();
|
||||
|
||||
m_sFilename=m_object->getFilename();
|
||||
|
||||
UpdateData(false);
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplSave()
|
||||
{
|
||||
assert(m_object);
|
||||
|
||||
m_object->OnBnClickedShadertemplSave();
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplGetfromsel()
|
||||
{
|
||||
AfxMessageBox("todo");
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplSelectbystp()
|
||||
{
|
||||
AfxMessageBox("todo");
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplTolib()
|
||||
{
|
||||
AfxMessageBox("todo");
|
||||
}
|
||||
|
||||
void CShaderTemplatePanel::OnBnClickedShadertemplFromlib()
|
||||
{
|
||||
AfxMessageBox("todo");
|
||||
}
|
||||
Reference in New Issue
Block a user