//====================================================================== //====================================================================== void NvGraphicShaderGL::Load(const char* vert, const char* frag) { NvGLSLProgram *prog = NvGLSLProgram::createFromStrings(vert, frag); CHECK_GL_ERROR(); if (prog==NULL) { // !!!!TBD TODO return; } m_program = prog; prog->enable(); m_positionIndex = prog->getAttribLocation("position"); m_uvIndex = prog->getAttribLocation("tex"); prog->setUniform1i(prog->getUniformLocation("sampler"), 0); // texunit index zero. m_matrixIndex = prog->getUniformLocation("pixelToClipMat"); m_alphaIndex = prog->getUniformLocation("alpha"); m_colorIndex = prog->getUniformLocation("color"); prog->disable(); CHECK_GL_ERROR(); }
void TopazSample::drawModel(GLenum mode, NvGLSLProgram& program, TopazGLModel& model) { glVertexAttribFormat(VERTEX_POS, 3, GL_FLOAT, GL_FALSE, model.getModel()->getCompiledPositionOffset()); glVertexAttribBinding(VERTEX_POS, 0); glEnableVertexAttribArray(VERTEX_POS); program.enable(); program.bindTextureRect("pattern", 0, brushStyle->getTextureId()); glBindBufferRange(GL_UNIFORM_BUFFER, UBO_OBJECT, model.getBufferID("ubo"), 0, sizeof(ObjectData)); glBindVertexBuffer(0, model.getBufferID("vbo"), 0, model.getModel()->getCompiledVertexSize() * sizeof(float)); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, model.getBufferID("ibo")); glDrawElements(mode, model.getModel()->getCompiledIndexCount(NvModelPrimType::TRIANGLES), GL_UNSIGNED_INT, nullptr); if (model.cornerPointsExists()) { glBindBufferRange(GL_UNIFORM_BUFFER, UBO_OBJECT, model.getCornerBufferID("ubo"), 0, sizeof(ObjectData)); glBindVertexBuffer(0, model.getCornerBufferID("vbo"), 0, sizeof(nv::vec3f)); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, model.getCornerBufferID("ibo")); glDrawElements(GL_LINE_STRIP, model.getCornerIndices().size(), GL_UNSIGNED_INT, nullptr); } program.disable(); glDisableVertexAttribArray(VERTEX_POS); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindVertexBuffer(0, 0, 0, 0); }