데스크탑 OpenGL에서 전환 컨텍스트로 인해 약간의 오버 헤드가 발생하며 특히 메모리 (텍스처 등)의 일부 개체를 다시로드하거나 다시 바인딩해야한다는 것이 잘 알려져 있습니다.webgl의 캔버스 전환이 데스크톱 OpenGL과 같은 '컨텍스트 스위치 오버 헤드'를 부과합니까?
WebGL에서 다른 캔버스 요소 간을 이동해도 동일한 컨텍스트 전환 패널티가 발생합니까? 한 페이지에 캔버스 요소간에 공유 할 수있는 webgl 객체가 있습니까?
데스크탑 OpenGL에서 전환 컨텍스트로 인해 약간의 오버 헤드가 발생하며 특히 메모리 (텍스처 등)의 일부 개체를 다시로드하거나 다시 바인딩해야한다는 것이 잘 알려져 있습니다.webgl의 캔버스 전환이 데스크톱 OpenGL과 같은 '컨텍스트 스위치 오버 헤드'를 부과합니까?
WebGL에서 다른 캔버스 요소 간을 이동해도 동일한 컨텍스트 전환 패널티가 발생합니까? 한 페이지에 캔버스 요소간에 공유 할 수있는 webgl 객체가 있습니까?
캔버스간에 공유 할 수있는 WebGL 개체가 없습니다. 캔버스가 WebGL 객체를 공유해야하는 경우 하나의 큰 캔버스를 사용하여 여러 캔버스가 나타나게하는 솔루션이 있습니다. WebGL example, three.js example.
적어도 Chrome에서는 캔버스간에 그리기로 전환하는 데 오버 헤드가 발생하지 않을 것입니다. 먼저 프레임 당 캔버스 당 캔버스를 두 번 이상 전환하지 않을 것입니다. 캔버스가 모두 화면에 있으면 위의 해결 방법으로 문제를 해결할 수 있습니다. 그들이 더 분리되어 있다면 (더 많은 캔버스를보기 위해 스크롤해야하는 것처럼), a solution like this은 스위치 수를 줄입니다. 거의 오버 헤드가 없지만 대부분의 운전자에게.
위에서 언급 한 것처럼 Chrome이 하나의 실제 컨텍스트 위에 여러 컨텍스트를 가상화하기 때문에 특히 크롬 전환에 오버 헤드가 없습니까? 그것은 Electron에서도 그렇습니까? –
"* 특히 메모리 (텍스처 등)의 일부 객체를 다시로드/다시 바인딩해야합니다. *"적용 할 수 없습니다. 컨텍스트는 그 안에 설정된 모든 상태를 보존합니다. 이제 컨텍스트가 * destroyed *이면 예 상태를 복원해야합니다. –
사실 공유 객체를 사용하는 컨텍스트는 객체의 상태를 공유하므로 모든 종류의 상태 문제가 있습니다. 나는 그들 주위에서 일해야했기 때문에 나는 알고있다. 또한 일부 드라이버는 내용을 전환하는 데 심각한 오버 헤드가 있음을 알고 있습니다. Chrome의 솔루션은 특정 GPU에 대한 실제 컨텍스트 중 하나 위에 여러 컨텍스트를 가상화했기 때문에 그 점도 알고 있습니다. – gman