-
Notifications
You must be signed in to change notification settings - Fork 3.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
glTF 1.0.1 uint32 indices #4249
Changes from 2 commits
246a848
b4fd22a
b9f304c
12b18cb
07f9f44
48aa89d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3115,6 +3115,7 @@ define([ | |
var context = frameState.context; | ||
var scene3DOnly = frameState.scene3DOnly; | ||
|
||
checkSupportedGlExtensions(model, context); | ||
if (model._loadRendererResourcesFromCache) { | ||
var resources = model._rendererResources; | ||
var cachedResources = model._cachedRendererResources; | ||
|
@@ -3475,6 +3476,21 @@ define([ | |
} | ||
} | ||
|
||
function checkSupportedGlExtensions(model, context) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you document this exception in the |
||
var glExtensionsUsed = model.gltf.glExtensionsUsed; | ||
if (defined(glExtensionsUsed)) { | ||
var glExtensionsUsedLength = glExtensionsUsed.length; | ||
for (var i = 0; i < glExtensionsUsedLength; i++) { | ||
var extension = glExtensionsUsed[i]; | ||
if (extension !== 'OES_element_index_uint') { | ||
throw new RuntimeError('Unsupported WebGL Extension: ' + extension); | ||
} else if (!context.elementIndexUint) { | ||
throw new RuntimeError('OES_element_index_uint WebGL extension is not enabled.'); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps |
||
} | ||
} | ||
} | ||
} | ||
|
||
/////////////////////////////////////////////////////////////////////////// | ||
|
||
function CachedRendererResources(context, cacheKey) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,233 @@ | ||
{ | ||
"accessors": { | ||
"accessor_21": { | ||
"bufferView": "bufferView_1", | ||
"byteOffset": 0, | ||
"byteStride": 0, | ||
"componentType": 5125, | ||
"count": 36, | ||
"type": "SCALAR", | ||
"min": [ | ||
0 | ||
], | ||
"max": [ | ||
23 | ||
] | ||
}, | ||
"accessor_23": { | ||
"bufferView": "bufferView_0", | ||
"byteOffset": 0, | ||
"byteStride": 0, | ||
"componentType": 5126, | ||
"count": 24, | ||
"max": [ | ||
0.5, | ||
0.5, | ||
0.5 | ||
], | ||
"min": [ | ||
-0.5, | ||
-0.5, | ||
-0.5 | ||
], | ||
"type": "VEC3" | ||
}, | ||
"accessor_25": { | ||
"bufferView": "bufferView_0", | ||
"byteOffset": 288, | ||
"byteStride": 0, | ||
"componentType": 5126, | ||
"count": 24, | ||
"max": [ | ||
1, | ||
1, | ||
1 | ||
], | ||
"min": [ | ||
-1, | ||
-1, | ||
-1 | ||
], | ||
"type": "VEC3" | ||
} | ||
}, | ||
"animations": {}, | ||
"asset": { | ||
"generator": "collada2gltf@027f74366341d569dea42e9a68b7104cc3892054", | ||
"premultipliedAlpha": true, | ||
"profile": { | ||
"api": "WebGL", | ||
"version": "1.0.2" | ||
}, | ||
"version": "1.0" | ||
}, | ||
"bufferViews": { | ||
"bufferView_0": { | ||
"buffer": "buffer_0", | ||
"byteLength": 576, | ||
"byteOffset": 0, | ||
"target": 34962 | ||
}, | ||
"bufferView_1": { | ||
"buffer": "buffer_0", | ||
"byteLength": 144, | ||
"byteOffset": 576, | ||
"target": 34963 | ||
} | ||
}, | ||
"buffers": { | ||
"buffer_0": { | ||
"type": "arraybuffer", | ||
"byteLength": 720, | ||
"uri": "data:application/octet-stream;base64,AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAEAAAACAAAAAwAAAAIAAAABAAAABAAAAAUAAAAGAAAABwAAAAYAAAAFAAAACAAAAAkAAAAKAAAACwAAAAoAAAAJAAAADAAAAA0AAAAOAAAADwAAAA4AAAANAAAAEAAAABEAAAASAAAAEwAAABIAAAARAAAAFAAAABUAAAAWAAAAFwAAABYAAAAVAAAA" | ||
} | ||
}, | ||
"materials": { | ||
"Effect-Red": { | ||
"name": "Red", | ||
"technique": "technique0", | ||
"values": { | ||
"diffuse": [ | ||
0.8, | ||
0, | ||
0, | ||
1 | ||
], | ||
"shininess": 256, | ||
"specular": [ | ||
0.2, | ||
0.2, | ||
0.2, | ||
1 | ||
] | ||
} | ||
} | ||
}, | ||
"meshes": { | ||
"Geometry-mesh002": { | ||
"name": "Mesh", | ||
"primitives": [ | ||
{ | ||
"attributes": { | ||
"NORMAL": "accessor_25", | ||
"POSITION": "accessor_23" | ||
}, | ||
"indices": "accessor_21", | ||
"material": "Effect-Red", | ||
"mode": 4 | ||
} | ||
] | ||
} | ||
}, | ||
"nodes": { | ||
"rootNode": { | ||
"children": [], | ||
"meshes": [ | ||
"Geometry-mesh002" | ||
], | ||
"matrix": [ | ||
1, | ||
0, | ||
0, | ||
0, | ||
0, | ||
1, | ||
0, | ||
0, | ||
0, | ||
0, | ||
1, | ||
0, | ||
0, | ||
0, | ||
0, | ||
1 | ||
] | ||
} | ||
}, | ||
"programs": { | ||
"program_0": { | ||
"attributes": [ | ||
"a_normal", | ||
"a_position" | ||
], | ||
"fragmentShader": "Box0FS", | ||
"vertexShader": "Box0VS" | ||
} | ||
}, | ||
"scene": "defaultScene", | ||
"scenes": { | ||
"defaultScene": { | ||
"nodes": [ | ||
"rootNode" | ||
] | ||
} | ||
}, | ||
"shaders": { | ||
"Box0FS": { | ||
"type": 35632, | ||
"uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owp2YXJ5aW5nIHZlYzMgdl9ub3JtYWw7CnVuaWZvcm0gdmVjNCB1X2RpZmZ1c2U7CnVuaWZvcm0gdmVjNCB1X3NwZWN1bGFyOwp1bmlmb3JtIGZsb2F0IHVfc2hpbmluZXNzOwp2b2lkIG1haW4odm9pZCkgewp2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSh2X25vcm1hbCk7CnZlYzQgY29sb3IgPSB2ZWM0KDAuLCAwLiwgMC4sIDAuKTsKdmVjNCBkaWZmdXNlID0gdmVjNCgwLiwgMC4sIDAuLCAxLik7CnZlYzQgc3BlY3VsYXI7CmRpZmZ1c2UgPSB1X2RpZmZ1c2U7CnNwZWN1bGFyID0gdV9zcGVjdWxhcjsKZGlmZnVzZS54eXogKj0gbWF4KGRvdChub3JtYWwsdmVjMygwLiwwLiwxLikpLCAwLik7CmNvbG9yLnh5eiArPSBkaWZmdXNlLnh5ejsKY29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGRpZmZ1c2UuYSwgZGlmZnVzZS5hKTsKZ2xfRnJhZ0NvbG9yID0gY29sb3I7Cn0K" | ||
}, | ||
"Box0VS": { | ||
"type": 35633, | ||
"uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwphdHRyaWJ1dGUgdmVjMyBhX3Bvc2l0aW9uOwphdHRyaWJ1dGUgdmVjMyBhX25vcm1hbDsKdmFyeWluZyB2ZWMzIHZfbm9ybWFsOwp1bmlmb3JtIG1hdDMgdV9ub3JtYWxNYXRyaXg7CnVuaWZvcm0gbWF0NCB1X21vZGVsVmlld01hdHJpeDsKdW5pZm9ybSBtYXQ0IHVfcHJvamVjdGlvbk1hdHJpeDsKdm9pZCBtYWluKHZvaWQpIHsKdmVjNCBwb3MgPSB1X21vZGVsVmlld01hdHJpeCAqIHZlYzQoYV9wb3NpdGlvbiwxLjApOwp2X25vcm1hbCA9IHVfbm9ybWFsTWF0cml4ICogYV9ub3JtYWw7CmdsX1Bvc2l0aW9uID0gdV9wcm9qZWN0aW9uTWF0cml4ICogcG9zOwp9Cg==" | ||
} | ||
}, | ||
"skins": {}, | ||
"techniques": { | ||
"technique0": { | ||
"attributes": { | ||
"a_normal": "normal", | ||
"a_position": "position" | ||
}, | ||
"parameters": { | ||
"diffuse": { | ||
"type": 35666 | ||
}, | ||
"modelViewMatrix": { | ||
"semantic": "MODELVIEW", | ||
"type": 35676 | ||
}, | ||
"normal": { | ||
"semantic": "NORMAL", | ||
"type": 35665 | ||
}, | ||
"normalMatrix": { | ||
"semantic": "MODELVIEWINVERSETRANSPOSE", | ||
"type": 35675 | ||
}, | ||
"position": { | ||
"semantic": "POSITION", | ||
"type": 35665 | ||
}, | ||
"projectionMatrix": { | ||
"semantic": "PROJECTION", | ||
"type": 35676 | ||
}, | ||
"shininess": { | ||
"type": 5126 | ||
}, | ||
"specular": { | ||
"type": 35666 | ||
} | ||
}, | ||
"program": "program_0", | ||
"states": { | ||
"enable": [ | ||
2929, | ||
2884 | ||
], | ||
"disable": [] | ||
}, | ||
"uniforms": { | ||
"u_diffuse": "diffuse", | ||
"u_modelViewMatrix": "modelViewMatrix", | ||
"u_normalMatrix": "normalMatrix", | ||
"u_projectionMatrix": "projectionMatrix", | ||
"u_shininess": "shininess", | ||
"u_specular": "specular" | ||
} | ||
} | ||
}, | ||
"glExtensionsUsed": ["OES_element_index_uint"] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -76,7 +76,6 @@ defineSuite([ | |
var animBoxesUrl = './Data/Models/anim-test-1-boxes/anim-test-1-boxes.gltf'; | ||
var riggedFigureUrl = './Data/Models/rigged-figure-test/rigged-figure-test.gltf'; | ||
var riggedSimpleUrl = './Data/Models/rigged-simple/rigged-simple.gltf'; | ||
|
||
var boxConstantUrl = './Data/Models/MaterialsCommon/BoxConstant.gltf'; | ||
var boxLambertUrl = './Data/Models/MaterialsCommon/BoxLambert.gltf'; | ||
var boxBlinnUrl = './Data/Models/MaterialsCommon/BoxBlinn.gltf'; | ||
|
@@ -88,6 +87,7 @@ defineSuite([ | |
var boxSpotLightUrl = './Data/Models/MaterialsCommon/BoxSpotLight.gltf'; | ||
var boxTransparentUrl = './Data/Models/MaterialsCommon/BoxTransparent.gltf'; | ||
var boxColorUrl = './Data/Models/Box-Color/Box-Color.gltf'; | ||
var boxUint32Indices = './Data/Models/Box-Uint32Indices/Box-Uint32Indices.gltf'; | ||
var boxQuantizedUrl = './Data/Models/WEB3DQuantizedAttributes/Box-Quantized.gltf'; | ||
var boxColorQuantizedUrl = './Data/Models/WEB3DQuantizedAttributes/Box-Color-Quantized.gltf'; | ||
var boxScalarQuantizedUrl = './Data/Models/WEB3DQuantizedAttributes/Box-Scalar-Quantized.gltf'; | ||
|
@@ -1679,6 +1679,22 @@ defineSuite([ | |
}); | ||
}); | ||
|
||
it('loads a gltf with uint32 indices', function() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The test should check for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @lasalvavida did you see this comment:
|
||
return loadModel(boxUint32Indices).then(function(m) { | ||
verifyRender(m); | ||
primitives.remove(m); | ||
}); | ||
}); | ||
|
||
it('throws runtime error when loading a gltf with uint32 indices if OES_element_index_uint is disabled', function() { | ||
var context = scene.context; | ||
context._elementIndexUint = false; | ||
return loadModel(boxUint32Indices).otherwise(function(e) { | ||
expect(e).toBeDefined(); | ||
context._elementIndexUint = true; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Save and restore the original value; it could be |
||
}); | ||
}); | ||
|
||
it('loads a gltf with WEB3D_quantized_attributes COLOR', function() { | ||
return loadModel(boxColorQuantizedUrl).then(function(m) { | ||
expect(m.ready).toBe(true); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we move this call to be next to
checkSupportedExtensions
inupdate
?