WPF 使用 OpenGL 4.5 繪圖太卡?
界面 C# WPF C++/CLI 調用 C++ DLL 封裝的 OpenGL 4.5 繪圖 啟動後幾十秒拖動界面明顯卡頓
使用了 WindowsFormsHost 載入 C++/CLI UserControl繪圖裡只有 glClear wglSwapBuffers 注釋掉就流暢了 內存 CPU 佔用也不高 其它程序都是流暢的
DispatcherTimer timer = new DispatcherTimer();
timer.Tick += new EventHandler(updateTimer_Tick); //調用gl繪圖
timer.Interval = TimeSpan.FromMilliseconds(30);
timer.Start();
你幾乎用了最差的組合。
- 絕不該用定時器。如果你想實時,就在CompositionTarget.Rendering或者Idle裡面調用繪製。WPF自己會做同步,讓它做好了。定時器是所有遊戲開發入門書里就提到過的大忌。
- WPF是D3D的,你要加上OpenGL的,本身就會需要系統或驅動多一次同步,可能最高速度就是30FPS了。用D3D渲染主窗口的會好得多。
必須用自己的定時器去刷新嗎?winform的控制項不是有OnPaint嘛,在裡面draw不行嗎?
如果是需要保證一定的刷新率的話,那也不可以假定幀率固定,應該要根據時間間隔去估算幀率。
我覺得偷懶的做法就是拿定時器去invalidate控制項,然後靠wpf/winform自身去控制控制項內部的刷新。
非專業人士,想法有錯的地方還請多多指教。如果必須 Open GL 可以研究下 Google Angle (Almost Native Graphics Layer Engine) + D3DImage 的組合試試
ref: l3m/wpf-gles
ref: https://groups.google.com/forum/#!topic/angleproject/uhHloFsmcNY
ref: http://lists.qt-project.org/pipermail/interest/2015-September/018985.html
WPF本身就是Direct3D繪製後端的,如果使用OpenGL,反而需要同步,造成性能大幅損耗。當然,如果非要使用OpenGL,可以藉助angle庫,angle是用OpenGL的介面封裝Direct3D的庫
opengl應該配winform吧,wpf不是有dx
你都用WPF了為什麼不使用DirectX繪圖
推薦閱讀:
※渲染的時候是不是頂點數目越少越好?
※WebGL 和 OpenGL ES 有什麼區別?
※WebGL 是否需要以 OpenGL 為學習基礎?
※OpenGL ES 和 Unity3D 是什麼關係?
※openGL與界面兼容?
TAG:OpenGL | C | C# | WindowsPresentationFoundationWPF |