Eto: Dukungan untuk Kontrol Render OpenGL.

Dibuat pada 17 Jul 2012  ·  23Komentar  ·  Sumber: picoe/Eto

Singkatnya: apakah ada semacam OpenGL Render Control yang direncanakan yang digunakan bersama dengan OpenTK?

enhancement help wanted

Komentar yang paling membantu

Adakah pembaruan pada kontrol OpenGL untuk eto?

Semua 23 komentar

Tidak secara khusus direncanakan, tetapi cukup mudah untuk dilakukan. Sepertinya OpenTK berlisensi MIT sehingga cocok dengan Eto.Forms.

Mungkin ada beberapa komplikasi, karena Anda harus mengkompilasi aplikasi Anda dengan referensi berbeda berdasarkan platform target, kecuali Eto.Forms memiliki semacam pembungkus di sekitar OpenTK, yang saya tidak ingin lakukan.

Saya telah mengamati bahwa Anda memiliki DLL platform terpisah untuk Windows, Gtk dan Mac, bukankah itu lokasi untuk menempatkan kode khusus platform.
untuk menggunakan OpenTK Anda perlu merujuk satu platform umum OpenTK.dll independen dan satu platform khusus yang kodenya dapat ditambahkan ke Eto.Platform.*.dll yang ada karena kemungkinan besar sudah berisi referensi yang diperlukan.

Saya telah bekerja dengan memodifikasi dan menghapus garpu OpenTK yang ditemukan di https://github.com/hultqvist/opentk
Tetapi berhati-hatilah bahwa fork memiliki beberapa modifikasi besar yang membuatnya tidak kompatibel dengan proyek Opentk asli (terutama menggunakan vektor kolom).

Masih bagian yang saya bicarakan tidak berubah dalam hal itu, khususnya proyek OpenTK.GLControl dan OpenTK.GLWidget untuk Windows dan Gtk, saya kira yang serupa dapat dibuat untuk Mac tetapi saat ini satu-satunya implementasi adalah dari aslinya Kelas jendela permainan OpenTK.

Memang, itu akan menjadi cara untuk melakukan itu.

Saya melihat ini sedikit - Sangat disayangkan bahwa MonoMac menggunakan OpenTK khusus yang dibangun ke dalam MonoMac.dll.. Kita mungkin harus membuat pembungkus di seluruh API, yang akan sangat disayangkan

Kemajuan telah dibuat pada kontrol OpenGL untuk eto di sini:

https://github.com/bchavez/SharpFlame/tree/eto/source

Apakah Kontrol OpenGL ini dalam keadaan dapat digunakan?

Saya belum mencobanya jadi saya tidak yakin, meskipun saya telah melihat tangkapan layarnya bekerja di SharpFlame.. @bchavez , apakah Anda memiliki info lebih lanjut tentang status kontrol OpenGL Anda?

  • Eto.Gl - _Eto Control_, tapi saya belum benar-benar memformalkan API.
  • Eto.Gl.Windows - GL khusus platform harus berfungsi apa adanya di windows menggunakan Eto.Gl .
  • Eto.Gl.Linux - GL khusus platform di Linux perlu diperbarui karena beberapa perubahan eto baru. Seharusnya tidak sulit untuk memperbarui, hanya tidak punya cukup waktu.
  • Eto.Gl.Mac - Masalah _gotcha_ yang agak sulit yang masih harus saya selesaikan.

Satu masalah utama pada Mac/OSX adalah, secara default, konteks GL baru yang dibuat dalam aplikasi yang sama tidak dibagikan sumber daya. Ini berarti, Anda mendapatkan konteks sumber daya GL yang terisolasi per permukaan. IE: Jika Anda memiliki aplikasi yang menggunakan beberapa permukaan GL, Anda perlu memuat tekstur n kali per permukaan, menghabiskan n kali jumlah memori tekstur.

Perilaku ini berbeda di Linux dan Windows, secara default, konteks OpenGL baru adalah sumber daya yang dibagikan (dalam aplikasi yang sama). Jadi, jika Anda memiliki beberapa permukaan GL (di Linux atau Windows) dalam aplikasi yang sama dan memuat tekstur, Anda hanya memuat sumber daya tekstur sekali bukan n kali per permukaan.

Beberapa upaya peretasan yang saya lakukan untuk membuatnya berfungsi di Mac adalah MacGLView1-7.cs :
https://github.com/bchavez/SharpFlame/tree/eto/source/Eto.Gl.Mac

Akhirnya, saya (atau orang lain) akan menyelesaikan masalah sehingga perilaku lintas platform konsisten. Hanya belum punya cukup waktu atm.

Dokumen OSX untuk masalah ini ada di sini:

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_contexts/opengl_contexts.html

Untuk memperjelas, dengan "konteks GL" yang saya maksud, khususnya, konteks sumber daya GL . (Status objek bersama seperti yang dijelaskan dalam tautan di atas).

Terima kasih atas klarifikasinya. Saya sudah mencoba membuatnya berfungsi di Windows dan Linux.
Windows bekerja dengan baik dengan Wpf, tetapi di Linux dengan Gtk#2 tidak mau bekerja: http://hastebin.com/okewirerem
Ini kodenya jika Anda ingin melihatnya: https://github.com/PowerOfCode/Eto/tree/opengl-control/Source/Eto.Gl.Gtk

Saya menemukan itu ada hubungannya dengan rendering teks. Jika Anda memiliki beberapa kontrol lain pada tata letak, yang membuat teks, itu langsung mogok. Jika teks kontrol itu kosong, itu tidak mogok.

Wah, itu aneh.

@benklett

Saya mengalami masalah yang sama. Jika Anda masih belum menemukan perbaikannya, Anda harus meletakkan ini sebagai baris pertama dari program gtk Anda:

C# [STAThread] public static void Main(string[] args) { //this MUST be the first line in the program or any text + the opengl window will cause it to segfault OpenTK.Toolkit.Init (); ....

Ini karena beberapa hal aneh dengan x_multithreading atau sesuatu, jadi OpenTK harus masuk ke sana sebelum gtk diinisialisasi. Bukan hal pertama yang harus Anda lakukan, tetapi cukup awal.

Terima kasih banyak atas bantuan Anda, saya harus mencoba jika itu berhasil ketika saya pulang.

Adakah pembaruan pada kontrol OpenGL untuk eto?

Kembali. etoViewport, itu bisa dilakukan dengan dukungan WPF dan GTK3, tetapi GTK3 membingungkan saya tentang bagaimana melanjutkan - tidak jelas bagaimana mengatur konteks Kairo yang diperlukan (bagi saya).

Tidak tahu bagaimana etoViewport melakukannya, tetapi Gtk 3 memiliki widget GLArea untuk rendering OpenGL: https://developer.gnome.org/gtk3/unstable/GtkGLArea.html

Adakah pembaruan untuk yang satu ini?

@feliwir etoViewport berfungsi sampai sekarang untuk setidaknya WPF, WinForms, dan macOS. Saya tidak yakin status GTK sekalipun.

GTK bekerja dalam pengujian saya di bawah VirtualBox/CentOS 7.x dan juga VMWare/Linux Mint. Mungkin ada beberapa keanehan driver, terutama di bawah VirtualBox, di mana kontrol OpenGL tampaknya melayang di atas semua jendela lainnya. Saya pikir ini mungkin bug di VirtualBox, karena tidak terlihat di VMWare.

GTK3 tidak diimplementasikan untuk etoViewport.

@philstopford Saya tidak suka ketergantungan pada OpenTK, ada rencana untuk menghapusnya/memungkinkan panggilan balik khusus untuk pembuatan konteks?

Maaf Anda tidak menyukainya, tetapi saya tidak mengerti mengapa. Tambalan dipersilakan, jika pendekatan saat ini tidak berhasil untuk Anda. Saya sendiri belum benar-benar berencana untuk mengubahnya : OpenTK telah menjadi pekerja keras yang andal. Upaya OpenGL sebelumnya, saya menggunakan SharpGL dan kemudian proyek itu ditinggalkan. Sebaliknya, OpenTK dipelihara secara aktif dan multi-platform.

Pindah ke: https://github.com/picoe/Eto.Toolkit/issues/7

@cwensley ini bisa ditutup.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat