Bagaimana cara kalian men-debug GLSL?

Saya baru-baru ini mencoba menulis beberapa kode shader GLSL dan tidak terlalu beruntung ketika shader tidak menggambarkan apa yang saya harapkan (pada dasarnya, semuanya berwarna hitam di layar). Berikut alat yang saya coba:

  1. Integrasi Nvidia NSight VS - Langsung crash saat saya memulai aplikasi, coba pasangkan aplikasi lain bahkan dengan gambar segitiga sederhana dan masih belum berhasil. Cari melalui internet dan forum Nvidia dan tampaknya ini adalah masalah umum, dan sepertinya tidak menemukan solusi apa pun.

  2. glslDevil - Ini dapat memulai aplikasi tetapi kemudian program terus keluar sebelum rendering terjadi, GL Trace adalah

    wglMakeCurrent(0, 0)
    wglDeleteContext(00010000)
    ChildProcess exited
    

    Dapatkan kerusakan lain saat menjalankan aplikasi lain setelah memanggil glDeleteTexture(1, 0314EF74) Proses anak keluar

    Saya tidak tahu apa yang sedang terjadi.

  3. AMD PerfStudio 2 - Tampaknya ini adalah alat yang paling menjanjikan, berhasil menjalankan aplikasi saya dan menampilkan informasi yang diperlukan. Namun, sepertinya tidak mendukung debugging GLSL, saya tidak dapat menelusuri shader dan melihat variabel lokal, dll? Tampaknya hanya mendukung shader DirextX

  4. gDebugger - Alat ini bekerja dengan cukup baik, mirip dengan AMD PerfStudio, tetapi sekali lagi ini bukan debugger, tidak dapat menelusuri kode shader dan mengamati variabel lokal apa pun.

  5. Cetakan - ?? Seseorang di stack overflow mengatakan menggunakan printf, bagaimana saya bisa melakukan printf() di shader?

  6. Konversikan DirectX shader ke GLSL - Karena DirectX shader memiliki alat debugging yang lebih baik, dan ada alat seperti http://sourceforge.net/projects/hlsl2glsl/ untuk otomatis mengubah hlsl ke glsl, sepertinya bisa jadi alternatif. Saya pribadi tidak menyukai solusi ini, dan sangat berharap saya punya pilihan lain.

Adakah yang bisa menyarankan cara Anda men-debug GLSL Anda? Alat apa yang berhasil Anda gunakan?

Saya sedang menjalankan:

  • NVidia GFX 460v2
  • Visual Studio 2008 dan 2010
  • BERCAHAYA
  • OpenGL 2.0

person NachoChip    schedule 23.05.2014    source sumber
comment
Secara implisit maksud Anda di bawah Windows?   -  person Tommy    schedule 24.05.2014
comment
lebih mudah untuk menuliskannya dengan benar dari awal... dan menggunakan beberapa tes visual yang jelas untuk memeriksa apakah perhitungannya berfungsi sebagaimana mestinya   -  person Display Name    schedule 24.05.2014
comment
memperbaiki instalasi NSight Anda akan menjadi saran saya. Pastikan Anda tidak mendengarkan apa pun di port yang didengarkan NSight (Saya menginstal sesuatu bernama freemake studio yang memblokir NSight). Lebih baik lagi, lihat file log Nsight untuk mencari tahu mengapa ia crash   -  person PeterT    schedule 24.05.2014
comment
semuanya berwarna hitam di layar...apakah Anda memeriksa kompilasi shader/status tautan/log Anda? ARB_debug_output?   -  person genpfault    schedule 24.05.2014
comment
Sama seperti genpfault. Sebelum menyalahkan shader saya biasanya memeriksa openGL tidak memunculkan kesalahan atau bahkan peringatan sebelum panggilan undian. Kemudian Anda bisa mengarahkan jari Anda ke arah shader. Dan seperti yang disebutkan Sarge Borsch, seringkali lebih baik menulis shader Anda selangkah demi selangkah daripada menulis semuanya sekaligus dan kemudian harus mencari tahu bagian mana yang gagal.   -  person agrum    schedule 24.05.2014
comment
sayangnya glslDevil telah rusak selama bertahun-tahun. Jika Anda cukup beruntung memiliki basis kode/driver yang cukup lama, ini mungkin cocok untuk Anda, namun karena belum dikelola, kombinasi sempurna sulit didapat. Banyak alat GL berada dalam situasi serupa, termasuk beberapa alat khusus vendor. NSight cukup terpelihara dengan baik selama Anda tidak menggunakan Visual Studio versi terbaru (masih tidak mendukung VS 2013).   -  person Andon M. Coleman    schedule 24.05.2014
comment
Ya, saya memeriksa untuk memastikan shader tidak memiliki kesalahan kompilasi, dan saya menggunakan gDeBugger untuk berhenti ketika menemukan kesalahan opengl juga. Saya pikir saya bisa menghabiskan lebih banyak waktu dan melihat shader langkah demi langkah untuk menemukan masalahnya. Namun, saya merasa kecewa ketika tidak ada alat debugger untuk glsl.   -  person NachoChip    schedule 24.05.2014
comment
Biasanya, saya menggunakan warna untuk men-debug kode shader. Ini berfungsi dengan baik untuk debugging sederhana seperti jika beberapa variabel sama dengan beberapa nilai, atur output menjadi merah. Ini primitif, bud bekerja dengan cukup baik. Tentu saja penting untuk menerapkan kemungkinan mengkompilasi ulang shader selama runtime, ini menghemat banyak waktu!   -  person Jaa-c    schedule 27.05.2014


Jawaban (2)


Anda dapat menentukan keluaran tambahan menggunakan glDrawBuffers lalu memeriksanya (1_ Anda).

Namun itu tidak memperbaiki apa pun ketika primitif berada di luar area gambar.

Kalau tidak, itu adalah pemrograman jadul dengan penalaran murni dan debugging mental.

person ratchet freak    schedule 23.05.2014

Setelah berjuang berjam-jam, saya akhirnya membuat NSight saya berfungsi di mesin saya, dan saya menulis prosesnya di sini dan berharap ini akan membantu seseorang dengan masalah serupa,

  1. Unduh NSight dari https://developer.nvidia.com/nsight-visual-studio-edition-downloads, dan ini melibatkan beberapa langkah pengunduhan, cukup ikuti instruksinya. Saya telah menginstal Nsight Tegra sebelumnya dan mendapatkan menu NSight di Visual Studio saya, namun, ketika saya memulai debugger grafis, aplikasi langsung mogok. Saya pikir integrasi NSight yang disertakan dengan NSight Terga rusak, dan menginstal ulang NSight, ikuti tautan di atas tampaknya memperbaiki masalah

  2. Saat menjalankan debugger grafis NSight, saya tidak dapat men-debug kode shader karena aplikasi saya menggunakan beberapa fungsi yang tidak kompatibel, seperti

    glTexImage2D() glTexEnvf()
    dan masih banyak lagi. Debugger grafis memberi tahu saya bahwa saya dapat memanggil alat bernama Nav.Launcher.exe untuk mengetahui daftar fungsi yang tidak kompatibel dalam aplikasi saya. Namun, saya tidak dapat menemukan alat tersebut di hard drive saya.

  3. Kemudian saya memutuskan untuk menggunakan gDEBugger untuk menjalankan aplikasi saya lagi dan mengaktifkan Breakpoints->Break On Deprecated Function. Ini memungkinkan saya mengetahui semua fungsi yang tidak digunakan lagi yang saya panggil dalam kode saya. Setelah menghapus semua fungsi yang tidak digunakan lagi, fitur debugger bingkai debugger grafis NSight dapat diaktifkan dan saya akhirnya dapat menelusuri kode shader saya baris demi baris di Visual Studio

Semoga ini bisa membantu.

person NachoChip    schedule 26.05.2014