11import * as maptalks from 'maptalks' ;
22import { reshader , vec3 , vec4 , mat3 , mat4 , quat , HighlightUtil , ContextUtil } from '@maptalks/gl' ;
33import { iterateMesh , iterateBufferData , getItemAtBufferData , setInstanceData , } from '../../common/GLTFHelpers' ;
4+ import pickingVert from './glsl/picking.vert' ;
45import pntsVert from './glsl/pnts.vert' ;
56import pntsFrag from './glsl/pnts.frag' ;
67import { isFunction , isNil , extend , setColumn3 , flatArr , isNumber , normalizeColor , pushIn } from '../../common/Util' ;
@@ -10,7 +11,9 @@ import { isFunctionDefinition, interpolated } from '@maptalks/function-type';
1011// import { getKHR_techniques } from './s3m/S3MTechnique';
1112
1213
13- const { getTextureMagFilter, getTextureMinFilter, getTextureWrap, getMaterialType, getMaterialFormat, getPrimitive, getUniqueREGLBuffer } = reshader . REGLHelper ;
14+ const { getTextureMagFilter, getTextureMinFilter,
15+ getTextureWrap, getMaterialType, getMaterialFormat,
16+ getPrimitive, getUniqueREGLBuffer, getArrayType } = reshader . REGLHelper ;
1417
1518const Y_TO_Z = [ 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , - 1 , 0 , 0 , 0 , 0 , 0 , 1 ] ;
1619const X_TO_Z = [ 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , - 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ] ;
@@ -1452,6 +1455,7 @@ export default class TileMeshPainter {
14521455 const isWebGPU = this . getMap ( ) . getRenderer ( ) . isWebGPU ( ) ;
14531456 const attrs = { } ;
14541457 let positionSize = 0 ;
1458+ let vertexCount = 0 ;
14551459 for ( const p in attributes ) {
14561460 // 优先采用 attributeSemantics中定义的属性
14571461 const name = attributeSemantics [ p ] || p ;
@@ -1478,11 +1482,19 @@ export default class TileMeshPainter {
14781482
14791483 attrs [ name ] = extend ( { } , attributes [ p ] ) ;
14801484 attrs [ name ] . buffer = buffer ;
1485+ attrs [ name ] . type = getArrayType ( attrs [ name ] . array ) ;
14811486 delete attrs [ name ] . array ;
14821487 if ( name === attributeSemantics [ 'POSITION' ] ) {
14831488 attrs [ name ] . array = attributes [ p ] . array ;
1489+ vertexCount = attributes [ p ] . array . length / 3 ;
14841490 }
14851491 }
1492+ // 补上缺失的_BATHCID属性,解决macos下 vertex buffer not big enough 报错
1493+ const pickingIdAttribute = attributeSemantics [ '_BATCHID' ] ;
1494+ if ( ! attrs [ pickingIdAttribute ] && ! isI3DM ) {
1495+ const pickingData = new Uint8Array ( vertexCount ) ;
1496+ attrs [ pickingIdAttribute ] = pickingData ;
1497+ }
14861498 // createColorArray(attrs);
14871499 const indices = gltfMesh . indices ? ( gltfMesh . indices . array ? gltfMesh . indices . array . slice ( ) : gltfMesh . indices ) : null ;
14881500 const geometry = new reshader . Geometry (
@@ -1679,7 +1691,7 @@ export default class TileMeshPainter {
16791691 this . picking = new reshader . FBORayPicking (
16801692 this . _renderer ,
16811693 {
1682- vert : this . _standardShader . vert ,
1694+ vert : pickingVert ,
16831695 extraCommandProps,
16841696 uniforms : this . _standardShader . uniforms ,
16851697 defines : {
0 commit comments