これは斜めの質問かもしれません。VB6(愚かな私)でエミュレータを書いています。エミュレータ自体のスムーズなウィンドウのリフレッシュのために、私はモニターの垂直同期を取りたいと思います。私が使用できるWindows API呼び出しはありますか?それともこれは不可能な要求ですか?エミュレータのVB6垂直同期
答えて
、私は信じています。 RasterStatusを迂回するよりもずっと簡単です。
がありますが、作業はproperly on Vistaです。WPFです。 bring in open GLでも可能ですが、すべてのビデオカードでサポートされているわけではありません。
唯一の効果的な解決策は、Direct3Dを使用することですが、レンダリングに使用する必要はありません。単にその能力を抱きしめるだけです。 IDirect3DDevice9::GetRasterStatus()のように見えるだけのことです。 InVBlank TRUEを報告するまで、最初の注文ソリューションはそれをポーリングできます。次に、1つのフレームでポーリングしてvsyncレートと相対的なタイミングを決定する2次ソリューションを実行できます。その後、タイマーを使用して同期を維持します。おそらく、ハーフフレームごとに目を覚まし、vsyncが外れたときに同じスキャンラインを叩いていることを確認してください。そうすれば、タイミングを調整して同期をとることができます。
私はこの機能を使用できる自分のペットエミュレータを持っています。ソリューションをコーディングすると、ここで詳細を掲載します。
"モニターの垂直同期"を求めています。垂直同期は、フレームのレンダリングレートをモニタのリフレッシュレートに固定するグラフィックスカードの設定です。 NVida氏によると、「これは、3D画像の水平方向の引き裂き効果を排除することによって画質を向上させます。垂直同期がオンかオフか、またはモニタのリフレッシュレートを探していますか?私は元を行う方法がわからない、しかし、あなたは後者をこのように得ることができます。これは最高のDirectX API WaitForVerticalBlank、以降V7からのDirectDrawの一部を使用して達成される
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
VB6でこれを実際に行いたい場合は、DirectXを参照する必要があります。 Hereは、Vb6でDirectXを実行する方法の良い出発点です。 Planet Source CodeとCDVGにはもう少しチュートリアルがあります。
- 1. 同期のRichTextBox垂直スクロール
- 2. 垂直スクロールビューの垂直ビューページャ
- 3. OpenGL垂直同期でレンダリングが速くなる
- 4. OpenGLで垂直同期を有効にする方法は?
- 5. jQueryデータテーブル - 予期しない垂直スクロールバー
- 6. Graphviz同じレベル垂直順序
- 7. MFCで2つのリストコントロールを垂直に同期させる方法
- 8. 垂直のListView
- 9. LinearLayout垂直ディバイダ?
- 10. RichTextBox垂直オートスクロールテキスト
- 11. は垂直
- 12. 垂直ラジオボタン
- 13. 垂直整列
- 14. Vaadin:垂直表
- 15. 垂直-ALIGN
- 16. 3垂直セクション
- 17. 垂直スライドメニュー
- 18. 垂直スクロールハブタイル
- 19. NSTextField垂直アライメント
- 20. OnClick垂直ナビゲーション
- 21. 垂直スクロールバージャンゴ - tables2
- 22. 垂直ブートストラップパネルヘッダー
- 23. 垂直メニューが
- 24. 垂直スライディングメニューバー
- 25. フレックスボックス垂直センタリングプラススティッキーフッタ
- 26. 垂直スクロール
- 27. 垂直検索
- 28. 垂直スワイプに
- 29. ケンドーエリアチャート - 垂直スロープ?
- 30. は垂直