Phần mở rộng tập tin chính xác cho các shader GLSL là gì? [đóng cửa]


127

Tôi đang học glsl shading và tôi đã đi qua các định dạng tệp khác nhau. Tôi đã nhìn thấy mọi người đưa ra đỉnh và mảnh của họ shaders .vert.fragphần mở rộng. Nhưng tôi cũng đã thấy .vshvà các .fshphần mở rộng, và thậm chí cả hai shader cùng nhau trong một .glsltệp. Vì vậy, tôi tự hỏi nếu có một định dạng tệp tiêu chuẩn, hoặc cách nào là 'chính xác'?


10
Theo tôi biết, họ không có tiện ích mở rộng "chính xác", vì OpenGL sẽ không đọc chúng từ đĩa.
zneak

2
Một số người gọi chúng là .vs và .fs (và .ss) để làm rõ những gì bên trong. Nhưng như zneak đã nói, nó thực sự không thành vấn đề, không có điều gì "đúng".
Damon

11
GEdit sử dụng .glslv.glslfkhi chọn tô sáng cú pháp. Đó là nơi duy nhất tôi thấy nơi nó quan trọng.
Piotr Praszmo

Câu trả lời:


90

Không có phần mở rộng tập tin tiêu chuẩn cho các shader GLSL. Những cái phổ biến nhất có lẽ là .vert.frag, vì đây là những tiện ích mở rộng mà Phòng thí nghiệm 3D đã sử dụng trong một số công cụ của họ. Nhưng đó là về nó cho bất kỳ hình thức mở rộng tiêu chuẩn.


20
Tôi không nghĩ .vert | .frag là tên mở rộng tốt cho shader. Phần mở rộng là cái gì đó xác định lớp chung của một tệp. Có lẽ họ nên gọi chúng là vertex.glsl và Fragment.glsl.
Tự động tìm kiếm

5
Tôi cũng ngạc nhiên, nhưng không có một chút khác biệt nào về cú pháp giữa các shader đỉnh và mảnh, @SandeepDatta? Theo cùng một cách mà .h và .c có thể chia sẻ rất nhiều điểm chung, nhưng chúng được sử dụng theo những cách khác nhau.
Joseph Humfrey

7
@SandeepDatta .hppso với .cpp? .hso với .c? Có nhiều sự khác biệt về cú pháp và ngữ nghĩa giữa các shader đỉnh và mảnh hơn so với giữa các tệp nguồn và tiêu đề C / C ++.
Tuyến Miles

1
@MilesRout Thậm chí không nói về .cc

42
GLSLang, còn được gọi là Trình phân tích tham chiếu GLSL hoặc Trình biên dịch tham chiếu , là một trong những công cụ được phát triển bởi 3Dlabs . Nó được liệt kê như một công cụ SDK trên cả opengl.org và khronos.org. Các README danh sách các phần mở rộng tập tin dự kiến cho các tập tin shader: .vert(đỉnh), .frag(đoạn), .tesc(tessellation điều khiển), .tese(đánh giá tessellation), .geom(hình học), .comp(tính toán).
TachyonVortex

93

Không có phần mở rộng chính thức trong thông số kỹ thuật. OpenGL không xử lý các shader tải từ các tập tin; bạn chỉ cần chuyển mã shader thành một chuỗi, vì vậy không có định dạng tệp cụ thể.

Tuy nhiên, glslang , trình biên dịch / trình xác nhận GLSL tham chiếu của Khronos, sử dụng các phần mở rộng sau để xác định loại shader mà tệp này dùng cho:

  • .vert - một shader đỉnh
  • .tesc - một shader kiểm soát tessname
  • .tese - một shader đánh giá tessname
  • .geom - một shader hình học
  • .frag - một mảnh vỡ
  • .comp - một shader tính toán

18

Xác định loại tệp theo tiện ích mở rộng là một điều cụ thể đối với Windows. Tất cả các hệ điều hành khác sử dụng các cách tiếp cận khác nhau: MacOS X lưu trữ loại tệp trong cấu trúc siêu dữ liệu đặc biệt trong các mục nhập hệ thống tệp. Hầu hết * nixes xác định các tệp bằng cách kiểm tra cấu trúc bên trong của chúng dựa trên cơ sở dữ liệu "byte ma thuật" đã biết; tuy nhiên các trình soạn thảo văn bản sử dụng phần mở rộng.

Dù sao, các nguồn GLSL cũng giống như bất kỳ tệp nguồn chương trình nào khác: văn bản thuần túy và đó là loại tệp của chúng.

Phần mở rộng bạn có thể chọn như bạn muốn. Tôi sử dụng cách đặt tên sau:

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

nhưng đó là lựa chọn của tôi và về mặt kỹ thuật, các chương trình của tôi thậm chí không thực thi bất kỳ chương trình đặt tên hoặc mở rộng nào. Việc đặt tên là để con người đọc và biết những gì trong đó; có một phần mở rộng chính phổ biến đòi hỏi tôi phải có quy tắc đánh dấu cú pháp cho chỉ một bộ phần mở rộng tệp.


5
Bị từ chối vì OS X chủ yếu sử dụng phần mở rộng tệp trong nhiều năm.
Frederik Slijkerman

6
@FrederikSlijkerman: Không, không. MacOS X là một Unix ở lõi và phần mở rộng tệp không bao giờ được sử dụng ở đó để nhận dạng. Có, các loại tiêu chuẩn có được phần mở rộng tệp tiêu chuẩn, nhưng đó chỉ là một thứ dễ đọc của con người. Có thể Finder có thể dựa vào các phần mở rộng tập tin như heuristic cho một số loại. Nhưng nếu nó có thể xác định một tệp chỉ bằng tiêu đề của nó hoặc một số byte ma thuật, nó sẽ sử dụng tệp đó. Giống như bất kỳ hệ thống dựa trên Unix nào.
datenwolf

3
+1 Tôi đặt tên cho chúng là effect-name -fs.glsl hoặc effect-name -vs.glsl.
huyền thoại2k

9
Tôi nhận ra rằng tôi trễ hai năm cho cuộc tranh luận về OS X, nhưng tôi cảm thấy mình nên ném hai xu của mình. Mọi thứ ở trên lớp UNIX đều sử dụng LaunchService để xác định các liên kết tệp. Mỗi tệp có một định danh kiểu như com.stackoverflow.file, được lưu trữ dưới dạng siêu dữ liệu. LaunchService cố gắng đoán nó từ loại MIME trước, nếu mục siêu dữ liệu tồn tại. Nếu không, nó sẽ tìm phần mở rộng. Nếu nó không khớp với nó, nó sẽ tìm mã người tạo HFS. Nếu không có, nó từ bỏ. LaunchService không bao giờ cố gắng xác định một tệp bằng các byte tiêu đề hoặc ma thuật của nó.
zneak

2
Điều này có nghĩa là cách phổ biến nhất để xác định loại tệp trên OS X là phần mở rộng của nó. Điều này chỉ nhằm mục đích xác định ứng dụng nào sẽ được sử dụng để mở tệp nào. Khi ứng dụng mở tệp, nó có thể tự quyết định những gì nó muốn làm với nó, bất kể phần mở rộng có đúng với loại nội dung hay không.
zneak

7

Như những người khác đã đề cập, không có câu trả lời đúng theo nghĩa chặt chẽ nhất. Nó không đề cập đến việc Sublime (được xác nhận cho v2 và v3) cũng mong đợi .vert và .frag cho đánh dấu và xác thực cú pháp.


2
Tôi tin rằng điều này chỉ đúng nếu bạn có thư viện GLSL được cài đặt trong Sublime, ví dụ: github.com/WebGLTools/GL-Shader-Validator - Sublime mặc định của tôi không nhận ra các tiện ích mở rộng.
Không khí

Lib mà bạn liên kết cho đến nay là lib GLSL phổ biến nhất (và có thể duy nhất?) Cho siêu phàm, và tôi đã gọi những gì mong đợi như những gì siêu phàm mong đợi. Nếu bạn gọi đó là một lời nói quá mức tôi sẽ nhận tội. Nhưng vâng, bạn đúng ít nhất là cao siêu như một trình soạn thảo văn bản nghiêm túc sẽ mở bất kỳ tài liệu văn bản nào trong khi bỏ qua các phần mở rộng mà nó không biết.
Weavermount

1
Cho đến ngày hôm nay, sublime-glsl ( github.com/euler0/sublime-glsl ) là plugin GLSL phổ biến nhất và nó chấp nhận bộ tiện ích mở rộng sau : vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl. Vì vậy, có nhiều loại để lựa chọn :)
F Lekschas

-1

Có hai cách viết shader.

Bạn có thể lưu trữ nội dung shader đỉnh và shader mảnh trong một char *biến và biên dịch, liên kết và đính kèm shader vào một chương trình.

Một cách khác là viết tập tin shader đỉnh và phân đoạn riêng biệt với bất kỳ phần mở rộng nào bạn thích và đọc nó để biên dịch, liên kết và đính kèm shader vào chương trình.

Vì vậy, quy ước đặt tên, như .vert / .frag, .vsdr / .fsdr, v.v ... đều hợp lệ miễn là bạn biết cách đọc nó ...


-2

Như đã được bao phủ bởi nhiều phản hồi, thực sự không có một tiêu chuẩn nào; tùy thuộc vào bạn để áp dụng phương pháp hữu ích nhất cho bạn.

Tôi có thể thấy lợi ích trong việc sử dụng các phần mở rộng shader dành riêng cho loại nhưng sở thích của tôi là sử dụng phần mở rộng .glsl cho tất cả các loại shader, vì bạn chỉ cần xác định cách shell sử dụng tệp một lần.

Tương tự, đây cũng là một tùy chọn tốt nếu bạn chỉnh sửa các tệp shader của mình trong Notepad ++, vì bạn có thể định cấu hình nó để tự động áp dụng cú pháp tô sáng theo ngôn ngữ cụ thể cho tất cả các tệp shader của mình bằng cách chỉ định một phần mở rộng tệp.

Nhược điểm của phương pháp này là bạn cần sử dụng quy ước đặt tên của riêng mình để xác định loại trình đổ bóng theo tên tệp của nó, nhưng đối với tôi, lợi ích vượt xa chi phí.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.