Bu yüzden kesin olarak .NET altında SharpDX kullanarak bazı DirectX geliştirme yapıyorum (ancak DirectX / C ++ API çözümleri geçerlidir). DirectX kullanarak dikey bir projeksiyonda satırları oluşturmanın en hızlı yolunu arıyorum (örneğin, bilimsel uygulamalar için 2B çizgi çizim simülasyonu).
Oluşturmaya çalıştığım parsel türlerinin bir ekran görüntüsü aşağıdaki gibidir:
Bu tür grafiklerin, satır başına kenar yumuşatma (veya tam ekran AA açık / kapalı) olan veya olmayan milyonlarca segmente, değişken kalınlığa sahip hatlara sahip olması nadir değildir. Çizgiler için köşeleri çok sık (örn. 20 kez / saniye) güncellemem ve GPU'ya olabildiğince fazla yüklemem gerekiyor.
Şimdiye kadar denedim:
- Yazılım oluşturma, örneğin GDI + aslında kötü bir performans değil, ama açıkça CPU'da ağır
- Direct2D API - özellikle Kenar Yumuşatma açıkken GDI'dan daha yavaş
- CPU tarafında köşe renkleri ve mozaikleme kullanarak AA öykünmek için bu yöntemi kullanarak Direct3D10 . Ayrıca yavaş (Ben profilli ve zaman 80% tepe konumlarını hesaplamak için harcanan)
3. yöntem için GPU'ya üçgen şerit göndermek ve her 200 ms'de yeni köşeleri güncellemek için Vertex Buffers kullanıyorum. 100.000 satır segmenti için 5FPS civarında bir yenileme hızı alıyorum. İdeal olarak milyonlara ihtiyacım var!
Şimdi GPU'da mozaikleme yapmak için en hızlı yolun, örneğin bir Geometri Shader'da olacağını düşünüyorum. Köşeleri çizgi listesi olarak gönderebilir veya bir dokuda paketleyebilir ve dörtlü oluşturmak için bir Geometri Gölgelendiricisinde paketini açabilirim. Ya da bir piksel gölgelendiriciye ham noktalar gönderin ve Bresenham Line çizimini tamamen bir piksel gölgelendiriciye uygulayın. HLSL'm 2006'dan itibaren paslı, gölgelendirici model 2, bu yüzden modern GPU'ların yapabileceği çılgın şeyleri bilmiyorum.
Yani soru şudur: - bunu daha önce kimse yaptı mı ve denemek için herhangi bir öneriniz var mı? - Hızla güncellenen geometri ile performansı iyileştirmek için herhangi bir öneriniz var mı (örneğin her 20 ms'de bir yeni köşe listesi)?
21 Ocak GÜNCELLEME
O zamandan beri yukarıdaki yöntem (3) LineStrip ve Dinamik Köşe Tamponları kullanarak Geometri gölgelendiricileri kullanarak uyguladık. Şimdi 100k noktada 100FPS ve 1.000.000 noktada 10FPS alıyorum. Bu çok büyük bir gelişme ama şimdi doldurma oranı ve hesaplama sınırlıyım, bu yüzden diğer teknikleri / fikirleri düşündüm.
- Çizgi Segmenti geometrisinin Donanım Kurulumu ne olacak?
- Sprite Batch ne olacak?
- Peki ya diğer (Piksel gölgelendirici) yönelimli yöntemler?
- GPU veya CPU'da etkin bir şekilde kenetleyebilir miyim?
Yorum ve önerileriniz çok takdir!