code: function(name, shader) {
          if (this.programs[name] === undefined) {
              var compiledShader = this._makeProgram(shader);
              var program = new RenderProgramWrapper(this, compiledShader);
              program.name = name;
              program.initAttributes(shader.attributeList);
              program.draw = shader.drawCallback;
              program.setViewportUniforms(this._viewportRect(), this.options);
              this.programs[name] = program;
          }
          return this.programs[name];
      }
docs: Will create and return a RenderProgramWrapper for a shader program. name is a unique id, attributes an array of attribute names with their metadata. Each attribute needs at least a `name`  and `width` property: ~~~ [ {name:"aPosition", width: 2}, {name:"aOrientation", width: 3}, {name:"aLayer", width:2}, {name:"aColor",  width: 4} ] ~~~ The "aPositon", "aOrientation", and "aLayer" attributes should be the same for any webgl entity, since they support the basic 2D properties