//This function, as its name implies, uses the passed in GL widget void ShaderProgram::draw(GLWidget277 &f, Drawable &d) { prog.bind(); //Send the Drawable's color to the shader if(unifColor != -1){ prog.setUniformValue(unifColor, la::to_qvec(d.getColor())); } // Each of the following blocks checks that: // * This shader has this attribute, and // * This Drawable has a vertex buffer for this attribute. // If so, it binds the appropriate buffers to each attribute. if (attrPos != -1 && d.bindPos()) { prog.enableAttributeArray(attrPos); f.glVertexAttribPointer(attrPos, 4, GL_FLOAT, false, 0, NULL); } if (attrNor != -1 && d.bindNor()) { prog.enableAttributeArray(attrNor); f.glVertexAttribPointer(attrNor, 4, GL_FLOAT, false, 0, NULL); } // Bind the index buffer and then draw shapes from it. // This invokes the shader program, which accesses the vertex buffers. d.bindIdx(); f.glDrawElements(d.drawMode(), d.elemCount(), GL_UNSIGNED_INT, 0); if (attrPos != -1) prog.disableAttributeArray(attrPos); if (attrNor != -1) prog.disableAttributeArray(attrNor); f.printGLErrorLog(); }
// This function, as its name implies, uses the passed in GL widget void ShaderProgram::draw(GLWidget277 &f, Drawable &d) { prog.bind(); // Each of the following blocks checks that: // * This shader has this attribute, and // * This Drawable has a vertex buffer for this attribute. // If so, it binds the appropriate buffers to each attribute. if (attrPos != -1 && d.bindPos()) { prog.enableAttributeArray(attrPos); f.glVertexAttribPointer(attrPos, 3, GL_FLOAT, false, 0, NULL); } if (attrNor != -1 && d.bindNor()) { prog.enableAttributeArray(attrNor); f.glVertexAttribPointer(attrNor, 3, GL_FLOAT, false, 0, NULL); } if (attrCol != -1 && d.bindCol()) { prog.enableAttributeArray(attrCol); f.glVertexAttribPointer(attrCol, 3, GL_FLOAT, false, 0, NULL); } //ADDED UV STUFF if (attrUV != -1 && d.bindUV()) { prog.enableAttributeArray(attrUV); f.glVertexAttribPointer(attrUV, 4, GL_FLOAT, false, 0, NULL); } // Bind the index buffer and then draw shapes from it. // This invokes the shader program, which accesses the vertex buffers. d.bindIdx(); if(textSampler != nullptr) { textSampler->bind(); } f.glDrawElements(d.drawMode(), d.elemCount(), GL_UNSIGNED_INT, 0); if (attrPos != -1) prog.disableAttributeArray(attrPos); if (attrNor != -1) prog.disableAttributeArray(attrNor); if (attrCol!= -1) prog.disableAttributeArray(attrCol); if (attrUV != -1) prog.disableAttributeArray(attrUV); f.printGLErrorLog(); }