Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

S3MCreateShaderProgramJob.js 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. const { Cesium } = DC.Namespace
  2. import ProgramDefines from './Enum/ProgramDefines.js';
  3. import VertexCompressOption from './Enum/VertexCompressOption.js';
  4. import InstanceMode from './Enum/InstanceMode.js';
  5. function S3MCreateShaderProgramJob(){
  6. this.model = undefined;
  7. this.context = undefined;
  8. }
  9. S3MCreateShaderProgramJob.prototype.set = function(context, model) {
  10. this.model = model;
  11. this.context = context;
  12. };
  13. function getExtension(gl, names) {
  14. let length = names.length;
  15. for (let i = 0; i < length; ++i) {
  16. let extension = gl.getExtension(names[i]);
  17. if (extension) {
  18. return extension;
  19. }
  20. }
  21. return undefined;
  22. }
  23. S3MCreateShaderProgramJob.prototype.execute = function(){
  24. const context = this.context;
  25. const model = this.model;
  26. const layer = model.layer;
  27. const vs = model.vs;
  28. const fs = model.fs;
  29. const attributeLocations = model.attributeLocations;
  30. const material = model.material;
  31. const vertexPackage = model.vertexPackage;
  32. let vsNew = model.batchTable ? model.batchTable.getVertexShaderCallback()(vs) : vs;
  33. if(context.texturelod === undefined){
  34. context.texturelod = Cesium.defaultValue(getExtension(context._gl, ['EXT_shader_texture_lod']), false);
  35. }
  36. let vp = new Cesium.ShaderSource({
  37. sources : [vsNew]
  38. });
  39. let fp = new Cesium.ShaderSource({
  40. sources : [fs]
  41. });
  42. if(Cesium.defined(attributeLocations['aNormal'])) {
  43. vp.defines.push(ProgramDefines.VertexNormal);
  44. fp.defines.push(ProgramDefines.VertexNormal);
  45. }
  46. if(Cesium.defined(attributeLocations['aColor'])) {
  47. vp.defines.push(ProgramDefines.VertexColor);
  48. }
  49. if(material && material.textures.length > 0) {
  50. vp.defines.push(ProgramDefines.COMPUTE_TEXCOORD);
  51. fp.defines.push(ProgramDefines.COMPUTE_TEXCOORD);
  52. }
  53. if(material && material.textures.length === 2) {
  54. vp.defines.push(ProgramDefines.TexCoord2);
  55. fp.defines.push(ProgramDefines.TexCoord2);
  56. }
  57. if(Cesium.defined(attributeLocations['aTexCoord0'])) {
  58. vp.defines.push('TexCoord');
  59. fp.defines.push('TexCoord');
  60. }
  61. if(vertexPackage.instanceIndex > -1){
  62. vp.defines.push(ProgramDefines.Instance);
  63. }
  64. if(vertexPackage.instanceMode === InstanceMode.BIM){
  65. vp.defines.push(ProgramDefines.InstanceBim);
  66. }
  67. if(Cesium.defined(vertexPackage.compressOptions)){
  68. let compressOptions = vertexPackage.compressOptions;
  69. if((compressOptions & VertexCompressOption.SVC_Vertex) === VertexCompressOption.SVC_Vertex){
  70. vp.defines.push(ProgramDefines.COMPRESS_VERTEX);
  71. }
  72. if((compressOptions & VertexCompressOption.SVC_Normal) === VertexCompressOption.SVC_Normal){
  73. vp.defines.push(ProgramDefines.COMPRESS_NORMAL);
  74. }
  75. if((compressOptions & VertexCompressOption.SVC_VertexColor) === VertexCompressOption.SVC_VertexColor){
  76. vp.defines.push(ProgramDefines.COMPRESS_COLOR);
  77. }
  78. if((compressOptions & VertexCompressOption.SVC_TexutreCoord) === VertexCompressOption.SVC_TexutreCoord){
  79. vp.defines.push(ProgramDefines.COMPRESS_TEXCOORD);
  80. }
  81. }
  82. if(Cesium.defined(model.arrIndexPackage) && model.arrIndexPackage.length > 0 && model.arrIndexPackage[0].primitiveType === 2){
  83. fp.defines.push(ProgramDefines.UseLineColor);
  84. }
  85. model.shaderProgram = Cesium.ShaderProgram.fromCache({
  86. context : context,
  87. vertexShaderSource : vp,
  88. fragmentShaderSource : fp,
  89. attributeLocations : attributeLocations
  90. });
  91. };
  92. export default S3MCreateShaderProgramJob;