Sử dụng tiện ích mở rộng WebGL
WebGL, giống như các API chị em của nó (OpenGL và OpenGL ES), hỗ trợ các tiện ích mở rộng. Danh sách đầy đủ các tiện ích mở rộng có trong khronos webgl extension registry.
Note: Trong WebGL, khác với các API GL khác, tiện ích mở rộng chỉ khả dụng khi được yêu cầu một cách tường minh.
Tên tiện ích mở rộng chuẩn, tiền tố nhà cung cấp và tùy chọn
Các tiện ích mở rộng có thể được các nhà cung cấp trình duyệt hỗ trợ trước khi chính thức được phê chuẩn (nhưng chỉ khi chúng đang ở giai đoạn bản nháp). Trong trường hợp đó, tên của chúng có thể được gắn tiền tố của nhà cung cấp (MOZ_, WEBKIT_, v.v.) hoặc tiện ích mở rộng chỉ khả dụng sau khi một tùy chọn của trình duyệt được bật.
Nếu bạn muốn làm việc với các tiện ích mở rộng ở mức tiên phong, và muốn tiếp tục làm việc sau khi chúng được phê chuẩn (giả sử, tất nhiên, là tiện ích mở rộng đó không thay đổi theo cách không tương thích), thì bạn nên truy vấn cả tên tiện ích mở rộng chuẩn lẫn tên tiện ích mở rộng theo tiền tố của nhà cung cấp. Ví dụ:
const ext =
gl.getExtension("OES_vertex_array_object") ||
gl.getExtension("MOZ_OES_vertex_array_object") ||
gl.getExtension("WEBKIT_OES_vertex_array_object");
Lưu ý rằng tiền tố của nhà cung cấp hiện không còn được khuyến khích, vì vậy hầu hết trình duyệt triển khai các tiện ích mở rộng thử nghiệm sau một cờ tính năng thay vì tiền tố nhà cung cấp.
Các cờ tính năng là:
webgl.enable-draft-extensionstrong Firefoxchrome://flags/#enable-webgl-draft-extensionstrong các trình duyệt dựa trên Chromium (Chrome, Opera).
Quy ước đặt tên
Các tiện ích mở rộng WebGL được tiền tố bằng "ANGLE", "OES", "EXT" hoặc "WEBGL". Những tiền tố này phản ánh nguồn gốc và mục đích:
ANGLE_: Các tiện ích mở rộng do tác giả của thư viện ANGLE viết.OES_vàKHR_: Các tiện ích mở rộng mô phỏng chức năng từ OpenGL ES (OES) hoặc các tiện ích mở rộng OpenGL API được các hội đồng xem xét kiến trúc tương ứng (Khronos) phê duyệt.OVR_: Các tiện ích mở rộng tối ưu cho thực tế ảo.EXT_: Các tiện ích mở rộng mô phỏng các tiện ích mở rộng khác của OpenGL ES hoặc OpenGL API.WEBGL_: Các tiện ích mở rộng dành riêng cho WebGL và được thiết kế để tương thích với nhiều trình duyệt web. Tiền tố này cũng nên được dùng cho các tiện ích mở rộng có nguồn gốc từ OpenGL ES hoặc OpenGL API nhưng có hành vi đã được thay đổi đáng kể.
Truy vấn các tiện ích mở rộng có sẵn
Ngữ cảnh WebGL hỗ trợ truy vấn xem những tiện ích mở rộng nào đang có sẵn.
const availableExtensions = gl.getSupportedExtensions();
Phương thức WebGLRenderingContext.getSupportedExtensions() trả về một mảng chuỗi, mỗi chuỗi tương ứng với một tiện ích mở rộng được hỗ trợ.
Danh sách tiện ích mở rộng
Các tiện ích mở rộng hiện tại là:
ANGLE_instanced_arraysEXT_blend_minmaxEXT_color_buffer_floatEXT_color_buffer_half_floatEXT_disjoint_timer_queryEXT_float_blendEXT_frag_depthEXT_shader_texture_lodEXT_sRGBEXT_texture_compression_bptcEXT_texture_compression_rgtcEXT_texture_filter_anisotropicEXT_texture_norm16KHR_parallel_shader_compileOES_draw_buffers_indexedOES_element_index_uintOES_fbo_render_mipmapOES_standard_derivativesOES_texture_floatOES_texture_float_linearOES_texture_half_floatOES_texture_half_float_linearOES_vertex_array_objectOVR_multiview2WEBGL_color_buffer_floatWEBGL_compressed_texture_astcWEBGL_compressed_texture_etcWEBGL_compressed_texture_etc1WEBGL_compressed_texture_pvrtcWEBGL_compressed_texture_s3tcWEBGL_compressed_texture_s3tc_srgbWEBGL_debug_renderer_infoWEBGL_debug_shadersWEBGL_depth_textureWEBGL_draw_buffersWEBGL_lose_contextWEBGL_multi_draw
Bật một tiện ích mở rộng
Trước khi một tiện ích mở rộng có thể được dùng, nó phải được bật bằng WebGLRenderingContext.getExtension(). Ví dụ:
const ext = gl.getExtension("OES_texture_float");
Giá trị trả về là null nếu tiện ích mở rộng không được hỗ trợ, còn nếu không thì là một đối tượng tiện ích mở rộng.
Đối tượng tiện ích mở rộng
Nếu một tiện ích mở rộng định nghĩa các ký hiệu hoặc hàm cụ thể không có trong đặc tả lõi của WebGL, chúng sẽ có sẵn trên đối tượng tiện ích mở rộng được trả về bởi lời gọi gl.getExtension().