1 /* 2 Copyright (c) 2008 Seneca College 3 Licenced under the MIT License (http://www.c3dl.org/index.php/mit-license/) 4 */ 5 6 /** 7 @private 8 */ 9 c3dl.solid_color_callback = function(renderingObj) 10 { 11 var progObjID = renderingObj.getProgramObjectID(); 12 var geometry = renderingObj.getGeometry(); 13 var effect = geometry.getEffect(); 14 var renderer = renderingObj.getRenderer(); 15 var glCanvas3D = renderingObj.getContext(); 16 17 glCanvas3D.useProgram(progObjID); 18 19 var modelViewMatrix = c3dl.peekMatrix(); 20 c3dl.matrixMode(c3dl.PROJECTION); 21 var projectionMatrix = c3dl.peekMatrix(); 22 c3dl.matrixMode(c3dl.MODELVIEW); 23 24 // create a ModelViewProjection matrix. By doing this, we can multiply 25 // 3 matrices together once per model instead of once per vertex 26 var modelViewProjMatrix = c3dl.multiplyMatrixByMatrix(projectionMatrix, modelViewMatrix); 27 renderer.setUniformMatrix(progObjID, "modelViewProjMatrix", modelViewProjMatrix); 28 renderer.setUniformf(progObjID, "color", effect.getParameter("color")); 29 30 // render all the collation elements. Every collation element in an object will 31 // have the same tranformation 32 for(var coll = 0; coll < geometry.getPrimitiveSets().length; coll++) 33 { 34 var currColl = geometry.getPrimitiveSets()[coll]; 35 36 // Prevent C3DL from reporting an error, so check if attrib exsits 37 // before trying to set it. 38 // This is a kludge for Safari and Chrome since they want these attributes 39 //////////////////////////// 40 var normalAttribLoc = glCanvas3D.getAttribLocation(progObjID,"Normal"); 41 if(normalAttribLoc != -1 && currColl.getNormals()) 42 { 43 renderer.setVertexAttribArray(progObjID, "Normal", 3, currColl.getVBONormals()); 44 } 45 var texAttribLoc = glCanvas3D.getAttribLocation(progObjID, "Texture"); 46 if(texAttribLoc != -1 && currColl.getTexCoords()) 47 { 48 renderer.setVertexAttribArray(progObjID, "Texture", 2, currColl.getVBOTexCoords()); 49 } 50 ////////////////////////// End kludge 51 52 53 54 // VERTICES 55 renderer.setVertexAttribArray(progObjID, "Vertex", 3, currColl.getVBOVertices()); 56 glCanvas3D.drawArrays(renderer.getFillMode(), 0, currColl.getVertices().length/3); 57 } 58 } 59