Bladeren bron

improve tileset fragmentShader

tags/2.8.0
Caven Chen 3 jaren geleden
bovenliggende
commit
b23427ca37
1 gewijzigde bestanden met toevoegingen van 56 en 21 verwijderingen
  1. 56
    21
      modules/overlay/model/Tileset.js

+ 56
- 21
modules/overlay/model/Tileset.js Bestand weergeven

@@ -17,7 +17,8 @@ class Tileset extends Overlay {
})
this._tileVisibleCallback = undefined
this._properties = undefined
this._customShader = undefined
this._fragmentShader = undefined
this._replaceFS = false
this._state = State.INITIALIZED
}

@@ -48,10 +49,10 @@ class Tileset extends Overlay {
*/
_updateTile(tile) {
let content = tile.content
let model = content._model
// sets properties
for (let i = 0; i < content.featuresLength; i++) {
let feature = content.getFeature(i)
let model = feature.content._model
// sets properties
if (this._properties && this._properties.length) {
this._properties.forEach(property => {
if (
@@ -65,21 +66,30 @@ class Tileset extends Overlay {
}
})
}
// sets customShader
if (
this._customShader &&
model &&
model._sourcePrograms &&
model._rendererResources
) {
Object.keys(model._sourcePrograms).forEach(key => {
let program = model._sourcePrograms[key]
model._rendererResources.sourceShaders[
program.fragmentShader
] = this._customShader
})
model._shouldRegenerateShaders = true
}
}
// sets fragmentShader
if (
this._fragmentShader &&
model &&
model._sourcePrograms &&
model._rendererResources
) {
Object.keys(model._sourcePrograms).forEach(key => {
let program = model._sourcePrograms[key]
let sourceShaders = model._rendererResources.sourceShaders
if (this._replaceFS) {
sourceShaders[program.fragmentShader] = this._fragmentShader
} else {
let oldFS = sourceShaders[program.fragmentShader]
sourceShaders[program.fragmentShader] = oldFS.replace(
'gl_FragColor = vec4(color, 1.0);\n}',
`gl_FragColor = vec4(color, 1.0);
${this._fragmentShader}\n}
`
)
}
})
model._shouldRegenerateShaders = true
}
}

@@ -232,11 +242,36 @@ class Tileset extends Overlay {

/**
* Sets feature FS
* @param customShader
* @param fragmentShader
* @returns {Tileset}
*/
setCustomShader(customShader) {
this._customShader = customShader
setCustomShader(fragmentShader) {
this._replaceFS = true
this._fragmentShader = fragmentShader
this._bindVisibleEvent()
return this
}

/**
*
* @param fragmentShader
* @return {Tileset}
*/
replaceFS(fragmentShader) {
this._replaceFS = true
this._fragmentShader = fragmentShader
this._bindVisibleEvent()
return this
}

/**
*
* @param fragmentShader
* @return {Tileset}
*/
appendFS(fragmentShader) {
this._replaceFS = false
this._fragmentShader = fragmentShader
this._bindVisibleEvent()
return this
}

Laden…
Annuleren
Opslaan