[opengl] GLSL 쉐이더의 올바른 파일 확장자는 무엇입니까? [닫은]

glsl 음영을 배우고 있으며 다른 파일 형식을 발견했습니다. 사람들이 정점과 프래그먼트 셰이더 .vert.frag확장 기능을 제공하는 것을 보았습니다 . 그러나 나는 또한 본 적이 .vsh.fsh단일 함께 모두 쉐이더를 확장, 심지어 .glsl파일. 표준 파일 형식이 있는지 또는 ‘올바른’형식인지 궁금합니다.



답변

GLSL 쉐이더에는 표준 파일 확장자가 없습니다. 가장 일반적인 도구는 아마도 3D Labs가 일부 도구에서 사용하는 확장 기능이므로 아마도 .vert.frag입니다. 그러나 그것은 모든 형태의 표준 확장에 관한 것입니다.


답변

사양에는 공식적인 확장이 없습니다. OpenGL은 파일에서 셰이더 로딩을 처리하지 않습니다. 쉐이더 코드를 문자열로 전달하기 때문에 특정 파일 형식이 없습니다.

그러나 Khronos의 참조 GLSL 컴파일러 / 검증 기인 glslang 은 다음 확장을 사용하여 파일의 셰이더 유형을 결정합니다.

  • .vert -버텍스 쉐이더
  • .tesc 테셀레이션 컨트롤 셰이더
  • .tese 테셀레이션 평가 셰이더
  • .geom -지오메트리 쉐이더
  • .frag -프래그먼트 셰이더
  • .comp -계산 셰이더

답변

확장명으로 파일 형식을 식별하는 것은 Windows에만 해당됩니다. 다른 모든 운영 체제는 다른 접근 방식을 사용합니다. MacOS X은 파일 유형을 파일 시스템 항목의 특수 메타 데이터 구조로 저장합니다. 대부분의 * nix는 알려진 “매직 바이트”데이터베이스에 대해 내부 구조를 테스트하여 파일을 식별합니다. 그러나 텍스트 편집기는 확장명을 사용합니다.

어쨌든 GLSL 소스는 다른 프로그램 소스 파일과 같습니다. 일반 텍스트이며 파일 형식입니다.

원하는 확장명을 선택할 수 있습니다. 다음과 같은 이름을 사용합니다.

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

그러나 그것은 나의 선택이며 기술적으로 내 프로그램은 명명이나 확장 체계를 강요하지도 않습니다. 명명은 인간이 그 안에 무엇이 있는지 읽고 이해하는 것입니다. 공통의 주요 확장자를 가지려면 하나의 파일 확장자 세트에 대해서만 구문 상한 규칙이 필요합니다.


답변

다른 사람들이 언급했듯이 가장 엄격한 의미의 정답은 없습니다. Sublime (v2 및 v3에 대해 확인 됨)은 구문 강조 및 유효성 검증에 .vert 및 .frag도 예상한다는 점을 언급합니다.


답변

쉐이더를 작성하는 방법에는 두 가지가 있습니다.

버텍스 셰이더와 프래그먼트 셰이더 컨텐츠를 char *변수에 저장하고 셰이더를 컴파일, 링크 및 프로그램에 연결할 수 있습니다.

또 다른 방법은 원하는 확장자로 별도의 정점 및 조각 셰이더 파일을 작성하고 프로그램에 셰이더를 컴파일, 링크 및 첨부하기 위해 파일을 읽는 것입니다.

따라서 .vert / .frag, .vsdr / .fsdr 등과 같은 명명 규칙은 읽는 방법을 알고있는 한 모두 유효합니다 …


답변

이미 여러 응답에서 다루었 듯이 실제로 표준은 없습니다. 가장 유용한 접근 방식을 채택하는 것은 귀하의 책임입니다.

유형별 셰이더 확장을 사용하면 이점을 볼 수 있지만 쉘이 파일을 한 번 사용하는 방법 만 정의하면되기 때문에 모든 유형의 셰이더에 .glsl 확장명을 사용하는 것이 좋습니다.

마찬가지로 Notepad ++에서 셰이더 파일을 편집하는 경우 파일 확장자를 하나만 지정하여 언어 별 구문 강조 표시를 모든 셰이더 파일에 자동으로 적용하도록 구성 할 수 있으므로이 옵션도 좋습니다.

이 접근 방식의 단점은 파일 이름으로 셰이더 유형을 결정하기 위해 자체 명명 규칙을 사용해야하지만 이점은 비용을 능가한다는 것입니다.


답변