Apa ekstensi file yang benar untuk shaders GLSL? [Tutup]

127

Saya belajar shading glsl dan saya telah menemukan berbagai format file. Saya telah melihat orang-orang memberikan shader .vertdan .fragekstensi verteks dan fragmen mereka . Tapi saya juga melihat .vshdan .fshekstensi, dan bahkan keduanya shader bersama dalam satu .glslfile. Jadi saya bertanya-tanya apakah ada format file standar, atau mana yang 'benar'?

Samssonart
sumber
10
Sejauh yang saya tahu, mereka tidak memiliki ekstensi "benar", karena OpenGL tidak akan membacanya dari disk.
zneak
2
Beberapa orang memanggil mereka .vs dan .fs (dan .gs) untuk membuat eksplisit apa yang ada di dalamnya. Tapi seperti kata zneak, itu benar-benar tidak masalah, tidak ada hal yang "benar".
Damon
11
GEdit menggunakan .glslvdan .glslfketika memilih penyorotan sintaks. Itulah satu-satunya tempat saya melihat di mana itu penting.
Piotr Praszmo

Jawaban:

90

Tidak ada ekstensi file standar untuk shader GLSL. Yang paling umum mungkin .vertdan .frag, karena ini adalah ekstensi yang digunakan Lab 3D di beberapa alat mereka. Tapi itu saja untuk segala bentuk ekstensi standar.

Nicol Bolas
sumber
21
Saya tidak berpikir .vert | .frag adalah nama ekstensi yang bagus untuk shader. Ekstensi adalah sesuatu yang mengidentifikasi kelas umum suatu file. Mereka seharusnya memanggil mereka vertex.glsl dan fragment.glsl.
Autodidact
5
Saya terkejut juga, tetapi bukankah ada sedikit perbedaan dalam sintaksis antara vertex dan fragmen shaders, @SandeepDatta? Dengan cara yang sama .h dan .c mungkin memiliki banyak kesamaan, tetapi mereka digunakan dengan cara yang berbeda.
Joseph Humfrey
7
@SandeepDatta .hppvs .cpp? .hvs. .c? Ada lebih banyak perbedaan sintaksis dan semantik antara vertex dan fragmen shaders daripada ada antara C / C ++ header dan file sumber.
Miles Rout
1
@MilesRout Bahkan tidak berbicara tentang .cc
42
GLSLang, juga dikenal sebagai GLSL Reference Parser atau Reference Compiler , adalah salah satu alat yang dikembangkan oleh 3Dlabs . Itu terdaftar sebagai alat SDK pada opengl.org dan khronos.org. The README daftar ekstensi file mereka mengharapkan untuk file shader: .vert(vertex), .frag(fragmen), .tesc(tessellation control), .tese(tessellation evaluasi), .geom(geometri), .comp(menghitung).
TachyonVortex
93

Tidak ada ekstensi resmi dalam spesifikasi. OpenGL tidak menangani pemuatan shader dari file; Anda hanya memasukkan kode shader sebagai string, jadi tidak ada format file tertentu.

Namun, glslang , kompilator / validator referensi GLSL Khronos, menggunakan ekstensi berikut untuk menentukan tipe shader yang digunakan untuk file:

  • .vert - vertex shader
  • .tesc - shader kontrol tessellation
  • .tese - shader evaluasi tessellation
  • .geom - shader geometri
  • .frag - Shader fragmen
  • .comp - penghitung komputasi
Kolonel Thirty Two
sumber
18

Mengidentifikasi jenis file dengan ekstensi adalah hal yang spesifik untuk Windows. Semua sistem operasi lain menggunakan pendekatan yang berbeda: MacOS X menyimpan tipe file dalam struktur metadata khusus dalam entri sistem file. Kebanyakan * nix mengidentifikasi file dengan menguji struktur internal mereka terhadap database "byte ajaib" yang diketahui; namun editor teks menggunakan ekstensi.

Bagaimanapun, sumber GLSL sama seperti file sumber program lain: teks biasa, dan itulah jenis file mereka.

Ekstensi Anda dapat memilih sesuai keinginan. Saya menggunakan penamaan berikut:

  • ts.glsl
  • gs.glsl
  • vs.glsl
  • fs.glsl

tapi itu pilihan saya dan secara teknis program saya bahkan tidak menerapkan skema penamaan atau ekstensi. Penamaan itu bagi manusia untuk membaca dan mengetahui apa yang ada di dalamnya; memiliki ekstensi utama yang umum mengharuskan saya untuk memiliki aturan hightighing sintaks hanya untuk satu set ekstensi file.

serigala betina
sumber
5
Turun karena OS X terutama menggunakan ekstensi file selama bertahun-tahun.
Frederik Slijkerman
6
@ FrederikSlijkerman: Tidak, tidak. MacOS X adalah Unix pada intinya dan ekstensi file tidak pernah digunakan di sana untuk mengidentifikasi hal. Ya, tipe standar mendapatkan ekstensi file standar, tetapi itu hanya hal yang mudah dibaca manusia. Mungkin Finder dapat mengandalkan ekstensi file sebagai heuristik untuk beberapa jenis. Tetapi jika ia dapat mengidentifikasi file hanya dengan tajuknya atau beberapa byte ajaib, ia akan menggunakannya. Seperti halnya sistem berbasis Unix.
datenwolf
3
+1 Saya menamainya sebagai efek-nama -fs.glsl atau efek-nama -vs.glsl.
legends2k
9
Saya menyadari bahwa saya terlambat dua tahun untuk argumen OS X, tetapi saya merasa harus memasukkan dua sen. Segala sesuatu di atas lapisan UNIX menggunakan LaunchServices untuk menentukan asosiasi file. Setiap file memiliki tipe pengenal seperti com.stackoverflow.file, yang disimpan sebagai metadata. LaunchServices mencoba menebaknya dari tipe MIME terlebih dahulu, jika entri metadata ada. Jika tidak, ia akan mencari ekstensi. Jika tidak cocok, itu akan mencari kode pencipta HFS. Jika tidak ada, itu menyerah. LaunchServices tidak pernah mencoba mengidentifikasi file dengan header atau byte ajaibnya.
zneak
2
Ini berarti bahwa cara paling umum untuk menentukan jenis file pada OS X adalah ekstensi. Ini hanya untuk tujuan mengidentifikasi aplikasi mana yang harus digunakan untuk membuka file mana. Setelah aplikasi membuka file, ia dapat memutuskan sendiri apa yang ingin dilakukan dengannya, terlepas dari apakah ekstensi itu benar untuk jenis konten.
zneak
7

Seperti yang disebutkan orang lain, tidak ada jawaban yang benar dalam arti yang paling ketat. Itu memang menyebutkan bahwa Sublime (dikonfirmasi untuk v2 dan v3) juga mengharapkan .vert dan .frag untuk penyorotan dan validasi sintaksis.

Weavermount
sumber
2
Saya percaya ini hanya benar jika Anda memiliki pustaka GLSL yang diinstal di Sublime, misalnya github.com/WebGLTools/GL-Shader-Validator - Sublime default saya tidak mengenali ekstensi.
Air
Lib Anda terhubung sejauh ini yang paling populer (dan mungkin hanya?) GLSL lib untuk luhur, dan saya menyebut apa yang diharapkan sebagai apa yang diharapkan luhur. Jika Anda menyebut itu terlalu berlebihan, saya akan mengaku bersalah. Tapi ya, Anda benar setidaknya dalam keasyikan itu sebagai editor teks yang patuh akan membuka dokumen teks sembari mengabaikan ekstensi yang tidak diketahuinya.
Weavermount
1
Pada hari ini luhur-GLSL ( github.com/euler0/sublime-glsl ) adalah yang paling populer GLSL Plugin dan menerima set berikut ekstensi: vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl. Jadi ada variasi untuk dipilih :)
F Lekschas
-1

Ada dua cara menulis shader.

Anda dapat menyimpan konten shader vertex dan fragmen shader dalam char *variabel dan mengkompilasi, menautkan dan melampirkan shader ke program.

Cara lain adalah dengan menulis file shader vertex dan fragmen terpisah dengan ekstensi apa pun yang Anda suka dan membacanya untuk mengkompilasi, menautkan dan melampirkan shader ke program.

Jadi konvensi penamaan, seperti .vert / .frag, .vsdr / .fsdr, dll. Semuanya valid selama Anda tahu cara membacanya ...

pengguna2439483
sumber
-2

Seperti yang telah dicakup oleh banyak tanggapan, sebenarnya tidak ada standar; Terserah Anda untuk mengadopsi pendekatan yang paling membantu Anda.

Saya dapat melihat manfaat menggunakan ekstensi shader tipe-spesifik, tetapi preferensi saya adalah menggunakan ekstensi .glsl untuk semua jenis shader, karena Anda hanya perlu menentukan bagaimana shell menggunakan file itu sekali.

Demikian pula, ini juga merupakan pilihan yang baik jika Anda mengedit file shader Anda di Notepad ++, karena Anda dapat mengkonfigurasinya untuk secara otomatis menerapkan sintaks khusus bahasa yang menyoroti semua file shader Anda dengan hanya menentukan satu ekstensi file.

Kelemahan dari pendekatan ini adalah bahwa Anda perlu menggunakan konvensi penamaan Anda sendiri untuk menentukan jenis shader dengan nama file-nya tetapi, bagi saya, manfaatnya lebih besar daripada biayanya.

Lewis
sumber