2013-05-19 1 views

답변

9

WebGL은 OpenGL ES 2.0 비헤이비어를 적용하고 WebGL 앱이 액세스 권한이없는 데이터에 액세스하지 못하게해야합니다. 이렇게하려면 WebGL 구현은 OpenGL ES 2.0 사양에 따라 읽을 수있는 모든 텍스처를 읽을 수있는 확장명이 없는지 등 많은 것을 검증해야합니다.

그래서, 모든 드로잉에서 모든 텍스처가 "큐브 완료"및 "밉맵"인 큐브 맵인 경우 각 텍스처가 "텍스처 완료"인지 확인하는 것을 포함하여 필요한 모든 기준을 충족하는지 확인해야합니다 큐브 완성 ", 텍스처 필터링이 올바르게 설정된 2의 비 규격 인 경우 등 ... 이러한 조건 중 하나라도 충족되지 않으면 WebGL 구현은 투명한 검은 텍스처를 대신하여 동작이 사양을 준수하도록하고 장치간에 일관성이 유지됩니다.

이러한 검사는 비용이 많이 들기 때문에 WebGL 구현이 수행 할 수있는 바로 가기는 텍스처가 렌더링 할 수 없는지 추적하는 것입니다. 렌더링 할 수없는 텍스처가 없으면 그리기 시간에 검사가 필요 없습니다. 위의 경고는 기본적으로 WebGL이이 값 비싼 검사를 모두 수행해야한다는 것을 알려주는 일부 텍스처를 렌더링 할 수 없다는 것입니다. 모든 텍스처가 렌더링 가능한지 확인하면 WebGL에서이 검사를 건너 뛸 수 있으며 앱이 더 빨리 실행될 수 있습니다.

"전체 조직"의 정의는

, "큐브 완료", 등 ... OpenGL ES 2.0 spec section 3.7.10

+6

당신이 Three.js를를 사용하는 경우에 고정, 그것은 THREE.ImageUtils.loadTexture의 잘못된 사용으로 인해 발생할 수 있습니다. 이 텍스처가있는 메쉬를 장면에 추가하기 전에 loadTexture 콜백을 기다려야합니다. – dIsoVi

+0

@dIsoVi Bravo! 지금까지 본 모든 예제는 콜백을 사용하지 않기 때문에 비동기라는 것을 알지 못했습니다. 감사! – krb686

+0

Three.JS의 세부 사항을 알지는 못하지만 일반적으로 장면에 메쉬를 추가하기 전에 텍스처가로드 될 때까지 기다리는 것이 아니라 1x1 픽셀 텍스처를 만들고 그 텍스처에 이미지를로드합니다. 그렇게하면 1x1 픽셀 텍스처가 모든 렌더링 요구 사항을 충족하므로 메시를 즉시 그릴 수 있습니다. 이미지가로드되면 이미지 데이터로 텍스처를 업데이트 한 다음 필터링을 설정하거나 mip을 생성합니다. 그렇게하면 즉시 렌더링을 시작할 수 있습니다. 솔루션이 귀하의 앱에 맞는다면 귀하의 몫입니다. – gman

관련 문제