2009-07-11 40 views
1

這可能是一個傾斜的問題:VB6垂直同步模擬器

我在VB6(愚蠢的我)寫一個模擬器。爲了讓仿真器本身的窗口更加清爽,我想抓住顯示器的垂直同步。有沒有可以使用的Windows API調用?或者這是不可能的要求?

回答

1

這最好使用DirectX API WaitForVerticalBlank,從V7起的DirectDraw的一部分實現,我相信。比在RasterStatus中紮根更簡單。

0

WPF設施,其中function on XP但只能工作properly on Vista。您可以bring in open GL但所有視頻卡可能不支持。

唯一有效的解決方案是使用Direct3D,但不必將其用於渲染。只需搭載其功能即可。看起來像IDirect3DDevice9::GetRasterStatus()就是這樣。您的第一個訂單解決方案可以輪詢,直到它報告InVBlank TRUE。然後,您可以執行第二個訂單解決方案,在該解決方案中通過一幀來輪詢它以確定vsync速率和相對時間。然後使用計時器保持同步。也許每半幀醒來一次,並驗證您在vsync之外時是否碰到同一條掃描線。這樣你可以調整時間保持同步。

我有我自己的寵物模擬器,可以使用此功能。如果我編碼解決方案,我會在這裏發佈更多細節。

0

您正在詢問「顯示器的垂直同步」。垂直同步是一種圖形卡設置,可將幀渲染速率鎖定到顯示器刷新速率。根據NVida的說法,「這可以通過消除3D圖像中的橫向撕裂效應來提高圖像質量。」你想知道垂直同步是打開還是關閉,或者你是否在尋找顯示器的刷新率?我不知道該怎麼辦了前者,但你可以得到後者的這種方式:

Private Const CCHDEVICENAME = 32 
Private Const CCHFORMNAME = 32 

Private Type DEVMODE 
    dmDeviceName As String * CCHDEVICENAME 
    dmSpecVersion As Integer 
    dmDriverVersion As Integer 
    dmSize As Integer 
    dmDriverExtra As Integer 
    dmFields As Long 
    dmOrientation As Integer 
    dmPaperSize As Integer 
    dmPaperLength As Integer 
    dmPaperWidth As Integer 
    dmScale As Integer 
    dmCopies As Integer 
    dmDefaultSource As Integer 
    dmPrintQuality As Integer 
    dmColor As Integer 
    dmDuplex As Integer 
    dmYResolution As Integer 
    dmTTOption As Integer 
    dmCollate As Integer 
    dmFormName As String * CCHFORMNAME 
    dmUnusedPadding As Integer 
    dmBitsPerPel As Long 
    dmPelsWidth As Long 
    dmPelsHeight As Long 
    dmDisplayFlags As Long 
    dmDisplayFrequency As Long 
End Type 

Private Declare Function EnumDisplaySettings Lib "user32.dll" Alias _ 
    "EnumDisplaySettingsA" (ByVal lpszDeviceName As String, _ 
    ByVal iModeNum As Long, ByRef lpDevMode As DEVMODE) As Long 

Private Function GetRefreshRate() As Long 

    Dim dm As DEVMODE 

    dm.dmSize = Len(dm) 
    EnumDisplaySettings vbNullString, ENUM_CURRENT_SETTINGS, dm 

    GetRefreshRate = dm.dmDisplayFrequency 

End Function 
0

如果你真的想在VB6中做到這一點,你將不得不看DirectX。 Here是如何在Vb6中執行DirectX的一個很好的起點。 Planet Source CodeCDVG還有一些教程。