นามสกุลไฟล์ที่ถูกต้องสำหรับ GLSL Shaders คืออะไร? [ปิด]


127

ฉันกำลังเรียนรู้ glsl shading และเจอไฟล์รูปแบบต่างๆ ฉันเคยเห็นคนให้จุดยอดและส่วนแบ่งส่วน.vertและ.fragส่วนขยายของพวกเขา แต่ฉันยังเคยเห็น.vshและ.fshส่วนขยายและแม้แต่ทั้งสองเฉดสีรวมกันใน.glslไฟล์เดียว ฉันจึงสงสัยว่ามีรูปแบบไฟล์มาตรฐานหรือรูปแบบใดที่ 'ถูกต้อง'?


10
เท่าที่ฉันรู้พวกเขาไม่มีส่วนขยายที่ "ถูกต้อง" เนื่องจาก OpenGL จะไม่อ่านจากดิสก์อีกต่อไป
zneak

2
บางคนเรียกว่า. vs และ. fs (และ. gs) เพื่อให้ชัดเจนว่ามีอะไรอยู่ข้างใน แต่เหมือนที่ zneak พูดจริงๆมันไม่สำคัญไม่มีสิ่งที่ "ถูกต้อง"
Damon

11
GEdit ใช้.glslvและ.glslfเมื่อเลือกการเน้นไวยากรณ์ นั่นเป็นที่เดียวที่ฉันเคยเห็นว่ามันสำคัญ
Piotr Praszmo

คำตอบ:


90

ไม่มีนามสกุลไฟล์มาตรฐานสำหรับ GLSL Shaders สิ่งที่พบบ่อยที่สุดน่าจะเป็น.vertและ.fragเนื่องจากเป็นส่วนขยายที่ 3D Labs ใช้ในเครื่องมือบางอย่าง แต่สำหรับส่วนขยายมาตรฐานทุกรูปแบบ


21
ฉันไม่คิดว่า .vert | .frag เป็นชื่อนามสกุลที่ดีสำหรับเฉดสี นามสกุลคือสิ่งที่ระบุคลาสทั่วไปของไฟล์ พวกเขาน่าจะเรียกพวกมันว่า vertex.glsl และ fragment.glsl
Autodidact

5
ฉันก็แปลกใจเหมือนกัน แต่ไม่มีความแตกต่างเล็กน้อยในไวยากรณ์ระหว่างจุดยอดและตัวแบ่งส่วนของ @SandeepDatta? ในทำนองเดียวกับที่. h และ. c อาจใช้ร่วมกันได้มาก แต่ใช้ในรูปแบบที่แตกต่างกัน
Joseph Humfrey

7
@SandeepDatta .hppกับ.cpp? .hเทียบกับ.c? มีความแตกต่างทางไวยากรณ์และความหมายระหว่างจุดยอดและแฟรกเมนต์แชเดอร์มากกว่าที่มีระหว่างส่วนหัว C / C ++ และไฟล์ต้นทาง
เส้นทางไมล์

1
@MilesRout ไม่แม้แต่จะพูดถึง. cc

42
GLSLang ยังเป็นที่รู้จักในฐานะGLSL อ้างอิง Parserหรืออ้างอิงคอมไพเลอร์เป็นหนึ่งในเครื่องมือที่พัฒนาโดย3DLabs มีรายการเป็นเครื่องมือ SDK ทั้งใน opengl.org และ khronos.org READMEรายการนามสกุลไฟล์คาดว่าสำหรับไฟล์ Shader: .vert(ยอด) .frag(ชิ้นส่วน) .tesc(ควบคุม tessellation) .tese(การประเมินผล tessellation) .geom(เรขาคณิต) .comp(คำนวณ)
TachyonVortex

93

ไม่มีส่วนขยายอย่างเป็นทางการในข้อมูลจำเพาะ OpenGL ไม่จัดการการโหลดเฉดสีจากไฟล์ คุณเพียงแค่ส่งรหัส shader เป็นสตริงดังนั้นจึงไม่มีรูปแบบไฟล์เฉพาะ

อย่างไรก็ตามglslangคอมไพเลอร์ / ตัวตรวจสอบ GLSL อ้างอิงของ Khronos ใช้ส่วนขยายต่อไปนี้เพื่อกำหนดชนิดของ shader ที่ไฟล์นี้ใช้:

  • .vert - จุดยอด shader
  • .tesc - shader ควบคุม tessellation
  • .tese - shader การประเมินการขายเทสเซลเลชัน
  • .geom - shader รูปทรงเรขาคณิต
  • .frag - ชิ้นส่วน shader
  • .comp - เครื่องคำนวณ Shader

18

การระบุประเภทไฟล์ตามนามสกุลเป็นสิ่งเฉพาะสำหรับ Windows ระบบปฏิบัติการอื่น ๆ ทั้งหมดใช้วิธีการที่แตกต่างกัน: MacOS X จัดเก็บประเภทไฟล์ในโครงสร้างข้อมูลเมตาพิเศษในรายการระบบไฟล์ ส่วนใหญ่ * nixes ระบุไฟล์โดยการทดสอบโครงสร้างภายในกับฐานข้อมูลของ "magic bytes" ที่รู้จัก; อย่างไรก็ตามโปรแกรมแก้ไขข้อความใช้ส่วนขยาย

อย่างไรก็ตามแหล่งที่มาของ GLSL ก็เหมือนกับไฟล์ต้นฉบับของโปรแกรมอื่น ๆ นั่นคือข้อความธรรมดาและนั่นคือประเภทไฟล์

ส่วนขยายที่คุณสามารถเลือกได้ตามที่คุณต้องการ ฉันใช้การตั้งชื่อต่อไปนี้:

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

แต่นั่นเป็นทางเลือกของฉันและในทางเทคนิคโปรแกรมของฉันไม่ได้บังคับใช้รูปแบบการตั้งชื่อหรือส่วนขยายใด ๆ การตั้งชื่อมีไว้เพื่อให้มนุษย์อ่านและรู้ว่ามีอะไรอยู่ในนั้น การมีนามสกุลหลักทั่วไปทำให้ฉันต้องมีกฎการเน้นไวยากรณ์สำหรับชุดนามสกุลไฟล์เพียงชุดเดียว


5
ลดลงเนื่องจาก OS X ใช้นามสกุลไฟล์เป็นหลักมาหลายปีแล้ว
Frederik Slijkerman

6
@FrederikSlijkerman: ไม่มันไม่ได้ MacOS X เป็น Unix ที่เป็นแกนกลางและไม่เคยมีการใช้นามสกุลไฟล์เพื่อระบุสิ่งต่างๆ ใช่ประเภทมาตรฐานจะได้รับนามสกุลไฟล์มาตรฐาน แต่นั่นเป็นเพียงสิ่งที่มนุษย์อ่านได้เท่านั้น บางที Finder อาจใช้นามสกุลไฟล์เป็นฮิวริสติกสำหรับบางประเภท แต่ถ้าสามารถระบุไฟล์ได้เพียงส่วนหัวหรือไบต์เวทย์มนตร์บางไฟล์ก็จะใช้ไฟล์นั้น เช่นเดียวกับระบบที่ใช้ Unix ใด ๆ
datenwolf

3
+1 ฉันตั้งชื่อมันเป็นชื่อเอฟเฟกต์ -fs.glsl หรือเอฟเฟกต์ - เนม -vs.glsl
legends2k

9
ฉันรู้ว่าฉันมาช้าไปสองปีสำหรับการโต้เถียง OS X แต่ฉันรู้สึกว่าฉันควรทุ่มสองเซ็นต์ ทุกสิ่งที่อยู่เหนือเลเยอร์ UNIX ใช้ LaunchServices เพื่อกำหนดการเชื่อมโยงไฟล์ แต่ละไฟล์มีตัวระบุประเภทเช่นcom.stackoverflow.fileซึ่งจัดเก็บเป็นข้อมูลเมตา LaunchServices พยายามเดาจากประเภท MIME ก่อนหากมีรายการข้อมูลเมตาอยู่ หากไม่เป็นเช่นนั้นจะมองหาส่วนขยาย หากจับคู่ไม่ได้ก็จะมองหารหัสผู้สร้าง HFS ถ้าไม่มีก็ยอมแพ้ LaunchServices ไม่เคยพยายามระบุไฟล์ด้วยส่วนหัวหรือไบต์เวทย์มนตร์
zneak

2
ซึ่งหมายความว่าวิธีทั่วไปในการกำหนดประเภทของไฟล์บน OS X คือนามสกุล นี่เป็นเพียงจุดประสงค์ในการระบุว่าควรใช้แอปพลิเคชันใดเพื่อเปิดไฟล์ใด เมื่อแอปพลิเคชันเปิดไฟล์ขึ้นมาแอปพลิเคชันสามารถตัดสินใจได้เองว่าต้องการทำอะไรกับไฟล์นั้นไม่ว่านามสกุลจะถูกต้องสำหรับประเภทเนื้อหาหรือไม่
zneak

7

อย่างที่คนอื่น ๆ พูดถึงไม่มีคำตอบที่ถูกต้องในแง่ที่เข้มงวดที่สุด มีการกล่าวถึงว่า Sublime (ยืนยันสำหรับ v2 และ v3) ยังคาดหวัง .vert และ. fr สำหรับการเน้นไวยากรณ์และการตรวจสอบความถูกต้อง


2
ฉันเชื่อว่านี่จะเป็นจริงก็ต่อเมื่อคุณติดตั้งไลบรารี GLSL ใน Sublime เช่นgithub.com/WebGLTools/GL-Shader-Validator - Sublime เริ่มต้นของฉันไม่รู้จักส่วนขยาย
ออกอากาศ

lib ที่คุณเชื่อมโยงนั้นเป็นที่นิยมมากที่สุด (และอาจเป็นได้เท่านั้น) GLSL lib สำหรับประเสริฐและฉันเรียกสิ่งที่คาดหวังว่าสิ่งที่ประเสริฐคาดหวัง ถ้าคุณเรียกว่าเกินเลยฉันจะสารภาพผิด แต่ใช่คุณพูดถูกอย่างน้อยที่สุดเท่าที่ประเสริฐพอ ๆ กับโปรแกรมแก้ไขข้อความที่มีหน้าที่จะเปิดเอกสารข้อความใด ๆ ในขณะที่เพิกเฉยต่อส่วนขยายที่ไม่รู้จัก
Weavermount

1
ณ วันนี้ sublime-glsl ( github.com/euler0/sublime-glsl ) เป็นปลั๊กอิน GLSL ที่ได้รับความนิยมสูงสุดและยอมรับชุดของส่วนขยายต่อไปนี้: vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl. จึงมีให้เลือกหลากหลาย :)
F Lekschas

-1

มีสองวิธีในการเขียนเฉดสี

คุณสามารถจัดเก็บจุดยอด Shader และเนื้อหา Fragment Shader ในchar *ตัวแปรและคอมไพล์เชื่อมโยงและแนบ Shader เข้ากับโปรแกรม

อีกวิธีหนึ่งคือการเขียนจุดยอดและไฟล์ shader แยกส่วนด้วยนามสกุลใดก็ได้ที่คุณต้องการและอ่านเพื่อรวบรวมเชื่อมโยงและแนบ Shader เข้ากับโปรแกรม

ดังนั้นหลักการตั้งชื่อเช่น .vert / .frag, .vsdr / .fsdr ฯลฯ ทั้งหมดนั้นใช้ได้ตราบเท่าที่คุณรู้วิธีอ่าน ...


-2

ดังที่ได้กล่าวไปแล้วโดยคำตอบหลาย ๆ คำตอบนั้นไม่มีมาตรฐานจริงๆ ขึ้นอยู่กับคุณที่จะนำแนวทางที่เป็นประโยชน์กับคุณมากที่สุดมาใช้

ฉันเห็นประโยชน์ในการใช้ส่วนขยาย shader เฉพาะประเภท แต่ความชอบของฉันคือใช้นามสกุล. glsl สำหรับ shader ทุกประเภทเนื่องจากคุณต้องกำหนดวิธีที่เชลล์ใช้ไฟล์เพียงครั้งเดียว

ในทำนองเดียวกันนี่เป็นตัวเลือกที่ดีเช่นกันหากคุณแก้ไขไฟล์ shader ของคุณใน Notepad ++ เนื่องจากคุณสามารถกำหนดค่าให้ใช้การเน้นไวยากรณ์เฉพาะภาษาโดยอัตโนมัติกับไฟล์ shader ทั้งหมดของคุณโดยระบุเพียงนามสกุลไฟล์เดียว

ข้อเสียของวิธีนี้คือคุณต้องใช้หลักการตั้งชื่อของคุณเองเพื่อกำหนดประเภทของ shader ตามชื่อไฟล์ แต่สำหรับฉันแล้วประโยชน์ที่ได้รับมีมากกว่าค่าใช้จ่าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.