瀏覽代碼

switch off VAO support for now

Alexander Rose 3 年之前
父節點
當前提交
c6fe6ddcba
共有 4 個文件被更改,包括 12 次插入8 次删除
  1. 4 0
      CHANGELOG.md
  2. 1 1
      src/mol-gl/_spec/renderer.spec.ts
  3. 6 2
      src/mol-gl/webgl/extensions.ts
  4. 1 5
      src/mol-gl/webgl/render-item.ts

+ 4 - 0
CHANGELOG.md

@@ -6,6 +6,10 @@ Note that since we don't clearly distinguish between a public and private interf
 
 ## [Unreleased]
 
+## [v2.3.9] - 2021-11-20
+
+- Workaround: switch off VAO support for now
+
 ## [v2.3.8] - 2021-11-20
 
 - Fix double canvas context creation (in plugin context)

+ 1 - 1
src/mol-gl/_spec/renderer.spec.ts

@@ -53,7 +53,7 @@ describe('renderer', () => {
         scene.commit();
         expect(ctx.stats.resourceCounts.attribute).toBe(ctx.isWebGL2 ? 4 : 5);
         expect(ctx.stats.resourceCounts.texture).toBe(7);
-        expect(ctx.stats.resourceCounts.vertexArray).toBe(8);
+        expect(ctx.stats.resourceCounts.vertexArray).toBe(ctx.extensions.vertexArrayObject ? 8 : 0);
         expect(ctx.stats.resourceCounts.program).toBe(8);
         expect(ctx.stats.resourceCounts.shader).toBe(16);
 

+ 6 - 2
src/mol-gl/webgl/extensions.ts

@@ -4,7 +4,7 @@
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
  */
 
-import { GLRenderingContext, COMPAT_instanced_arrays, COMPAT_standard_derivatives, COMPAT_vertex_array_object, getInstancedArrays, getStandardDerivatives, getVertexArrayObject, COMPAT_element_index_uint, getElementIndexUint, COMPAT_texture_float, getTextureFloat, COMPAT_texture_float_linear, getTextureFloatLinear, COMPAT_blend_minmax, getBlendMinMax, getFragDepth, COMPAT_frag_depth, COMPAT_color_buffer_float, getColorBufferFloat, COMPAT_draw_buffers, getDrawBuffers, getShaderTextureLod, COMPAT_shader_texture_lod, getDepthTexture, COMPAT_depth_texture, COMPAT_sRGB, getSRGB, getTextureHalfFloat, getTextureHalfFloatLinear, COMPAT_texture_half_float, COMPAT_texture_half_float_linear, COMPAT_color_buffer_half_float, getColorBufferHalfFloat } from './compat';
+import { GLRenderingContext, COMPAT_instanced_arrays, COMPAT_standard_derivatives, COMPAT_vertex_array_object, getInstancedArrays, getStandardDerivatives, COMPAT_element_index_uint, getElementIndexUint, COMPAT_texture_float, getTextureFloat, COMPAT_texture_float_linear, getTextureFloatLinear, COMPAT_blend_minmax, getBlendMinMax, getFragDepth, COMPAT_frag_depth, COMPAT_color_buffer_float, getColorBufferFloat, COMPAT_draw_buffers, getDrawBuffers, getShaderTextureLod, COMPAT_shader_texture_lod, getDepthTexture, COMPAT_depth_texture, COMPAT_sRGB, getSRGB, getTextureHalfFloat, getTextureHalfFloatLinear, COMPAT_texture_half_float, COMPAT_texture_half_float_linear, COMPAT_color_buffer_half_float, getColorBufferHalfFloat } from './compat';
 import { isDebugMode } from '../../mol-util/debug';
 
 export type WebGLExtensions = {
@@ -73,7 +73,11 @@ export function createExtensions(gl: GLRenderingContext): WebGLExtensions {
         // - can't be a required extension because it is not supported by `headless-gl`
         console.log('Could not find support for "blend_minmax"');
     }
-    const vertexArrayObject = getVertexArrayObject(gl);
+    // TODO: revisit
+    // switch off VAO support for now
+    // - https://bugs.chromium.org/p/angleproject/issues/detail?id=6599
+    // - https://bugs.chromium.org/p/chromium/issues/detail?id=1272238
+    const vertexArrayObject = null; // getVertexArrayObject(gl);
     if (isDebugMode && vertexArrayObject === null) {
         console.log('Could not find support for "vertex_array_object"');
     }

+ 1 - 5
src/mol-gl/webgl/render-item.ts

@@ -290,11 +290,7 @@ export function createRenderItem<T extends string>(ctx: WebGLContext, drawMode:
             }
 
             if (elementsBuffer && values.elements.ref.version !== versions.elements) {
-                if (elementsBuffer.length >= values.elements.ref.value.length &&
-                    // whenever a VAO update will be triggered, also recreate elements
-                    // workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1272238
-                    !(valueChanges.attributes || valueChanges.defines)
-                ) {
+                if (elementsBuffer.length >= values.elements.ref.value.length) {
                     // console.log('elements array large enough to update', values.elements.ref.id, values.elements.ref.version);
                     elementsBuffer.updateSubData(values.elements.ref.value, 0, elementsBuffer.length);
                 } else {