📄 options.cpp
字号:
BOOL COptRender::OnInitDialog() { CDialog::OnInitDialog(); WinGPAC *gpac = GetApp(); const char *sOpt; sOpt = gf_cfg_get_key(gpac->m_user.config, "Rendering", "RendererName"); m_Use3DRender.SetCheck( (sOpt && strstr(sOpt, "3D")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Rendering", "ForceSceneSize"); m_ForceSize.SetCheck( (sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Rendering", "FrameRate"); if (!sOpt) sOpt = "30.0"; s32 select = 0; while (m_BIFSRate.GetCount()) m_BIFSRate.DeleteString(0); for (s32 i = 0; i<NUM_RATES; i++) { m_BIFSRate.AddString(BIFSRates[i]); if (sOpt && !stricmp(sOpt, BIFSRates[i]) ) select = i; } m_BIFSRate.SetCurSel(select); sOpt = gf_cfg_get_key(gpac->m_user.config, "Rendering", "FastRender"); m_FastRender.SetCheck( (sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Rendering", "AntiAlias"); while (m_AntiAlias.GetCount()) m_AntiAlias.DeleteString(0); m_AntiAlias.AddString("None"); m_AntiAlias.AddString("Text only"); m_AntiAlias.AddString("Complete"); select = 2; if (sOpt && !stricmp(sOpt, "Text")) select = 1; else if (sOpt && !stricmp(sOpt, "None")) select = 0; m_AntiAlias.SetCurSel(select); /*graphics driver enum*/ while (m_Graphics.GetCount()) m_Graphics.DeleteString(0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Rendering", "Raster2D"); s32 count = gf_modules_get_count(gpac->m_user.modules); GF_BaseInterface *ifce; select = 0; u32 to_sel = 0; for (i=0; i<count; i++) { ifce = gf_modules_load_interface(gpac->m_user.modules, i, GF_RASTER_2D_INTERFACE); if (!ifce) continue; if (sOpt && !stricmp(ifce->module_name, sOpt)) select = to_sel; m_Graphics.AddString(ifce->module_name); gf_modules_close_interface(ifce); to_sel++; } m_Graphics.SetCurSel(select); m_DrawBounds.AddString("None"); m_DrawBounds.AddString("Box/Rect"); m_DrawBounds.AddString("AABB Tree"); sOpt = gf_cfg_get_key(gpac->m_user.config, "Rendering", "BoundingVolume"); if (sOpt && !stricmp(sOpt, "Box")) m_DrawBounds.SetCurSel(1); else if (sOpt && !stricmp(sOpt, "AABB")) m_DrawBounds.SetCurSel(2); else m_DrawBounds.SetCurSel(0); return TRUE; }Bool COptRender::SaveOptions(){ char str[50]; WinGPAC *gpac = GetApp(); gf_cfg_set_key(gpac->m_user.config, "Rendering", "FastRender", m_FastRender.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Rendering", "ForceSceneSize", m_ForceSize.GetCheck() ? "yes" : "no"); s32 sel = m_BIFSRate.GetCurSel(); gf_cfg_set_key(gpac->m_user.config, "Rendering", "FrameRate", BIFSRates[sel]); sel = m_AntiAlias.GetCurSel(); gf_cfg_set_key(gpac->m_user.config, "Rendering", "AntiAlias", (sel==0) ? "None" : ( (sel==1) ? "Text" : "All")); sel = m_DrawBounds.GetCurSel(); gf_cfg_set_key(gpac->m_user.config, "Rendering", "BoundingVolume", (sel==2) ? "AABB" : (sel==1) ? "Box" : "None"); m_Graphics.GetWindowText(str, 50); gf_cfg_set_key(gpac->m_user.config, "Rendering", "Raster2D", str); const char *opt; opt = gf_cfg_get_key(gpac->m_user.config, "Rendering", "RendererName"); if (!opt || strstr(opt, "2D")) { if (!m_Use3DRender.GetCheck()) return 0; gf_cfg_set_key(gpac->m_user.config, "Rendering", "RendererName", "GPAC 3D Renderer"); return 1; } if (m_Use3DRender.GetCheck()) return 0; gf_cfg_set_key(gpac->m_user.config, "Rendering", "RendererName", "GPAC 2D Renderer"); return 1;}COptRender2D::COptRender2D(CWnd* pParent /*=NULL*/) : CDialog(COptRender2D::IDD, pParent){ //{{AFX_DATA_INIT(COptRender2D) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT}void COptRender2D::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptRender2D) DDX_Control(pDX, IDC_FORMAT_YUV, m_YUVFormat); DDX_Control(pDX, IDC_YUV, m_NoYUV); DDX_Control(pDX, IDC_ZOOM_SCALABLE, m_Scalable); DDX_Control(pDX, IDC_DIRECTRENDER, m_DirectRender); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COptRender2D, CDialog) //{{AFX_MSG_MAP(COptRender2D) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COptRender2D message handlersBOOL COptRender2D::OnInitDialog() { CDialog::OnInitDialog(); WinGPAC *gpac = GetApp(); const char *sOpt; sOpt = gf_cfg_get_key(gpac->m_user.config, "Render2D", "DirectRender"); if (sOpt && !stricmp(sOpt, "yes")) { m_DirectRender.SetCheck(1); } else { m_DirectRender.SetCheck(0); } sOpt = gf_cfg_get_key(gpac->m_user.config, "Render2D", "ScalableZoom"); if (sOpt && !stricmp(sOpt, "no")) { m_Scalable.SetCheck(0); } else { m_Scalable.SetCheck(1); } sOpt = gf_cfg_get_key(gpac->m_user.config, "Render2D", "DisableYUV"); if (sOpt && !stricmp(sOpt, "yes")) { m_NoYUV.SetCheck(1); } else { m_NoYUV.SetCheck(0); } SetYUV(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}void COptRender2D::SetYUV(){ WinGPAC *gpac = GetApp(); u32 yuv_format = gf_term_get_option(gpac->m_term, GF_OPT_YUV_FORMAT); if (!yuv_format) { m_YUVFormat.SetWindowText("(No YUV used)"); } else { char str[100]; sprintf(str, "(%s used)", gf_4cc_to_str(yuv_format)); m_YUVFormat.SetWindowText(str); }}void COptRender2D::SaveOptions(){ WinGPAC *gpac = GetApp(); gf_cfg_set_key(gpac->m_user.config, "Render2D", "DirectRender", m_DirectRender.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Render2D", "ScalableZoom", m_Scalable.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Render2D", "DisableYUV", m_NoYUV.GetCheck() ? "yes" : "no");}COptRender3D::COptRender3D(CWnd* pParent /*=NULL*/) : CDialog(COptRender3D::IDD, pParent){ //{{AFX_DATA_INIT(COptRender3D) //}}AFX_DATA_INIT}void COptRender3D::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptRender3D) DDX_Control(pDX, IDC_BITMAP_USE_PIXEL, m_BitmapPixels); DDX_Control(pDX, IDC_DISABLE_TX_RECT, m_DisableTXRect); DDX_Control(pDX, IDC_RASTER_OUTLINE, m_RasterOutlines); DDX_Control(pDX, IDC_EMUL_POW2, m_EmulPow2); DDX_Control(pDX, IDC_DISABLE_POLY_AA, m_PolyAA); DDX_Control(pDX, IDC_DRAW_NORMALS, m_DrawNormals); DDX_Control(pDX, IDC_BACK_CULL, m_BackCull); DDX_Control(pDX, IDC_DRAW_MODE, m_Wireframe); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COptRender3D, CDialog) //{{AFX_MSG_MAP(COptRender3D) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COptRender3D message handlersBOOL COptRender3D::OnInitDialog() { CDialog::OnInitDialog(); WinGPAC *gpac = GetApp(); const char *sOpt; m_DrawNormals.AddString("Never"); m_DrawNormals.AddString("Per Face"); m_DrawNormals.AddString("Per Vertex"); sOpt = gf_cfg_get_key(gpac->m_user.config, "Render3D", "DrawNormals"); if (sOpt && !stricmp(sOpt, "PerFace")) m_DrawNormals.SetCurSel(1); else if (sOpt && !stricmp(sOpt, "PerVertex")) m_DrawNormals.SetCurSel(2); else m_DrawNormals.SetCurSel(0); m_BackCull.AddString("Off"); m_BackCull.AddString("On"); m_BackCull.AddString("Alpha"); sOpt = gf_cfg_get_key(gpac->m_user.config, "Render3D", "BackFaceCulling"); if (sOpt && !stricmp(sOpt, "Off")) m_BackCull.SetCurSel(0); else if (sOpt && !stricmp(sOpt, "Alpha")) m_BackCull.SetCurSel(2); else m_BackCull.SetCurSel(1); m_Wireframe.AddString("Solid"); m_Wireframe.AddString("Wireframe"); m_Wireframe.AddString("Both"); sOpt = gf_cfg_get_key(gpac->m_user.config, "Render3D", "Wireframe"); if (sOpt && !stricmp(sOpt, "WireOnly")) m_Wireframe.SetCurSel(1); else if (sOpt && !stricmp(sOpt, "WireOnSolid")) m_Wireframe.SetCurSel(2); else m_Wireframe.SetCurSel(0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Render3D", "RasterOutlines"); m_RasterOutlines.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Render3D", "EmulatePOW2"); m_EmulPow2.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Render3D", "PolygonAA"); m_PolyAA.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Render3D", "BitmapCopyPixels"); m_BitmapPixels.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Render3D", "DisableRectExt"); m_DisableTXRect.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}void COptRender3D::SaveOptions(){ WinGPAC *gpac = GetApp(); u32 sel = m_DrawNormals.GetCurSel(); gf_cfg_set_key(gpac->m_user.config, "Render3D", "DrawNormals", (sel==2) ? "PerVertex" : (sel==1) ? "PerFace" : "Never"); sel = m_BackCull.GetCurSel(); gf_cfg_set_key(gpac->m_user.config, "Render3D", "BackFaceCulling", (sel==2) ? "Alpha" : (sel==1) ? "On" : "Off"); sel = m_Wireframe.GetCurSel(); gf_cfg_set_key(gpac->m_user.config, "Render3D", "Wireframe", (sel==2) ? "WireOnSolid" : (sel==1) ? "WireOnly" : "WireNone"); gf_cfg_set_key(gpac->m_user.config, "Render3D", "RasterOutlines", m_RasterOutlines.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Render3D", "EmulatePOW2", m_EmulPow2.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Render3D", "PolygonAA", m_PolyAA.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Render3D", "DisableRectExt", m_DisableTXRect.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Render3D", "BitmapCopyPixels", m_BitmapPixels.GetCheck() ? "yes" : "no");}COptVideo::COptVideo(CWnd* pParent /*=NULL*/) : CDialog(COptVideo::IDD, pParent){ //{{AFX_DATA_INIT(COptVideo) //}}AFX_DATA_INIT}void COptVideo::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptVideo) DDX_Control(pDX, IDC_SWITCH_RES, m_SwitchRes); DDX_Control(pDX, IDC_VIDEO_LIST, m_Videos); DDX_Control(pDX, IDC_HWMEMORY, m_UseHWMemory); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COptVideo, CDialog) //{{AFX_MSG_MAP(COptVideo) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COptVideo message handlersBOOL COptVideo::OnInitDialog() { CDialog::OnInitDialog(); WinGPAC *gpac = GetApp(); const char *sOpt; sOpt = gf_cfg_get_key(gpac->m_user.config, "Video", "SwitchResolution"); m_SwitchRes.SetCheck(sOpt && !stricmp(sOpt, "yes") ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Video", "UseHardwareMemory"); m_UseHWMemory.SetCheck(sOpt && !stricmp(sOpt, "yes") ? 1 : 0); u32 count = gf_modules_get_count(gpac->m_user.modules); GF_BaseInterface *ifce; s32 to_sel = 0; s32 select = 0; /*video drivers enum*/ while (m_Videos.GetCount()) m_Videos.DeleteString(0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Video", "DriverName"); for (u32 i=0; i<count; i++) { ifce = gf_modules_load_interface(gpac->m_user.modules, i, GF_VIDEO_OUTPUT_INTERFACE); if (!ifce) continue; if (sOpt && !stricmp(ifce->module_name, sOpt)) select = to_sel; m_Videos.AddString(ifce->module_name); gf_modules_close_interface(ifce); to_sel++; } m_Videos.SetCurSel(select); return TRUE; }void COptVideo::SaveOptions(){ WinGPAC *gpac = GetApp(); char str[50]; gf_cfg_set_key(gpac->m_user.config, "Video", "SwitchResolution", m_SwitchRes.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Video", "UseHardwareMemory", m_UseHWMemory.GetCheck() ? "yes" : "no"); m_Videos.GetWindowText(str, 50); gf_cfg_set_key(gpac->m_user.config, "Video", "DriverName", str);}COptAudio::COptAudio(CWnd* pParent /*=NULL*/) : CDialog(COptAudio::IDD, pParent){ //{{AFX_DATA_INIT(COptAudio) //}}AFX_DATA_INIT}void COptAudio::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptAudio) DDX_Control(pDX, IDC_AUDIO_NOTIFS, m_Notifs); DDX_Control(pDX, IDC_DRIVER_LIST, m_DriverList); DDX_Control(pDX, IDC_AUDIO_RESYNC, m_AudioResync); DDX_Control(pDX, IDC_AUDIO_MULTICH, m_AudioMultiCH); DDX_Control(pDX, IDC_AUDIO_FPS, m_AudioDur); DDX_Control(pDX, IDC_SPIN_FPS, m_SpinFPS); DDX_Control(pDX, IDC_FORCE_AUDIO, m_ForceConfig); DDX_Control(pDX, IDC_SPIN_AUDIO, m_AudioSpin); DDX_Control(pDX, IDC_EDIT_AUDIO, m_AudioEdit); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COptAudio, CDialog) //{{AFX_MSG_MAP(COptAudio) ON_BN_CLICKED(IDC_FORCE_AUDIO, OnForceAudio) ON_CBN_SELCHANGE(IDC_DRIVER_LIST, OnSelchangeDriverList) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COptAudio message handlersBOOL COptAudio::OnInitDialog() { CDialog::OnInitDialog(); m_AudioSpin.SetBuddy(& m_AudioEdit); m_SpinFPS.SetBuddy(& m_AudioDur); m_SpinFPS.SetRange(0, 2000); WinGPAC *gpac = GetApp(); const char *sOpt; sOpt = gf_cfg_get_key(gpac->m_user.config, "Audio", "ForceConfig"); if (sOpt && !stricmp(sOpt, "yes")) { m_ForceConfig.SetCheck(1); } else { m_ForceConfig.SetCheck(0); } sOpt = gf_cfg_get_key(gpac->m_user.config, "Audio", "NumBuffers"); if (sOpt) { m_AudioEdit.SetWindowText(sOpt); } else { m_AudioEdit.SetWindowText("2"); } sOpt = gf_cfg_get_key(gpac->m_user.config, "Audio", "TotalDuration"); if (sOpt) { m_AudioDur.SetWindowText(sOpt); } else { m_AudioDur.SetWindowText("120"); } OnForceAudio(); sOpt = gf_cfg_get_key(gpac->m_user.config, "Audio", "NoResync"); m_AudioResync.SetCheck( (sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Audio", "DisableMultiChannel"); m_AudioMultiCH.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); /*driver enum*/ while (m_DriverList.GetCount()) m_DriverList.DeleteString(0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Audio", "DriverName"); u32 count = gf_modules_get_count(gpac->m_user.modules); GF_BaseInterface *ifce; s32 select = 0; s32 to_sel = 0; for (u32 i=0; i<count; i++) { ifce = gf_modules_load_interface(gpac->m_user.modules, i, GF_AUDIO_OUTPUT_INTERFACE); if (!ifce) continue; if (sOpt && !stricmp(ifce->module_name, sOpt)) select = to_sel; m_DriverList.AddString(ifce->module_name); gf_modules_close_interface(ifce); to_sel++; } m_DriverList.SetCurSel(select); m_Notifs.ShowWindow(SW_HIDE); if (sOpt && strstr(sOpt, "DirectSound")) m_Notifs.ShowWindow(SW_SHOW); sOpt = gf_cfg_get_key(gpac->m_user.config, "Audio", "DisableNotification"); if (sOpt && !stricmp(sOpt, "yes")) m_Notifs.SetCheck(1); else m_Notifs.SetCheck(0); return TRUE; }void COptAudio::SaveOptions(){ WinGPAC *gpac = GetApp(); char str[50]; gf_cfg_set_key(gpac->m_user.config, "Audio", "ForceConfig", m_ForceConfig.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Audio", "NoResync", m_AudioResync.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Audio", "DisableMultiChannel", m_AudioMultiCH.GetCheck() ? "yes" : "no"); m_AudioEdit.GetWindowText(str, 20); gf_cfg_set_key(gpac->m_user.config, "Audio", "NumBuffers", str); m_AudioDur.GetWindowText(str, 20); gf_cfg_set_key(gpac->m_user.config, "Audio", "TotalDuration", str); m_DriverList.GetWindowText(str, 50); gf_cfg_set_key(gpac->m_user.config, "Audio", "DriverName", str); if (strstr(str, "DirectSound")) { gf_cfg_set_key(gpac->m_user.config, "Audio", "DisableNotification", m_Notifs.GetCheck() ? "yes" : "no"); }}void COptAudio::OnForceAudio() { BOOL en = m_ForceConfig.GetCheck(); m_AudioSpin.EnableWindow(en); m_AudioEdit.EnableWindow(en); m_SpinFPS.EnableWindow(en); m_AudioDur.EnableWindow(en);}void COptAudio::OnSelchangeDriverList()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -