home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Game Programming for Teens / VBGPFT.cdr / DirectX8 / dx8a_sdk.exe / samples / multimedia / direct3d / dxtex / dialogs.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-22  |  9.4 KB  |  409 lines

  1. // Dialogs.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "dxtex.h"
  6. #include "dialogs.h"
  7.  
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13.  
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CNewTextureDlg dialog
  16.  
  17.  
  18. CNewTextureDlg::CNewTextureDlg(CWnd* pParent /*=NULL*/)
  19.     : CDialog(CNewTextureDlg::IDD, pParent)
  20. {
  21.     //{{AFX_DATA_INIT(CNewTextureDlg)
  22.     m_iTexType = 0;
  23.     m_dwWidth = 256;
  24.     m_dwHeight = 256;
  25.     m_dwDepth = 8;
  26.     m_iFmt = 0;
  27.     m_strFmtDesc = _T("");
  28.     m_numMips = 1;
  29.     //}}AFX_DATA_INIT
  30. }
  31.  
  32.  
  33. void CNewTextureDlg::DoDataExchange(CDataExchange* pDX)
  34. {
  35.     CDialog::DoDataExchange(pDX);
  36.     //{{AFX_DATA_MAP(CNewTextureDlg)
  37.     DDX_Radio(pDX, IDC_TEXTURE, m_iTexType);
  38.     DDX_Text(pDX, IDC_WIDTH, m_dwWidth);
  39.     DDV_MinMaxInt(pDX, m_dwWidth, 1, 1024);
  40.     DDX_Text(pDX, IDC_HEIGHT, m_dwHeight);
  41.     DDV_MinMaxInt(pDX, m_dwHeight, 1, 1024);
  42.     DDX_Text(pDX, IDC_DEPTH, m_dwDepth);
  43.     DDV_MinMaxInt(pDX, m_dwDepth, 2, 1024);
  44.     DDX_Radio(pDX, IDC_A8R8G8B8, m_iFmt);
  45.     DDX_Text(pDX, IDC_FMTDESC, m_strFmtDesc);
  46.     DDX_Text(pDX, IDC_MIPCOUNT, m_numMips);
  47.     DDV_MinMaxInt(pDX, m_numMips, 1, 20);
  48.     //}}AFX_DATA_MAP
  49. }
  50.  
  51.  
  52. BEGIN_MESSAGE_MAP(CNewTextureDlg, CDialog)
  53.     //{{AFX_MSG_MAP(CNewTextureDlg)
  54.     ON_BN_CLICKED(IDC_TEXTURE, OnChangeTextureType)
  55.     ON_BN_CLICKED(IDC_A8R8G8B8, OnChangeFormat)
  56.     ON_BN_CLICKED(IDC_VOLUMETEXTURE, OnChangeTextureType)
  57.     ON_BN_CLICKED(IDC_CUBEMAP, OnChangeTextureType)
  58.     ON_BN_CLICKED(IDC_A4R4G4B4, OnChangeFormat)
  59.     ON_BN_CLICKED(IDC_A1R5G5B5, OnChangeFormat)
  60.     ON_BN_CLICKED(IDC_R5G6B5, OnChangeFormat)
  61.     ON_BN_CLICKED(IDC_R8G8B8, OnChangeFormat)
  62.     ON_BN_CLICKED(IDC_DXT1, OnChangeFormat)
  63.     ON_BN_CLICKED(IDC_DXT2, OnChangeFormat)
  64.     ON_BN_CLICKED(IDC_DXT3, OnChangeFormat)
  65.     ON_BN_CLICKED(IDC_DXT4, OnChangeFormat)
  66.     ON_BN_CLICKED(IDC_DXT5, OnChangeFormat)
  67.     //}}AFX_MSG_MAP
  68. END_MESSAGE_MAP()
  69.  
  70. /////////////////////////////////////////////////////////////////////////////
  71. // CNewTextureDlg message handlers
  72.  
  73. BOOL CNewTextureDlg::OnInitDialog() 
  74. {
  75.     CDialog::OnInitDialog();
  76.     
  77.     OnChangeTextureType();
  78.     OnChangeFormat();
  79.  
  80.     return TRUE;  // return TRUE unless you set the focus to a control
  81.                   // EXCEPTION: OCX Property Pages should return FALSE
  82. }
  83.  
  84.  
  85. void CNewTextureDlg::OnChangeTextureType() 
  86. {
  87.     UpdateData(TRUE);
  88.  
  89.     if (m_iTexType == 2)
  90.     {
  91.         // Volume Tex
  92.         GetDlgItem(IDC_VOLUMEDEPTHLABEL)->EnableWindow(TRUE);
  93.         GetDlgItem(IDC_DEPTH)->EnableWindow(TRUE);
  94.         
  95.         GetDlgItem(IDC_DXT1)->EnableWindow(FALSE);
  96.         GetDlgItem(IDC_DXT2)->EnableWindow(FALSE);
  97.         GetDlgItem(IDC_DXT3)->EnableWindow(FALSE);
  98.         GetDlgItem(IDC_DXT4)->EnableWindow(FALSE);
  99.         GetDlgItem(IDC_DXT5)->EnableWindow(FALSE);
  100.  
  101.         if (m_iFmt > 4)
  102.             m_iFmt = 0;
  103.     }
  104.     else
  105.     {
  106.         // Normal or Cube Tex
  107.         GetDlgItem(IDC_VOLUMEDEPTHLABEL)->EnableWindow(FALSE);
  108.         GetDlgItem(IDC_DEPTH)->EnableWindow(FALSE);
  109.  
  110.         GetDlgItem(IDC_DXT1)->EnableWindow(TRUE);
  111.         GetDlgItem(IDC_DXT2)->EnableWindow(TRUE);
  112.         GetDlgItem(IDC_DXT3)->EnableWindow(TRUE);
  113.         GetDlgItem(IDC_DXT4)->EnableWindow(TRUE);
  114.         GetDlgItem(IDC_DXT5)->EnableWindow(TRUE);
  115.     }
  116.     UpdateData(FALSE);
  117.     OnChangeFormat();
  118. }
  119.  
  120.  
  121.  
  122. void CNewTextureDlg::OnChangeFormat() 
  123. {
  124.     UpdateData(TRUE);
  125.     switch (m_iFmt)
  126.     {
  127.     case 0:
  128.         m_fmt = D3DFMT_A8R8G8B8;
  129.         m_strFmtDesc.LoadString(IDS_FMTDESC_A8R8G8B8);
  130.         break;
  131.     case 1:
  132.         m_fmt = D3DFMT_A1R5G5B5;
  133.         m_strFmtDesc.LoadString(IDS_FMTDESC_A1R5G5B5);
  134.         break;
  135.     case 2:
  136.         m_fmt = D3DFMT_A4R4G4B4;
  137.         m_strFmtDesc.LoadString(IDS_FMTDESC_A4R4G4B4);
  138.         break;
  139.     case 3:
  140.         m_fmt = D3DFMT_R8G8B8;
  141.         m_strFmtDesc.LoadString(IDS_FMTDESC_R8G8B8);
  142.         break;
  143.     case 4:
  144.         m_fmt = D3DFMT_R5G6B5;
  145.         m_strFmtDesc.LoadString(IDS_FMTDESC_R5G6B5);
  146.         break;
  147.     case 5:
  148.         m_fmt = D3DFMT_DXT1;
  149.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT1);
  150.         break;
  151.     case 6:
  152.         m_fmt = D3DFMT_DXT2;
  153.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT2);
  154.         break;
  155.     case 7:
  156.         m_fmt = D3DFMT_DXT3;
  157.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT3);
  158.         break;
  159.     case 8:
  160.         m_fmt = D3DFMT_DXT4;
  161.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT4);
  162.         break;
  163.     case 9:
  164.         m_fmt = D3DFMT_DXT5;
  165.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT5);
  166.         break;
  167.     }
  168.     UpdateData(FALSE);
  169. }
  170.  
  171. void CNewTextureDlg::OnOK() 
  172. {
  173.     UpdateData(TRUE);
  174.  
  175.     // TODO: Need to do lots of validation of width/height/depth/mipcount here
  176.  
  177.     if (m_iTexType != 2)
  178.         m_dwDepth = 0;
  179.  
  180.     switch (m_iFmt)
  181.     {
  182.     case 0:  m_fmt = D3DFMT_A8R8G8B8;    break;
  183.     case 1:  m_fmt = D3DFMT_A1R5G5B5;    break;
  184.     case 2:  m_fmt = D3DFMT_A4R4G4B4;    break;
  185.     case 3:  m_fmt = D3DFMT_R8G8B8;        break;
  186.     case 4:  m_fmt = D3DFMT_R5G6B5;        break;
  187.     case 5:  m_fmt = D3DFMT_DXT1;        break;
  188.     case 6:  m_fmt = D3DFMT_DXT2;        break;
  189.     case 7:  m_fmt = D3DFMT_DXT3;        break;
  190.     case 8:  m_fmt = D3DFMT_DXT4;        break;
  191.     case 9:  m_fmt = D3DFMT_DXT5;        break;
  192.     }
  193.  
  194.     CDialog::OnOK();
  195. }
  196.  
  197. /////////////////////////////////////////////////////////////////////////////
  198. // CCubeMapDlg dialog
  199.  
  200.  
  201. CCubeMapDlg::CCubeMapDlg(CWnd* pParent /*=NULL*/)
  202.     : CDialog(CCubeMapDlg::IDD, pParent)
  203. {
  204.     //{{AFX_DATA_INIT(CCubeMapDlg)
  205.     m_iFace = 0;
  206.     //}}AFX_DATA_INIT
  207. }
  208.  
  209.  
  210. void CCubeMapDlg::DoDataExchange(CDataExchange* pDX)
  211. {
  212.     CDialog::DoDataExchange(pDX);
  213.     //{{AFX_DATA_MAP(CCubeMapDlg)
  214.     DDX_Radio(pDX, IDC_POSX, m_iFace);
  215.     //}}AFX_DATA_MAP
  216. }
  217.  
  218.  
  219. BEGIN_MESSAGE_MAP(CCubeMapDlg, CDialog)
  220.     //{{AFX_MSG_MAP(CCubeMapDlg)
  221.         // NOTE: the ClassWizard will add message map macros here
  222.     //}}AFX_MSG_MAP
  223. END_MESSAGE_MAP()
  224.  
  225.  
  226. /////////////////////////////////////////////////////////////////////////////
  227. // CVolumeMapDlg dialog
  228.  
  229.  
  230. CVolumeMapDlg::CVolumeMapDlg(CWnd* pParent /*=NULL*/)
  231.     : CDialog(CVolumeMapDlg::IDD, pParent)
  232. {
  233.     //{{AFX_DATA_INIT(CVolumeMapDlg)
  234.     m_powLayers = 0;
  235.     //}}AFX_DATA_INIT
  236. }
  237.  
  238.  
  239. void CVolumeMapDlg::DoDataExchange(CDataExchange* pDX)
  240. {
  241.     CDialog::DoDataExchange(pDX);
  242.     //{{AFX_DATA_MAP(CVolumeMapDlg)
  243.     DDX_Radio(pDX, IDC_RADIO2, m_powLayers);
  244.     //}}AFX_DATA_MAP
  245. }
  246.  
  247.  
  248. BEGIN_MESSAGE_MAP(CVolumeMapDlg, CDialog)
  249.     //{{AFX_MSG_MAP(CVolumeMapDlg)
  250.         // NOTE: the ClassWizard will add message map macros here
  251.     //}}AFX_MSG_MAP
  252. END_MESSAGE_MAP()
  253.  
  254. /////////////////////////////////////////////////////////////////////////////
  255. // CVolumeMapDlg message handlers
  256.  
  257.  
  258. /////////////////////////////////////////////////////////////////////////////
  259. // CChangeFmtDlg dialog
  260.  
  261.  
  262. CChangeFmtDlg::CChangeFmtDlg(CWnd* pParent /*=NULL*/)
  263.     : CDialog(CChangeFmtDlg::IDD, pParent)
  264. {
  265.     //{{AFX_DATA_INIT(CChangeFmtDlg)
  266.     m_iFmt = -1;
  267.     m_strFmtDesc = _T("");
  268.     //}}AFX_DATA_INIT
  269. }
  270.  
  271.  
  272. void CChangeFmtDlg::DoDataExchange(CDataExchange* pDX)
  273. {
  274.     CDialog::DoDataExchange(pDX);
  275.     //{{AFX_DATA_MAP(CChangeFmtDlg)
  276.     DDX_Radio(pDX, IDC_A8R8G8B8, m_iFmt);
  277.     DDX_Text(pDX, IDC_FMTDESC, m_strFmtDesc);
  278.     //}}AFX_DATA_MAP
  279. }
  280.  
  281.  
  282. BEGIN_MESSAGE_MAP(CChangeFmtDlg, CDialog)
  283.     //{{AFX_MSG_MAP(CChangeFmtDlg)
  284.     ON_BN_CLICKED(IDC_A1R5G5B5, OnChangeFmt)
  285.     ON_BN_CLICKED(IDC_A4R4G4B4, OnChangeFmt)
  286.     ON_BN_CLICKED(IDC_A8R8G8B8, OnChangeFmt)
  287.     ON_BN_CLICKED(IDC_DXT1, OnChangeFmt)
  288.     ON_BN_CLICKED(IDC_DXT2, OnChangeFmt)
  289.     ON_BN_CLICKED(IDC_DXT3, OnChangeFmt)
  290.     ON_BN_CLICKED(IDC_DXT4, OnChangeFmt)
  291.     ON_BN_CLICKED(IDC_DXT5, OnChangeFmt)
  292.     ON_BN_CLICKED(IDC_R5G6B5, OnChangeFmt)
  293.     ON_BN_CLICKED(IDC_R8G8B8, OnChangeFmt)
  294.     //}}AFX_MSG_MAP
  295. END_MESSAGE_MAP()
  296.  
  297. /////////////////////////////////////////////////////////////////////////////
  298. // CChangeFmtDlg message handlers
  299.  
  300. BOOL CChangeFmtDlg::OnInitDialog() 
  301. {
  302.     CDialog::OnInitDialog();
  303.     
  304.     if (m_bVolume)
  305.     {
  306.         GetDlgItem(IDC_DXT1)->EnableWindow(FALSE);
  307.         GetDlgItem(IDC_DXT2)->EnableWindow(FALSE);
  308.         GetDlgItem(IDC_DXT3)->EnableWindow(FALSE);
  309.         GetDlgItem(IDC_DXT4)->EnableWindow(FALSE);
  310.         GetDlgItem(IDC_DXT5)->EnableWindow(FALSE);
  311.     }
  312.  
  313.     switch (m_fmt)
  314.     {
  315.     case D3DFMT_A8R8G8B8:
  316.         m_iFmt = 0;
  317.         break;
  318.     case D3DFMT_A1R5G5B5:
  319.         m_iFmt = 1;
  320.         break;
  321.     case D3DFMT_A4R4G4B4:
  322.         m_iFmt = 2;
  323.         break;
  324.     case D3DFMT_R8G8B8:
  325.         m_iFmt = 3;
  326.         break;
  327.     case D3DFMT_R5G6B5:
  328.         m_iFmt = 4;
  329.         break;
  330.     case D3DFMT_DXT1:
  331.         m_iFmt = 5;
  332.         break;
  333.     case D3DFMT_DXT2:
  334.         m_iFmt = 6;
  335.         break;
  336.     case D3DFMT_DXT3:
  337.         m_iFmt = 7;
  338.         break;
  339.     case D3DFMT_DXT4:
  340.         m_iFmt = 8;
  341.         break;
  342.     case D3DFMT_DXT5:
  343.         m_iFmt = 9;
  344.         break;
  345.     }
  346.  
  347.     UpdateFmtDesc();    
  348.  
  349.     UpdateData(FALSE);
  350.  
  351.     return TRUE;  // return TRUE unless you set the focus to a control
  352.                   // EXCEPTION: OCX Property Pages should return FALSE
  353. }
  354.  
  355. void CChangeFmtDlg::OnChangeFmt() 
  356. {
  357.     UpdateData(TRUE);
  358.     UpdateFmtDesc();
  359. }
  360.  
  361. void CChangeFmtDlg::UpdateFmtDesc()
  362. {
  363.     switch (m_iFmt)
  364.     {
  365.     case 0:
  366.         m_fmt = D3DFMT_A8R8G8B8;
  367.         m_strFmtDesc.LoadString(IDS_FMTDESC_A8R8G8B8);
  368.         break;
  369.     case 1:
  370.         m_fmt = D3DFMT_A1R5G5B5;
  371.         m_strFmtDesc.LoadString(IDS_FMTDESC_A1R5G5B5);
  372.         break;
  373.     case 2:
  374.         m_fmt = D3DFMT_A4R4G4B4;
  375.         m_strFmtDesc.LoadString(IDS_FMTDESC_A4R4G4B4);
  376.         break;
  377.     case 3:
  378.         m_fmt = D3DFMT_R8G8B8;
  379.         m_strFmtDesc.LoadString(IDS_FMTDESC_R8G8B8);
  380.         break;
  381.     case 4:
  382.         m_fmt = D3DFMT_R5G6B5;
  383.         m_strFmtDesc.LoadString(IDS_FMTDESC_R5G6B5);
  384.         break;
  385.     case 5:
  386.         m_fmt = D3DFMT_DXT1;
  387.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT1);
  388.         break;
  389.     case 6:
  390.         m_fmt = D3DFMT_DXT2;
  391.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT2);
  392.         break;
  393.     case 7:
  394.         m_fmt = D3DFMT_DXT3;
  395.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT3);
  396.         break;
  397.     case 8:
  398.         m_fmt = D3DFMT_DXT4;
  399.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT4);
  400.         break;
  401.     case 9:
  402.         m_fmt = D3DFMT_DXT5;
  403.         m_strFmtDesc.LoadString(IDS_FMTDESC_DXT5);
  404.         break;
  405.     }
  406.     UpdateData(FALSE);
  407. }
  408.  
  409.