2017-05-15 8 views
0

우리가 사용하는 렌더러를 WebGL2로 업데이트 할 수있는 기회를 얻었습니다. 렌더러를 가능한 한 이전 버전과 호환되도록하기 위해 우리는 (업그레이드 전에했던 것처럼)로드 된 확장을 추적하고 그러한 확장이 승격되었다하더라도 확장을 에뮬레이트합니다. 렌더러는 확장과 관련된 몇 가지 작업을 수행합니다. 바깥에서 모든 것이 아주 투명합니다.WebGL2의 프로모션 된 확장 목록 전체

원활하게 작동하게하려면 전체 프로모션 광고 확장 목록이 필요합니다. 블로그를 거의 찾지 못했지만 그 목록은 완전하지 않습니다. GitHub에서 찾은 다른 목록은 실제로 승격되지 않았거나 삭제 된 중복 확장자가 있기 때문에 잘못 보입니다. 나는 문서에서 많은 것을 발견하지 못했다.

그래서, 나는 몇 가지 경험적 연구를 발견 :

// 12 extensions were promoted in WebGL2 without surprises 
[ 
    'ANGLE_instanced_arrays', 
    'EXT_blend_minmax', 
    'EXT_frag_depth', 
    'EXT_shader_texture_lod', 
    'EXT_sRGB', 
    'OES_element_index_uint', 
    'OES_standard_derivatives', 
    'OES_texture_float', 
    'OES_texture_half_float', 
    'OES_vertex_array_object', 
    'WEBGL_depth_texture', 
    'WEBGL_draw_buffers', 
] 

는 특히 내 목록에없는 OES_texture_float_linearOES_texture_half_float_linear 확장에 대한 걱정. WebGL2의 구현 나는 로컬로 OES_texture_float_linear을 가지고 있지만, OES_texture_half_float_linear은 가지고 있지 않지만, WebGL은 그 둘 모두를 가지고 있습니다. 나는 WebGL1 문맥에서 OES_texture_float_linear이 조금 다르게 행동한다는 것을 알고 있기 때문에 나의 직감은 문제가있을 수 있다고 말한다.

또한 disjoint_timer_query 확장으로 이상한 일이 발생했습니다. 그 확장은 부분적으로 병합되었습니다. WebGL2 컨텍스트에는 해당 확장의 일부 속성이 있습니다. Chrome에 disjoint_timer_query_webgl2이라는 이름을 가진 getQueryObject을 제외한 모든 속성이 있지만 Firefox에서는 disjoint_timer_query 확장자가 WebGL2 컨텍스트에서 계속 사용할 수 있습니다.

그럼 목록이 완성 되었습니까? 특히, OES_texture_half_float_linear이 목록에 있어야합니까? 그리고 그 이유는 비슷합니까? OES_texture_float_linear은 머물렀습니까?

감사합니다.

-

그래서 최종 답변은 (아마도)해야한다 :

// 14 extensions were promoted in WebGL2 
[ 
    'ANGLE_instanced_arrays', 
    'EXT_blend_minmax', 
    'EXT_frag_depth', 
    'EXT_shader_texture_lod', 
    'OES_element_index_uint', 
    'OES_standard_derivatives', 
    'OES_texture_float', 
    'OES_texture_half_float', 
    'OES_vertex_array_object', 
    'WEBGL_depth_texture', 
    'WEBGL_draw_buffers', 
    /* with caveats */ 
    'EXT_sRGB', 
    'OES_texture_half_float_linear', 
    'EXT_disjoint_timer_query', 
] 

는 마지막 세 확장이주의로 승진했다 유의하시기 바랍니다. 내선 EXT_sRGB은 상수 SRGB_ALPHA을 잃었습니다. 확장자 OES_texture_half_float_linear이 승격되었지만, 유사하게는 OES_texture_float_linear이 승격되지 않았습니다. 확장자 EXT_disjoint_timer_query 부분적으로 승격되었습니다. 해당 확장의 일부 속성은 WebGL2 컨텍스트에서 표시되고 다른 속성은 EXT_disjoint_timer_query_webgl2 확장으로 이동되었습니다. 또한 현재 (2017.05.16) Firefox WebGL2 컨텍스트에는 여전히 EXT_disjoint_timer_query 개의 확장명과 EXT_disjoint_timer_query_webgl2 확장자가 없습니다.

답변

1

WebGL2는 반 텍스처 및 부동 소수점 텍스처를 지원해야합니다. 또한 반 텍스처에 대한 필터링이 필요하지만 필터링 된 부동 소수점 텍스처에 대한 지원이 필요하지 않습니다.

따라서 OES_texture_half_float_linear이 누락되어 OES_texture_float_linear은 선택 사항입니다. 대부분의 모바일 장치는 부동 소수점 텍스처 필터링을 지원하지 않습니다.

즉, 프로모션 광고 확장 목록에 OES_texture_half_float_linear을 추가해야합니다.

이상한 기록이있는 다른 확장 프로그램은 EXT_color_buffer_float입니다. WebGL1은 그것없이 출하되었습니다.부동 소수점 텍스처로 렌더링하는 것은 처음으로 OES_texture_float이었고 부동 소수점 텍스처를 만들고 프레임 버퍼에 첨부하고 gl.checkFramebufferStatus을 확인했습니다. 그러나 WebGL이 출하 된 후 1 년 정도 지나면 충분하지 않다는 것을 지적하여 EXT_color_buffer_float이 추가되었지만 이렇게하면 페이지가 파손되었을 수 있기 때문에 시행되지 않았습니다.

WebGL2의 경우 입니다. EXT_color_buffer_float을 활성화하지 않으면 부동 소수점 텍스처에 렌더링 할 수 없습니다. EXT_color_buffer_half_float와 동일합니다.

+0

float 텍스처를 필터링하는 것과는 달리 필터링 반 플로트 텍스처가 향상되었습니다. 그 맞습니까? disjoint_timer_query 확장은 어떤가요? 목록에 있어야할까요? 파이어 폭스와 크롬은 서로 다른 견해를 가지고있는 것처럼 보입니다. 그렇죠? – wandalen

+0

정확함,'OES_texture_half_float_linear'이 승격되었습니다. 'OES_texture_float_linear'는 ** 승격되지 않았습니다 **. 나는'EXT_disjoint_timer_query' 확장에 대해 모른다. [확장 자체] (https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/)에 따르면 WebGL1에서는 명시 적으로 허용되지 않습니다. WebGL2의 경우 [EXT_disjoint_timer_query_webgl2] (https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/) – gman

+0

Firefox의 표준과 모순 된 것처럼 보입니다. 그럼에도 불구하고 파이어 폭스 방식은 나를 위해 논리적으로 보인다. – wandalen