Saya belajar shading glsl dan saya telah menemukan berbagai format file. Saya telah melihat orang-orang memberikan shader .vert
dan .frag
ekstensi verteks dan fragmen mereka . Tapi saya juga melihat .vsh
dan .fsh
ekstensi, dan bahkan keduanya shader bersama dalam satu .glsl
file. Jadi saya bertanya-tanya apakah ada format file standar, atau mana yang 'benar'?
127
.glslv
dan.glslf
ketika memilih penyorotan sintaks. Itulah satu-satunya tempat saya melihat di mana itu penting.Jawaban:
Tidak ada ekstensi file standar untuk shader GLSL. Yang paling umum mungkin
.vert
dan.frag
, karena ini adalah ekstensi yang digunakan Lab 3D di beberapa alat mereka. Tapi itu saja untuk segala bentuk ekstensi standar.sumber
.hpp
vs.cpp
?.h
vs..c
? Ada lebih banyak perbedaan sintaksis dan semantik antara vertex dan fragmen shaders daripada ada antara C / C ++ header dan file sumber..vert
(vertex),.frag
(fragmen),.tesc
(tessellation control),.tese
(tessellation evaluasi),.geom
(geometri),.comp
(menghitung).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:
sumber
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:
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.
sumber
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.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.
sumber
vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl
. Jadi ada variasi untuk dipilih :)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 ...
sumber
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.
sumber