GLSL의 입력 / 출력 키워드


46

GLSL 에서 in/ out키워드 를 사용하는 방법을 실제로 이해하지 못하며 Google은 특성상 도움이되지 않습니다.

정확히 무엇을합니까? 예를 들어 버텍스 당 가변 변수 세트를 프래그먼트 셰이더에 전달하려면 어떻게 사용합니까?

문자 그대로 모든 튜토리얼은 varying/ attribute키워드를 사용 하지만 도움이되지 않습니다.

답변:


65

저장 예선 inout실제로는 포함하고 대체의 목적이 varyingattribute. 그들은 변수가 각각 무엇인지 정의 두고 밖으로 쉐이더에 넣습니다. 7 페이지 의 GLSL 4.2 참조 카드를 참조하십시오.

  • in: 이전 단계에서 셰이더에 연결
  • out: 셰이더에서 다음 단계로 연결
  • attribute: in버텍스 쉐이더 와 동일
  • varying: out버텍스 쉐이더와 동일, in프래그먼트 쉐이더 와 동일 (참고 : 위에서 언급 한 참조 카드에서 잘못 뒤집어 짐)

부수적으로 후자 두 개는 더 이상 사용되지 않습니다. 4.2 코어 프로파일에는 없으며 호환성 프로파일에만 있습니다.


정확히 무엇을합니까?

사용법은 정점 셰이더를 소개에서 최신 OpenGL로 가져갑니다. 2.2 장 쉐이더 :

#version 110

attribute vec2 position;    
varying vec2 texcoord;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    texcoord = position * vec2(0.5) + vec2(0.5);
}

4.2 코어에서 다음과 같이 다시 작성해야합니다.

#version 420

in vec2 position;    
out vec2 texcoord;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    texcoord = position * vec2(0.5) + vec2(0.5);
}

도움이되지 않는 튜토리얼

"오래된"튜토리얼 코드를 찾은 주된 이유는 모든 사람이 GLSL 3.3+ 호환 하드웨어에 액세스 할 수 없기 때문입니다. 어쨌든, 최신 튜토리얼을 위해 Nicol Bolas의 Learning Modern 3D Graphics Programming 의 방향을 기꺼이 알려 드리겠습니다 .


2
@NicolBolas Ha! 나는 이미 그것에 비린 무언가가 있다고 생각했습니다. 그것은 그 참조 카드의 오류입니다. 감사! :-)
Eric
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.