Changeset 19853 for issm/trunk-jpl/src/m/plot/webgl.js
- Timestamp:
- 12/03/15 21:57:22 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/plot/webgl.js
r19839 r19853 66 66 return bufferArray; 67 67 } //}}} 68 function createSolidTexture(gl, r, g, b, a) { 69 var data = new Uint8Array([r, g, b, a]); 70 var texture = gl.createTexture(); 71 gl.bindTexture(gl.TEXTURE_2D, texture); 72 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data); 73 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 74 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 75 gl.bindTexture(gl.TEXTURE_2D, null); 76 return texture; 77 } 78 function initTexture(gl,imageSource) { //{{{ 79 var texture = gl.createTexture(); 80 texture.image = new Image(); 81 texture.image.onload = function () { 82 handleLoadedTexture(gl,texture); 83 } 84 texture.image.src = imageSource; 85 texture.isLoaded = true; 86 return texture; 87 } //}}} 88 function handleLoadedTexture(gl,texture) { //{{{ 89 gl.activeTexture(gl.TEXTURE0); 90 gl.bindTexture(gl.TEXTURE_2D, texture); 91 gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true); 92 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image); 93 gl.generateMipmap(gl.TEXTURE_2D); 94 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST_MIPMAP_LINEAR); 95 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 96 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); 97 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); 98 gl.bindTexture(gl.TEXTURE_2D, null); 99 } //}}} 68 100 function Node(gl,options) { //{{{ 69 101 … … 71 103 72 104 node= {buffers:[], 73 shader:gl.shaders[" colored"]["program"],105 shader:gl.shaders["unlit_textured"]["program"], 74 106 draw:null, 75 107 hideOcean:false, … … 87 119 scale:vec3.fromValues(1, 1, 1), 88 120 modelMatrix:mat4.create(), 89 shaderName:" colored",121 shaderName:"unlit_textured", 90 122 }; 91 123 … … 120 152 var normalizedValue; 121 153 122 colorbar=colorbars[cmap];154 var colorbar=colorbars[cmap]; 123 155 124 156 value = clamp(value, min, max); … … 135 167 //{{{ Shader Loading 136 168 function loadShaders(gl) { //{{{ 137 // TODO: Subsitute shaders["colored"] with shaderColored 138 shaderName = "colored"; 169 var shaderNames = ["colored", "unlit_textured"]; 139 170 shaders = {}; 140 shaders[ shaderName] = {loaded:false, vsh:{}, fsh:{}};171 shaders["colored"] = {loaded:false, vsh:{}, fsh:{}}; 141 172 shaders["colored"]["vsh"]["string"] = 142 173 ['attribute vec3 aVertexPosition;', … … 160 191 ' gl_FragColor = vColor;', 161 192 '}'].join('\n'); 162 163 shaders[shaderName]["vsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["vsh"]["string"], "vsh"); 164 shaders[shaderName]["fsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["fsh"]["string"], "fsh"); 165 166 shaders[shaderName]["program"] = gl.createProgram(); 167 gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["vsh"]["shader"]); 168 gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["fsh"]["shader"]); 169 gl.linkProgram(shaders[shaderName]["program"]); 170 171 if (!gl.getProgramParameter(shaders[shaderName]["program"], gl.LINK_STATUS)) { 172 alert("Could not initialise shaders"); 173 } 174 175 var vshStringArray = shaders[shaderName]["vsh"]["string"].split("\n"); 176 var fshStringArray = shaders[shaderName]["fsh"]["string"].split("\n"); 177 var line = ""; 178 var property = ""; 179 for (var i = 0; i < vshStringArray.length; i++) { 180 line = vshStringArray[i]; 181 if (line.search("attribute") != -1) { 182 property = nameFromLine(line); 183 shaders[shaderName]["program"][property] = gl.getAttribLocation(shaders[shaderName]["program"], property); 184 } 185 else if (line.search("uniform") != -1) { 186 property = nameFromLine(line); 187 shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property); 188 } 189 else if (line.search("void main") != -1) { 190 break; 191 } 192 } 193 for (var i = 0; i < fshStringArray.length; i++) { 194 line = fshStringArray[i]; 195 if (line.search("uniform") != -1) { 196 property = nameFromLine(line); 197 shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property); 198 } 199 else if (line.search("void main") != -1) { 200 break; 201 } 202 } 203 shaders[shaderName]["loaded"] = true; 193 shaders["unlit_textured"] = {loaded:false, vsh:{}, fsh:{}}; 194 shaders["unlit_textured"]["vsh"]["string"] = 195 ['attribute vec3 aVertexPosition;', 196 'attribute vec2 aTextureCoord;', 197 '', 198 'uniform mat4 uMVPMatrix;', 199 '', 200 'varying vec2 vTextureCoord;', 201 '', 202 'void main(void) {', 203 ' gl_Position = uMVPMatrix * vec4(aVertexPosition.xyz, 1.0);', 204 ' vTextureCoord = aTextureCoord;', 205 '}'].join('\n'); 206 shaders["unlit_textured"]["fsh"]["string"] = 207 ['precision mediump float;', 208 '', 209 'varying vec2 vTextureCoord;', 210 '', 211 'uniform sampler2D uColorSampler;', 212 '', 213 'void main(void) {', 214 ' gl_FragColor = texture2D(uColorSampler, vec2(vTextureCoord.s, vTextureCoord.t));', 215 '}'].join('\n'); 216 shaderNames.forEach(function(shaderName){ 217 shaders[shaderName]["vsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["vsh"]["string"], "vsh"); 218 shaders[shaderName]["fsh"]["shader"] = getShaderByString(gl, shaders[shaderName]["fsh"]["string"], "fsh"); 219 220 shaders[shaderName]["program"] = gl.createProgram(); 221 gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["vsh"]["shader"]); 222 gl.attachShader(shaders[shaderName]["program"], shaders[shaderName]["fsh"]["shader"]); 223 gl.linkProgram(shaders[shaderName]["program"]); 224 225 if (!gl.getProgramParameter(shaders[shaderName]["program"], gl.LINK_STATUS)) { 226 alert("Could not initialise shaders"); 227 } 228 229 var vshStringArray = shaders[shaderName]["vsh"]["string"].split("\n"); 230 var fshStringArray = shaders[shaderName]["fsh"]["string"].split("\n"); 231 var line = ""; 232 var property = ""; 233 for (var i = 0; i < vshStringArray.length; i++) { 234 line = vshStringArray[i]; 235 if (line.search("attribute") != -1) { 236 property = nameFromLine(line); 237 shaders[shaderName]["program"][property] = gl.getAttribLocation(shaders[shaderName]["program"], property); 238 } 239 else if (line.search("uniform") != -1) { 240 property = nameFromLine(line); 241 shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property); 242 } 243 else if (line.search("void main") != -1) { 244 break; 245 } 246 } 247 for (var i = 0; i < fshStringArray.length; i++) { 248 line = fshStringArray[i]; 249 if (line.search("uniform") != -1) { 250 property = nameFromLine(line); 251 shaders[shaderName]["program"][property] = gl.getUniformLocation(shaders[shaderName]["program"], property); 252 } 253 else if (line.search("void main") != -1) { 254 break; 255 } 256 } 257 shaders[shaderName]["loaded"] = true; 258 }); 204 259 return shaders; 205 260 } //}}} … … 269 324 gl.uniformMatrix4fv(node["shader"]["uMVPMatrix"], false, mvpMatrix); 270 325 gl.uniform1f(node["shader"]["uAlpha"], node["transparency"]); 326 if (node["texture"]) { 327 gl.activeTexture(gl.TEXTURE0); 328 gl.bindTexture(gl.TEXTURE_2D, node["texture"]); 329 gl.uniform1i(node["shader"]["uColorSampler"], 0); 330 } 271 331 if (node["useIndexBuffer"]) { 272 332 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, node["buffers"][node["buffers"].length - 1]); … … 304 364 window.requestAnimationFrame(function(time) {draw(gl,options,canvas,node)}); 305 365 updateCameraMatrix(canvas); 366 306 367 drawSceneGraphNode(gl, canvas, node); 307 308 368 } //}}} 309 369 //}}}
Note:
See TracChangeset
for help on using the changeset viewer.