2017-09-17 1 views
0

WebGL2에서 부동 소수점 텍스처를 가져 오려고합니다. 나는이 같은 텍스처를 초기화 :WebGL2의 부동 소수점 텍스처 선형 필터링

파이어 폭스 55.0.2 (64 비트)는 나에게 다음과 같은 오류를 제공에
function textureFromFloat32Array(gl, arr, w, h){ 
    //https://developer.mozilla.org/en-US/docs/Web/API/OES_texture_float_linear 
    gl.getExtension('OES_texture_float');  // just in case 
    gl.getExtension('OES_texture_float_linear'); // do I need this with WebGL2 
    const texture = gl.createTexture(); 
    gl.bindTexture(gl.TEXTURE_2D, texture); 
    // see https://www.khronos.org/registry/webgl/specs/latest/2.0/#TEXTURE_TYPES_FORMATS_FROM_DOM_ELEMENTS_TABLE 
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, w, h, 0, gl.RED, gl.FLOAT, arr); 
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); 
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); 
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); 
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 
    //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); // this works 
    //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 
    return texture; 
} 

:

Error: WebGL warning: drawElements: Active texture 0 for target 0x0de1 is 'incomplete', and will be rendered as RGBA(0,0,0,1), as per the GLES 2.0.24 $3.8.2: Because minification or magnification filtering is not NEAREST or NEAREST_MIPMAP_NEAREST, and the texture's format must be "texture-filterable".

gl.NEAREST와 그것을 작동하지만 난 선형 보간이 필요합니다.

Chorme 60.0.3112.101에서는 gl.getExtension('OES_texture_float_linear');과 작동하지만 WebGL2을 사용하면 그럴 필요가 없습니다.

답변

0

심지어 WebGL2에는 OES_texture_float_linear이 필요합니다.

WebGL2는 기본적으로 부동 소수점 텍스처를 지원하지만 기본적으로 부동 소수점 텍스처 필터링 또는 렌더링을 지원하지 않습니다. 둘 다 확장 기능입니다. 텍스처 형식이 지원되는지, 필터링 할 수 있는지 또는 렌더링 할 수 있는지에 대한 내용은 tables on this page을 참조하십시오.

대부분의 휴대 전화는 부동 소수점 텍스처 필터링을 지원하지 않으며 부동 소수점 텍스처로 렌더링을 지원하지 않습니다. 적어도 2017 년 9 월 시점.

부동 소수점 텍스처를 필터링하려면 OES_texture_float_linear을 확인하고 활성화해야합니다. 확인하고 활성화해야하는 부동 소수점 텍스처로 렌더링 할 수 있으려면 EXT_color_buffer_float

+0

감사합니다. 하지만 실제로 "렌더링 할 수 없다"는 것은 ... 그 텍스쳐로 무엇을 할 수 있습니까? PixelHader가 아닌 버텍스 쉐이더에서만 사용할 수 있다는 뜻입니까? 실제로 3 가지 용도로 사용하고 싶습니까? 1) 지형 높이지도 2) 3D 텍스처의 범위 지정 3) calcualtions 용 버퍼 (변환 피드백 또는 계산 쉐이더 사용). –

+0

렌더링 할 수 없다는 것은 렌더링 할 수 없음을 의미합니다. 즉, 프레임 버퍼를 부착 할 수 없습니다. 필터링 할 수 없다는 것은 샘플러를 통해 간접적으로 필터링 할 수 없다는 것을 의미합니다. 샘플러가 NEAREST로 설정되어야 함을 의미합니다. 플로트 텍스처를 갖는 것은 필터링 할 수없는 경우에도 여전히 유용합니다. 좋은 예가 스키닝입니다. 매트릭스는 종종 유니폼에 적합 할 것보다 더 많이 필요하기 때문에 텍스처에 저장됩니다. 그들은 필터링 할 필요가 없습니다. 셰이더에서 수동으로 필터링 할 수도 있습니다 (텍스처를 여러 번 읽음, 합계 및 평균 결과). 물론 천천히 진행될 것입니다. – gman

+0

그래서, 이것을 하이트 맵으로 사용할 수 있습니다. 가장 가까운 값으로 설정하면됩니다. 하이트 맵에서는 일반적으로 문제가되지 않습니다. 그것은 당신이 자신의 필터링을하지 않는 한 그것이 거칠 수있는 과정을 제외하고 당신이 raymarch에 그것을 사용할 수있는 것 같습니다. 기본적으로 필터링 할 수 있으므로 16 비트 부동 형식을 고려해야합니다. 계산 용 버퍼는'EXT_color_buffer_float'를 지원하지 않는 한 출력으로 사용하지 않고 입력으로 사용할 수 있습니다. 대부분의 데스크톱이 그렇습니다. 대부분의 휴대 전화/태블릿에서는 그렇지 않습니다. – gman

관련 문제