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