2017-10-13 29 views
0

필자의 이해가 정확하다면, 텍스처 유닛에는 텍스처를 바인딩 할 수있는 다수의 타겟 (GL_TEXTURE_2D 등)이 있습니다. glActiveTexture으로 현재 활성 텍스처 단위를 변경할 수 있습니다. glBindTexture을 호출 할 때 지정된 텍스처 객체를 현재 활성 텍스처 유닛의 지정된 대상에 바인딩합니다. 맞습니까?이미 바운드 된 텍스처를 편집하려면 glActiveTexture를 호출하는 것으로 충분합니까?

나중에 텍스처의 매개 변수를 변경하거나 glTexSubImage2D과 같은 함수를 호출하려면 텍스처가 바인딩 된 텍스처 단위로 glActiveTexture를 호출하면 충분합니까? 또는 텍스처가 이미 유닛에 바인딩되어 있더라도 매번 glBindTexture으로 전화해야합니까?

답변

2

어떤 단위가 어떤 단위에 연결되어 있는지 알면 정확히 glActiveTexture을 변경하여 올바른 단위로 전환하여 사용할 수 있습니다.

그러나이 목적에 의존해서는 안됩니다. OpenGL은 신뢰할 수 없기 때문에가 아니라 일 수 있습니다.

또한, 텍스처를 바인딩 할 텍스처를 바인딩하고 텍스처를 으로 바인딩하는 사이에 선을 흐리게하여을 수정합니다. 둘을 완전히 분리 시키길 원합니다. 첫째, 렌더링 루프에서 텍스처의 상태를 수정하기 때문에 (수정하기 위해 바인딩하는 곳에서) 상태가 좋지 않으며 느려질 수 있습니다. 둘째, GL 4.5와 DSA를 채택 할 때가되면 신속하고 효율적으로 할 수 있습니다.

0

텍스처 유닛은 GPU에있는 파이프로 생각할 수 있습니다. GPU에는 이러한 텍스처 단위가 많이 있습니다. glActivateTexture()를 호출하면 OpenGL 드라이버에게 GPU에게 텍스처를 내가 다음 번로드에 바인드 할 것인지/언급 한 텍스처 단위로 연결 시킬지를 알립니다. glBindTexture()라고 말하면 드라이버가 내가하는 작업이 무엇인지 알 수 있습니다. 그것은 내가 결박 한 질감에 관한 것입니다. 일단 glTextureImage2D를 호출하면 텍스처가 드라이버 메모리에 저장되므로 직접 액세스 할 필요가 없습니다. 그래서 드라이버는 당신이 묶는 텍스쳐 오브젝트에 핸들을 주었고, 내가 말하는 리소스를 드라이버에게 알려줍니다.

언제나 렌더링 할 때 항상 텍스처 유닛을 활성화 한 다음 텍스처를 바인딩하십시오. 먼저 활성화하고 나중에 바인딩하면 텍스처가 자동으로 지정한 단위에 바인딩됩니다.

기본적으로 텍스처 단위에 대해 언급하지 않으면 GL_TEXTURE0이 사용되므로 때때로 혼동을 줄 수 있습니다.

희망이 도움이됩니다.