GLSL gölgelendiricileri için doğru dosya uzantısı nedir? [kapalı]


127

Glsl gölgelendirmeyi öğreniyorum ve farklı dosya formatlarıyla karşılaştım. Köşe ve parça gölgelendiricileri .vertve .fraguzantılarını veren insanlar gördüm . Ama aynı zamanda gördüğüm .vshve .fshtek bir araya hem shader'ları uzantıları ve hatta .glsldosyanın. Bu yüzden, standart bir dosya biçimi olup olmadığını veya 'doğru' biçimin hangisi olduğunu merak ediyorum.


10
Bildiğim kadarıyla, OpenGL zaten onları diskten okumayacağı için "doğru" uzantılara sahip değiller.
zneak

2
Bazı insanlar içindekileri açıklığa kavuşturmak için bunlara .vs ve .fs (ve .gs) adını verir. Ama zneak'ın dediği gibi, gerçekten önemli değil, "doğru" bir şey yok.
Damon

11
GEdit, sözdizimi vurgulamasını seçerken .glslvve kullanır .glslf. Önemli olduğu yerde gördüğüm tek yer orası.
Piotr Praszmo

Yanıtlar:


90

GLSL gölgelendiricileri için standart bir dosya uzantısı yoktur. En yaygın olanlar muhtemelen .vertve .fragbunlar 3D Labs'ın bazı araçlarında kullandığı uzantılardır. Ancak, herhangi bir standart uzantı biçimi için bu kadar.


21
.Vert | .frag'ın gölgelendiriciler için iyi uzantı adları olduğunu sanmıyorum. Uzantı, bir dosyanın genel sınıfını tanımlayan bir şeydir. Bunları muhtemelen vertex.glsl ve fragment.glsl olarak adlandırmaları gerekirdi.
autodidact

5
Ben de şaşırdım, ancak köşe ve parça gölgelendiricileri, @SandeepDatta arasında sözdiziminde küçük bir fark yok mu? Aynı şekilde .h ve .c'nin birçok ortak noktası olabilir, ancak bunlar farklı şekillerde kullanılır.
Joseph Humfrey

7
@SandeepDatta .hppvs .cpp? .hvs .c? Köşe ve parça gölgelendiricileri arasında C / C ++ başlığı ve kaynak dosyalar arasında olduğundan daha fazla sözdizimi ve anlamsal fark vardır.
Miles Rout

1
@MilesRout .cc hakkında konuşmuyorum bile

42
GLSL Reference Parser veya Reference Compiler olarak da bilinen GLSLang, 3Dlabs tarafından geliştirilen araçlardan biridir . Hem opengl.org hem de khronos.org'da bir SDK aracı olarak listelenmiştir. BENIOKU listelerinin gölgelendirici dosyaları için bekler uzantılar: .vert(tepe), .frag(fragmanı), .tesc(Mozaik kontrol), .tese(Mozaik değerlendirme), .geom(geometri), .comp(işlem).
TachyonVortex

93

Spesifikasyonda resmi bir uzantı yok. OpenGL, gölgelendiricileri dosyalardan yüklemeyi yönetmez; sadece gölgelendirici kodunu bir dize olarak iletirsiniz, böylece belirli bir dosya biçimi olmaz.

Bununla birlikte, Khronos'un referans GLSL derleyicisi / doğrulayıcısı olan glslang , dosyanın hangi tür gölgelendirici için olduğunu belirlemek için aşağıdaki uzantıları kullanır:

  • .vert - köşe gölgelendiricisi
  • .tesc - bir mozaikleme kontrol gölgelendiricisi
  • .tese - bir mozaik değerlendirme gölgelendiricisi
  • .geom - bir geometri gölgelendiricisi
  • .frag - parça gölgelendirici
  • .comp - hesaplama gölgelendiricisi

18

Dosya türünü uzantıya göre tanımlamak, Windows'a özgü bir şeydir. Diğer tüm işletim sistemleri farklı yaklaşımlar kullanır: MacOS X, dosya türünü dosya sistemi girişlerindeki özel bir meta veri yapısında depolar. Çoğu * nix dosyaları, dahili yapılarını bilinen "sihirli baytlar" veritabanına karşı test ederek tanımlar; ancak metin editörleri uzantıyı kullanır.

Her neyse, GLSL kaynakları tıpkı diğer program kaynak dosyaları gibidir: düz metin ve bu onların dosya türü.

Dilediğiniz gibi seçebileceğiniz uzantı. Aşağıdaki adlandırmayı kullanıyorum:

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

ancak bu benim seçimim ve teknik olarak programlarım herhangi bir adlandırma veya uzantı şeması bile uygulamıyor. Adlandırma, insanların içinde ne olduğunu okuması ve bilmesi içindir; ortak bir ana uzantıya sahip olmak, yalnızca bir dosya uzantısı kümesi için sözdizimi vurgulama kuralına sahip olmamı gerektiriyor.


5
OS X, dosya uzantısını yıllardır kullandığı için olumsuz oy verildi.
Frederik Slijkerman

6
@FrederikSlijkerman: Hayır değil. MacOS X, özünde bir Unix'tir ve dosya uzantıları hiçbir zaman bir şeyi tanımlamak için kullanılmamıştır. Evet, standart türler standart dosya uzantılarını alır, ancak bu yalnızca insan tarafından okunabilir bir şeydir. Belki Bulucu, bazı türler için buluşsal yöntem olarak dosya uzantılarına güvenebilir. Ancak bir dosyayı yalnızca başlığıyla veya bazı sihirli baytlarla tanımlayabilirse, onu kullanır. Herhangi bir Unix tabanlı sistem gibi.
datenwolf

3
+1 Onları efekt adı -fs.glsl veya efekt adı -vs.glsl olarak adlandırıyorum.
legends2k

9
OS X tartışmasına iki yıl geç kaldığımı anlıyorum, ancak iki sentimi atmam gerektiğini hissettim. UNIX katmanının üzerindeki her şey, dosya ilişkilerini belirlemek için LaunchServices'i kullanır. Her dosyanın com.stackoverflow.filemeta veri olarak depolanan gibi bir tür tanımlayıcısı vardır . LaunchServices, meta veri girişi varsa, önce MIME türünden tahmin etmeye çalışır. Değilse, uzantıyı arayacaktır. Eğer eşleşemezse, bir HFS oluşturucu kodu arayacaktır. Hiç yoksa pes eder. LaunchServices hiçbir zaman bir dosyayı başlığıyla veya sihirli baytlarıyla tanımlamaya çalışmaz.
zneak

2
Bu, OS X'de bir dosyanın türünü belirlemenin en yaygın yolunun uzantısı olduğu anlamına gelir. Bu, yalnızca hangi dosyanın hangi dosyayı açmak için kullanılması gerektiğini belirlemek içindir. Uygulama dosyayı açtıktan sonra, uzantının içerik türü için doğru olup olmadığına bakılmaksızın, onunla ne yapmak istediğine kendisi karar verebilir.
zneak

7

Başkalarının da belirttiği gibi, en katı anlamda doğru bir yanıt yok. Sublime'ın (v2 ve v3 için onaylanmıştır) ayrıca .vert ve .frag'ın sözdizimi vurgulama ve doğrulama için beklediğini belirtmek gerekir.


2
Bunun yalnızca Sublime'da kurulu bir GLSL kitaplığınız varsa doğru olduğuna inanıyorum, örneğin github.com/WebGLTools/GL-Shader-Validator - varsayılan Sublime uzantıları tanımıyor.
Hava

Bağlandığınız kitaplık açık farkla en popüler (ve muhtemelen sadece?) GLSL kitaplığıydı ve ben bunun beklentisini sublime'ın beklediği olarak adlandırdım. Buna abartılı bir ifade dersen, suçu kabul ederim. Ama evet, en az o kadar yüce haklısın, çünkü görevine bağlı bir metin editörü, bilmediği uzantıları görmezden gelirken herhangi bir metin belgesini açacak.
Weavermount

1
Bugün yüce-GLSL (itibarıyla github.com/euler0/sublime-glsl ) en popüler GLSL eklentisi olup, şu uzantı seti kabul eder: vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl. Yani aralarından seçim yapabileceğiniz bir çeşitlilik var :)
F Lekschas

-1

Gölgelendirici yazmanın iki yolu vardır.

Köşe gölgelendiricisi ve parça gölgelendiricisi içeriğini bir char *değişkende depolayabilir ve gölgelendiriciyi bir programa derleyebilir, bağlayabilir ve iliştirebilirsiniz.

Başka bir yol da, istediğiniz uzantıya sahip ayrı köşe ve parça gölgelendirici dosyasını yazmak ve gölgelendiriciyi programa derlemek, bağlamak ve eklemek için okumaktır.

Dolayısıyla, .vert / .frag, .vsdr / .fsdr vb. Gibi adlandırma kuralları, nasıl okunacağını bildiğiniz sürece geçerlidir ...


-2

Zaten birden fazla yanıtın kapsadığı gibi, gerçekten bir standart yok; Size en yararlı olan yaklaşımı benimsemek size kalmıştır.

Türe özgü gölgelendirici uzantılarını kullanmanın faydasını görebiliyorum, ancak benim tercihim tüm gölgelendirici türleri için .glsl uzantısını kullanmaktır, çünkü kabuğun dosyayı nasıl kullandığını yalnızca bir kez tanımlamanız gerekir.

Benzer şekilde, gölgelendirici dosyalarınızı Notepad ++ 'da düzenlerseniz de iyi bir seçenektir, çünkü bunu, yalnızca bir dosya uzantısı belirterek tüm gölgelendirici dosyalarınıza dile özgü sözdizimi vurgulamasını otomatik olarak uygulayacak şekilde yapılandırabilirsiniz.

Bu yaklaşımın dezavantajı, gölgelendiricinin türünü dosya adına göre belirlemek için kendi adlandırma kuralınızı kullanmanız gerektiğidir, ancak bana göre faydaları maliyetten ağır basar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.