약 5 개의 다른 답변을 반복하지만 ...
텍스처 조작은 다음과 같이 작동합니다.
internalGLState = {
activeTextureUnit: 0,
textureUnits: [
{ TEXTURE_2D: ?, TEXTURE_CUBEMAP: ?, },
{ TEXTURE_2D: ?, TEXTURE_CUBEMAP: ?, },
{ TEXTURE_2D: ?, TEXTURE_CUBEMAP: ?, },
{ TEXTURE_2D: ?, TEXTURE_CUBEMAP: ?, },
{ TEXTURE_2D: ?, TEXTURE_CUBEMAP: ?, },
{ TEXTURE_2D: ?, TEXTURE_CUBEMAP: ?, },
...
],
};
텍스처가 현재 활성 텍스처 유닛 및 그 장치에 대한 바인드 점 참조하는 텍스처 유닛의 글로벌 세트가있다.
그래서, gl.activeTexture
효과적으로이
gl.activeTexture = function(unitId) {
internalGlState.activeTextureUnit = unitId - gl.TEXTURE0; // conver to index
}
다른 모든 텍스처 기능은 기본적으로 그래서 예를 gl.texParameteri
설정은 텍스처에있는
gl.texParameteri = function(bindPoint, settingId, value) {
var texture = getTexture(bindPoint);
texture.internalApplySetting(settingId, value);
}
이
function getTexture(bindPoint) {
return internalGLState[internalGlState.activeTextureUnit][bindPoint];
}
처럼 작동한다.
셰이더
gl.uniform1i(someSamplerUniformLocation, textureUnitIndex);
니콜로서 텍스쳐 유닛의 인덱스 텍스처 참조 (단위 시간당 각각의 결합 지점에 대한 하나 개의 기준있다 제외) "조직 단위"텍스처 참조 단지 효과적인 배열이다 WebGL 1.0에서는 다른 매개 변수를 사용하여 동일한 텍스처를 가질 수 없다는 것을 지적했습니다. 샘플러 객체를 사용하여 WebGL 2.0에서 작업 할 수 있습니다 (곧 출시 될 예정 임).
제 질문은 왜 같은 텍스처에 대해 서로 다른 매개 변수를 사용 하시겠습니까?상업용 비디오 게임에서 일하는 사람으로서 나는 한번도 한 번도 아티스트에게 그렇게하지 말라고 요청한 적이 없기 때문에 제한적인 기능으로는 찾아 내지 못했습니다.
WebGL에서 원하는 경우 다중 텍스처를 만들거나 다른 매개 변수가 동시에 필요하지 않은 경우 사용 간 매개 변수를 변경해야합니다.