2014-01-16 1 views
0

새내기 질문 ... OpenGLES 2.0 + Android에 해당opengles 텍스처 유닛 동작

1) drawarrays 호출에 걸쳐 텍스처 및 상태가 업로드됩니까? glTexImage2D를 사용하여 활성화 된 Texture5 (말하자면)에 텍스쳐를 업로드 할 때 다른 GL 컨텍스트가 Texture5를 사용하고 다른 텍스쳐를 업로드하더라도 여전히 존재할 것입니까? 그렇다면 두 개의 비디오 프레임 사이에서 작업하는 데 상당한 시련을 덜어 줄 것입니다.

2) 활성 Texture5에 textureobjectA를 바인드하고 활성 Texture5에 textureobjectB를 바인딩하고 다른 데이터를 업로드하면 업로드 텍스처가 덮어 쓰기됩니까?

3) 텍스처 5를 활성화하는 것은 텍스처에 대해 하드웨어 유닛을 활성화하는 것과 동일합니까? 아니면 상태 활성화입니까? 왜냐하면 다른 컨텍스트가 동일한 유닛을 활성화 시키면 문제가 발생할 수 있기 때문에 이것은 단지 국가 활성화 일 뿐이라고 생각하기 때문입니다. 그렇다면 GPU에서 수행 한 모든 컨텍스트와 텍스처 업로드에 사용할 수있는 메모리 양은 어느 정도입니까?

용어 active Texture

답변

0

사용이 직결되는 모든 응답을 주셔서 감사합니다. 텍스처 유닛에 텍스처를 업로드하지 않고, 텍스처 유닛을 텍스처 유닛에 바인딩합니다. 텍스처 이미지 데이터를 텍스처 개체에 업로드합니다.

텍스쳐 이미지 유닛 5에 묶인 텍스쳐가 다른 텍스쳐에 영향을 주는지 묻는다면, 그 대답은 절대적으로 아닙니다. 컨텍스트 리소스 공유를 사용하더라도 각 컨텍스트에는 각기 다른 고유 한 상태 시스템이 있기 때문에 각각의 컨텍스트에는 고유 한 개별 집합의 텍스처 이미지 단위가 있습니다.

텍스처 유닛을 "활성화"하는 것은 OpenGL의 의심스러운 디자인의 결과 일뿐입니다. 선택기 기능을 사용하여 다음 명령을 적용 할 개체를 지정해야합니다. 예를 들어 활성 텍스쳐 이미지 단위에 바인딩 된 2D 텍스처에 적용된다는 점을 제외하고는 아무 것도하지 않습니다. glTexImage2D (...).

+0

설명해 주셔서 감사합니다. 텍스처 객체와 텍스처 데이터가 GPU의 최대 텍스처 샘플러 또는 텍스처 하드웨어 유닛과 연결되어 있지 않으며 각 프로그램에서 사용할 수있는 최대 텍스처 단위 (TEXTURE0-31 또는 63) 만 반영한다고 추론 할 수 있습니까? 간단히 말해서 프로그램에서 최대 64 개의 텍스처 샘플러 만 사용할 수 있습니다 (또는 쿼리에서 더 적은 수). – user3201692

+0

OpenGL은 쉐이더 스테이지 당 16 개의 텍스처 단위를 보장합니다. 버텍스 쉐이더에서는 16 개의 텍스쳐 룩업으로 제한되며, 조각에서는 16 개, 기하학에서는 16 개로 제한됩니다. 이는 GL3에서 48 개의 텍스처 유닛을 만들고, GL4는 2 개의 새로운 스테이지 (테셀레이션 제어/평가)를 추가했기 때문에 80으로 올렸습니다. 모든 의도와 목적에 따라 GL4에서는 80 개의 텍스처가 바인딩 될 수 있지만, 단일 쉐이더 스테이지에서 16 개 서브 세트. –

+0

죄송합니다. OpenGL ES에 대한 토론이었습니다. 내가 말한 몇 가지 것을 무시하십시오.) GL ES는 8 개의 텍스처 단위 만 필요하고, 기하학 또는 테셀레이션 쉐이더를 가지지 않으며, 버텍스 쉐이더에서 샘플링하는 기능은 선택 사항입니다. 좀 더 철저한 논의를 위해'GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS'와'GL_MAX_COMBINED_TEXTURE_UNITS'를 살펴볼 것을 제안합니다. –