439 lines
12 KiB
C++
439 lines
12 KiB
C++
|
|
// EtPackingShaderDlg.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
#include "stdafx.h"
|
|||
|
|
#include "EtPackingShader.h"
|
|||
|
|
#include "EtPackingShaderDlg.h"
|
|||
|
|
#include "EtPackingShaderUtility.h"
|
|||
|
|
|
|||
|
|
#define REG_SUBKEY "SOFTWARE\\EyedentityGames\\EtPackingShader"
|
|||
|
|
|
|||
|
|
#ifdef _DEBUG
|
|||
|
|
#define new DEBUG_NEW
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> CAboutDlg <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
|||
|
|
|
|||
|
|
class CAboutDlg : public CDialog
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
CAboutDlg();
|
|||
|
|
|
|||
|
|
// <20><>ȭ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
|||
|
|
enum { IDD = IDD_ABOUTBOX };
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
|||
|
|
protected:
|
|||
|
|
DECLARE_MESSAGE_MAP()
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
|
|||
|
|
{
|
|||
|
|
CDialog::DoDataExchange(pDX);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
|
|||
|
|
END_MESSAGE_MAP()
|
|||
|
|
|
|||
|
|
|
|||
|
|
// CEtPackingShaderDlg <20><>ȭ <20><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
CEtPackingShaderDlg::CEtPackingShaderDlg(CWnd* pParent /*=NULL*/)
|
|||
|
|
: CDialog(CEtPackingShaderDlg::IDD, pParent)
|
|||
|
|
, m_szCurrentDefine(_T(""))
|
|||
|
|
, m_szProgress(_T(""))
|
|||
|
|
, m_szShaderFolder(_T(""))
|
|||
|
|
, m_szOutputFolder(_T(""))
|
|||
|
|
{
|
|||
|
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
|||
|
|
m_nPrevComboSel = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CEtPackingShaderDlg::DoDataExchange(CDataExchange* pDX)
|
|||
|
|
{
|
|||
|
|
CDialog::DoDataExchange(pDX);
|
|||
|
|
DDX_Text(pDX, IDC_EDIT1, m_szCurrentDefine);
|
|||
|
|
DDX_Text(pDX, IDC_EDIT2, m_szProgress);
|
|||
|
|
DDX_Control(pDX, IDC_COMBO2, m_ComboBox);
|
|||
|
|
DDX_Text(pDX, IDC_EDIT3, m_szShaderFolder);
|
|||
|
|
DDX_Control(pDX, IDC_EDIT2, m_progressEdit);
|
|||
|
|
DDX_Text(pDX, IDC_EDIT4, m_szOutputFolder);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BEGIN_MESSAGE_MAP(CEtPackingShaderDlg, CDialog)
|
|||
|
|
ON_WM_SYSCOMMAND()
|
|||
|
|
ON_WM_PAINT()
|
|||
|
|
ON_WM_QUERYDRAGICON()
|
|||
|
|
//}}AFX_MSG_MAP
|
|||
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CEtPackingShaderDlg::OnBnClickedButtonCompile)
|
|||
|
|
ON_CBN_SELCHANGE(IDC_COMBO2, &CEtPackingShaderDlg::OnCbnSelchangeCombo)
|
|||
|
|
ON_BN_CLICKED(IDC_BUTTON2, &CEtPackingShaderDlg::OnBnClickedButtonFolder)
|
|||
|
|
ON_WM_DESTROY()
|
|||
|
|
ON_BN_CLICKED(IDC_BUTTON3, &CEtPackingShaderDlg::OnBnClickedButtonOutput)
|
|||
|
|
END_MESSAGE_MAP()
|
|||
|
|
|
|||
|
|
|
|||
|
|
// CEtPackingShaderDlg <20><EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
BOOL CEtPackingShaderDlg::OnInitDialog()
|
|||
|
|
{
|
|||
|
|
CDialog::OnInitDialog();
|
|||
|
|
|
|||
|
|
// <20>ý<EFBFBD><C3BD><EFBFBD> <20><EFBFBD><DEB4><EFBFBD> "<22><><EFBFBD><EFBFBD>..." <20><EFBFBD> <20><EFBFBD><D7B8><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
|||
|
|
|
|||
|
|
// IDM_ABOUTBOX<4F><58> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>մϴ<D5B4>.
|
|||
|
|
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
|
|||
|
|
ASSERT(IDM_ABOUTBOX < 0xF000);
|
|||
|
|
|
|||
|
|
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
|||
|
|
if (pSysMenu != NULL)
|
|||
|
|
{
|
|||
|
|
CString strAboutMenu;
|
|||
|
|
strAboutMenu.LoadString(IDS_ABOUTBOX);
|
|||
|
|
if (!strAboutMenu.IsEmpty())
|
|||
|
|
{
|
|||
|
|
pSysMenu->AppendMenu(MF_SEPARATOR);
|
|||
|
|
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><> <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><> â<><C3A2> <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ũ<EFBFBD><C5A9> <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
SetIcon(m_hIcon, TRUE); // ū <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
SetIcon(m_hIcon, FALSE); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
|
|||
|
|
// TODO: <20><><EFBFBD> <20>߰<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
|||
|
|
char szStrFolder[2048] = { 0, };
|
|||
|
|
char szStrOutput[2048] = { 0, };
|
|||
|
|
char szStrDefine1[2048] = {0,};
|
|||
|
|
char szStrDefine2[2048] = {0,};
|
|||
|
|
char szStrDefine3[2048] = {0,};
|
|||
|
|
GetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "ShaderFolder", szStrFolder, 2048 );
|
|||
|
|
if( strlen(szStrFolder) == 0 )
|
|||
|
|
m_szShaderFolder = "\\\\eye-ad\\ToolData\\SharedEffect";
|
|||
|
|
else m_szShaderFolder = szStrFolder;
|
|||
|
|
|
|||
|
|
GetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "OutputFolder", szStrOutput, 2048 );
|
|||
|
|
if( strlen(szStrOutput) == 0 )
|
|||
|
|
m_szOutputFolder = "\\\\eye-ad\\ToolData\\Resource\\SharedEffect";
|
|||
|
|
else m_szOutputFolder = szStrOutput;
|
|||
|
|
|
|||
|
|
GetModuleFileName(GetModuleHandle(0), m_szFileName, MAX_PATH );
|
|||
|
|
char *ps = strrchr(m_szFileName, '\\');
|
|||
|
|
if( ps ) {
|
|||
|
|
strcpy(ps, "\\shader.info");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
FILE *fp = fopen(m_szFileName, "rt");
|
|||
|
|
|
|||
|
|
if( fp == NULL ) {
|
|||
|
|
m_szDefineList[0] = "ETERNITY_ENGINE Eternity\r\nUSE_TERRAIN_LIGHTMAP 1\r\nDEPTH_SHADOWMAP 1\r\nBAKE_DEPTHMAP 1\r\nBAKE_VELOCITY 0\r\n";
|
|||
|
|
m_szDefineList[1] = "ETERNITY_ENGINE Eternity\r\nUSE_TERRAIN_LIGHTMAP 1\r\nDEPTH_SHADOWMAP 1\r\nBAKE_DEPTHMAP 1\r\nBAKE_VELOCITY 0\r\n";
|
|||
|
|
m_szDefineList[2] = "ETERNITY_ENGINE Eternity\r\nUSE_TERRAIN_LIGHTMAP 1\r\nDEPTH_SHADOWMAP 1\r\nBAKE_DEPTHMAP 1\r\nBAKE_VELOCITY 0\r\n";
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
char buffer[255];
|
|||
|
|
int nIndex = -1;
|
|||
|
|
for( ;; ) {
|
|||
|
|
fgets(buffer, 255, fp);
|
|||
|
|
if( feof(fp) || buffer[0] == '\0' )break;
|
|||
|
|
if( buffer[0] == '[' ) {
|
|||
|
|
if( strcmp(buffer, "[DefineHigh]\n") == 0 ) {
|
|||
|
|
nIndex = 0;
|
|||
|
|
}
|
|||
|
|
if( strcmp(buffer, "[DefineNormal]\n") == 0 ) {
|
|||
|
|
nIndex = 1;
|
|||
|
|
}
|
|||
|
|
if( strcmp(buffer, "[DefineLow]\n") == 0 ) {
|
|||
|
|
nIndex = 2;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
m_szDefineList[nIndex] += buffer;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
fclose(fp);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_szCurrentDefine = m_szDefineList[0];
|
|||
|
|
UpdateData( FALSE );
|
|||
|
|
|
|||
|
|
m_ComboBox.SetCurSel( 0 );
|
|||
|
|
//OnCbnSelchangeCombo();
|
|||
|
|
|
|||
|
|
if( strstr(GetCommandLine(), "-autostart") != NULL ) {
|
|||
|
|
OnBnClickedButtonCompile();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return TRUE; // <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD>ѿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TRUE<55><45> <20><>ȯ<EFBFBD>մϴ<D5B4>.
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CEtPackingShaderDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
|||
|
|
{
|
|||
|
|
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
|
|||
|
|
{
|
|||
|
|
CAboutDlg dlgAbout;
|
|||
|
|
dlgAbout.DoModal();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CDialog::OnSysCommand(nID, lParam);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȭ <20><><EFBFBD>ڿ<EFBFBD> <20>ּ<EFBFBD>ȭ <20><><EFBFBD>߸<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20>Ʒ<EFBFBD> <20>ڵ尡 <20>ʿ<EFBFBD><CABF>մϴ<D5B4>. <20><><EFBFBD><EFBFBD>/<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> MFC <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
|||
|
|
|
|||
|
|
void CEtPackingShaderDlg::OnPaint()
|
|||
|
|
{
|
|||
|
|
if (IsIconic())
|
|||
|
|
{
|
|||
|
|
CPaintDC dc(this); // <20><EFBFBD><D7B8>⸦ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD>ؽ<EFBFBD>Ʈ
|
|||
|
|
|
|||
|
|
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
|||
|
|
|
|||
|
|
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20>簢<EFBFBD><E7B0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB5A5> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
|||
|
|
int cxIcon = GetSystemMetrics(SM_CXICON);
|
|||
|
|
int cyIcon = GetSystemMetrics(SM_CYICON);
|
|||
|
|
CRect rect;
|
|||
|
|
GetClientRect(&rect);
|
|||
|
|
int x = (rect.Width() - cxIcon + 1) / 2;
|
|||
|
|
int y = (rect.Height() - cyIcon + 1) / 2;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B8>ϴ<EFBFBD>.
|
|||
|
|
dc.DrawIcon(x, y, m_hIcon);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CDialog::OnPaint();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ּ<EFBFBD>ȭ<EFBFBD><C8AD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ȿ<EFBFBD> Ŀ<><C4BF><EFBFBD><EFBFBD> ǥ<>õǵ<C3B5><C7B5><EFBFBD> <20>ý<EFBFBD><C3BD>ۿ<EFBFBD><DBBF><EFBFBD>
|
|||
|
|
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
|||
|
|
HCURSOR CEtPackingShaderDlg::OnQueryDragIcon()
|
|||
|
|
{
|
|||
|
|
return static_cast<HCURSOR>(m_hIcon);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
struct SHADER_COMPILE_INFO
|
|||
|
|
{
|
|||
|
|
char szFileName[64];
|
|||
|
|
int nQualityLevel;
|
|||
|
|
DWORD dwBufferSize;
|
|||
|
|
BYTE *pCompiledBuffer;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
DWORD WINAPI CEtPackingShaderDlg::CompileProc( LPVOID pThisPointer )
|
|||
|
|
{
|
|||
|
|
CEtPackingShaderDlg *pThis = (CEtPackingShaderDlg*)pThisPointer;
|
|||
|
|
|
|||
|
|
std::vector< std::string > &shaderFileNameList = GetShaderFileNameList( pThis->m_szShaderFolder );
|
|||
|
|
|
|||
|
|
std::vector< SHADER_COMPILE_INFO > CompiledList;
|
|||
|
|
|
|||
|
|
CString str;
|
|||
|
|
for( int nQualityLevel = 0; nQualityLevel < 3; nQualityLevel++)
|
|||
|
|
{
|
|||
|
|
int nErrors=0;
|
|||
|
|
int nSuccess=0;
|
|||
|
|
|
|||
|
|
std::vector<D3DXMACRO> DefineList = GetStringToMacro( pThis->m_szDefineList[ nQualityLevel ] );
|
|||
|
|
|
|||
|
|
for each( std::string szFileName in shaderFileNameList )
|
|||
|
|
{
|
|||
|
|
char szName[255];
|
|||
|
|
char *ps = strrchr((char*)szFileName.c_str(), '\\');
|
|||
|
|
strcpy(szName, ps+1);
|
|||
|
|
str += szName;
|
|||
|
|
|
|||
|
|
const char *fullName = szFileName.c_str();
|
|||
|
|
LPD3DXEFFECTCOMPILER pCompiler = NULL;
|
|||
|
|
LPD3DXBUFFER pParseErrors = NULL;
|
|||
|
|
DWORD dwFlags = 0;
|
|||
|
|
D3DXCreateEffectCompilerFromFile(fullName, &DefineList[0], NULL, dwFlags, &pCompiler, &pParseErrors);
|
|||
|
|
if(!pCompiler) {
|
|||
|
|
char *szErrorMsg = (char*)pParseErrors->GetBufferPointer();
|
|||
|
|
// compile error
|
|||
|
|
str += " . . . Compile Error - ";
|
|||
|
|
str += szErrorMsg;
|
|||
|
|
str += "\r\n";
|
|||
|
|
pThis->m_progressEdit.SetWindowText( str );
|
|||
|
|
pThis->m_progressEdit.LineScroll( INT_MAX );
|
|||
|
|
nErrors++;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
LPD3DXBUFFER pCompiledEffect = NULL;
|
|||
|
|
LPD3DXBUFFER pErrorMsg = NULL;
|
|||
|
|
pCompiler->CompileEffect(dwFlags, &pCompiledEffect, &pErrorMsg);
|
|||
|
|
if(!pCompiledEffect) {
|
|||
|
|
char *szErrorMsg = (char*)pErrorMsg->GetBufferPointer();
|
|||
|
|
str += " . . . Compile Error - ";
|
|||
|
|
str += szErrorMsg;
|
|||
|
|
str += "\r\n";
|
|||
|
|
pThis->m_progressEdit.SetWindowText( str );
|
|||
|
|
pThis->m_progressEdit.LineScroll( INT_MAX );
|
|||
|
|
nErrors++;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
pCompiler->Release();
|
|||
|
|
|
|||
|
|
SHADER_COMPILE_INFO scInfo;
|
|||
|
|
strcpy(scInfo.szFileName, szName);
|
|||
|
|
scInfo.nQualityLevel = nQualityLevel;
|
|||
|
|
scInfo.dwBufferSize = pCompiledEffect->GetBufferSize();
|
|||
|
|
scInfo.pCompiledBuffer = new BYTE[ pCompiledEffect->GetBufferSize() ];
|
|||
|
|
memcpy(scInfo.pCompiledBuffer, pCompiledEffect->GetBufferPointer(), pCompiledEffect->GetBufferSize());
|
|||
|
|
CompiledList.push_back( scInfo );
|
|||
|
|
|
|||
|
|
pCompiledEffect->Release();
|
|||
|
|
|
|||
|
|
str += " . . . Compiling Ok.\r\n";
|
|||
|
|
pThis->m_progressEdit.SetWindowText( str );
|
|||
|
|
pThis->m_progressEdit.LineScroll( INT_MAX );
|
|||
|
|
nSuccess++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for each( D3DXMACRO e in DefineList ) {
|
|||
|
|
delete [] e.Name;
|
|||
|
|
delete [] e.Definition;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if( nErrors == 0 ) {
|
|||
|
|
char szText[255];
|
|||
|
|
sprintf(szText, " %d succeeded, %d failed\r\n\r\n", nSuccess, nErrors );
|
|||
|
|
str += szText;
|
|||
|
|
pThis->m_progressEdit.SetWindowText( str );
|
|||
|
|
pThis->m_progressEdit.LineScroll( INT_MAX );
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
char szOutName[255];
|
|||
|
|
strcpy(szOutName, pThis->m_szOutputFolder.GetBuffer());
|
|||
|
|
strcat(szOutName, "\\DnShaders.dat");
|
|||
|
|
FILE *fp = fopen(szOutName, "wb");
|
|||
|
|
if( fp == NULL ) {
|
|||
|
|
AfxMessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.");
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
DWORD dwHead = *(DWORD*)"SHD0";
|
|||
|
|
int dwCount = (int)CompiledList.size();
|
|||
|
|
fwrite(&dwHead, sizeof(DWORD), 1, fp);
|
|||
|
|
fwrite(&dwCount, sizeof(int), 1, fp);
|
|||
|
|
for( int i = 0; i < dwCount; i++) {
|
|||
|
|
fwrite(CompiledList[i].szFileName, 64, 1, fp);
|
|||
|
|
fwrite(&CompiledList[i].nQualityLevel, sizeof(DWORD), 1, fp);
|
|||
|
|
fwrite(&CompiledList[i].dwBufferSize, sizeof(DWORD), 1, fp);
|
|||
|
|
fwrite(CompiledList[i].pCompiledBuffer, CompiledList[i].dwBufferSize, 1, fp);
|
|||
|
|
delete [] CompiledList[i].pCompiledBuffer;
|
|||
|
|
}
|
|||
|
|
fclose(fp);
|
|||
|
|
|
|||
|
|
char szText[255];
|
|||
|
|
sprintf(szText, " %d shaders save success. \r\n\r\n", dwCount );
|
|||
|
|
str += szText;
|
|||
|
|
pThis->m_progressEdit.SetWindowText( str );
|
|||
|
|
pThis->m_progressEdit.LineScroll( INT_MAX );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if( strstr(GetCommandLine(), "-autostart") != NULL ) {
|
|||
|
|
pThis->EndDialog(IDOK);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CEtPackingShaderDlg::OnBnClickedButtonCompile()
|
|||
|
|
{
|
|||
|
|
OnCbnSelchangeCombo();
|
|||
|
|
HANDLE packingThread = ::CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)&CEtPackingShaderDlg::CompileProc, this, 0, NULL );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CEtPackingShaderDlg::OnCbnSelchangeCombo()
|
|||
|
|
{
|
|||
|
|
UpdateData( TRUE );
|
|||
|
|
m_szDefineList[ m_nPrevComboSel ] = m_szCurrentDefine;
|
|||
|
|
int nCurSel = m_ComboBox.GetCurSel();
|
|||
|
|
m_szCurrentDefine = m_szDefineList[ nCurSel ];
|
|||
|
|
UpdateData( FALSE );
|
|||
|
|
m_nPrevComboSel = nCurSel;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CEtPackingShaderDlg::OnBnClickedButtonFolder()
|
|||
|
|
{
|
|||
|
|
// TODO: Add your control notification handler code here
|
|||
|
|
CXTBrowseDialog Dlg;
|
|||
|
|
UpdateData(TRUE);
|
|||
|
|
Dlg.SetTitle(_T("Select Shader Directory"));
|
|||
|
|
if( !m_szShaderFolder.IsEmpty() ) {
|
|||
|
|
TCHAR path[_MAX_PATH];
|
|||
|
|
STRCPY_S(path, _MAX_PATH, m_szShaderFolder);
|
|||
|
|
Dlg.SetSelPath(path);
|
|||
|
|
}
|
|||
|
|
if( Dlg.DoModal() == IDOK ) {
|
|||
|
|
m_szShaderFolder = Dlg.GetSelPath();
|
|||
|
|
UpdateData(FALSE);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CEtPackingShaderDlg::OnBnClickedButtonOutput()
|
|||
|
|
{
|
|||
|
|
// TODO: Add your control notification handler code here
|
|||
|
|
CXTBrowseDialog Dlg;
|
|||
|
|
UpdateData(TRUE);
|
|||
|
|
Dlg.SetTitle(_T("Select Output Directory"));
|
|||
|
|
if( !m_szOutputFolder.IsEmpty() ) {
|
|||
|
|
TCHAR path[_MAX_PATH];
|
|||
|
|
STRCPY_S(path, _MAX_PATH, m_szOutputFolder);
|
|||
|
|
Dlg.SetSelPath(path);
|
|||
|
|
}
|
|||
|
|
if( Dlg.DoModal() == IDOK ) {
|
|||
|
|
m_szOutputFolder = Dlg.GetSelPath();
|
|||
|
|
UpdateData(FALSE);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CEtPackingShaderDlg::OnDestroy()
|
|||
|
|
{
|
|||
|
|
CDialog::OnDestroy();
|
|||
|
|
SetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "ShaderFolder", m_szShaderFolder.GetBuffer() );
|
|||
|
|
SetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "OutputFolder", m_szOutputFolder.GetBuffer() );
|
|||
|
|
|
|||
|
|
OnCbnSelchangeCombo();
|
|||
|
|
|
|||
|
|
/*SetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "DefineHigh", m_szDefineList[0].GetBuffer() );
|
|||
|
|
SetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "DefineNormal", m_szDefineList[1].GetBuffer() );
|
|||
|
|
SetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "DefineLow", m_szDefineList[2].GetBuffer() ); */
|
|||
|
|
|
|||
|
|
FILE *fp = fopen(m_szFileName, "wt");
|
|||
|
|
fputs("[DefineHigh]\n", fp);
|
|||
|
|
fputs(m_szDefineList[0].GetBuffer(), fp);
|
|||
|
|
fputs("[DefineNormal]\n", fp);
|
|||
|
|
fputs(m_szDefineList[1].GetBuffer(), fp);
|
|||
|
|
fputs("[DefineLow]\n", fp);
|
|||
|
|
fputs(m_szDefineList[2].GetBuffer(), fp);
|
|||
|
|
fclose(fp);
|
|||
|
|
|
|||
|
|
// TODO: Add your message handler code here
|
|||
|
|
}
|