void OpenGLVideo::render(const QRectF &target, const QRectF& roi, const QMatrix4x4& transform) { DPTR_D(OpenGLVideo); Q_ASSERT(d.manager); const qint64 mt = d.material->type(); if (d.material_type != mt) { qDebug() << "material changed: " << VideoMaterial::typeName(d.material_type) << " => " << VideoMaterial::typeName(mt); d.material_type = mt; } VideoShader *shader = d.manager->prepareMaterial(d.material); //TODO: print shader type name if changed. prepareMaterial(,sample_code, pp_code) shader->update(d.material); shader->program()->setUniformValue(shader->opacityLocation(), (GLfloat)1.0); shader->program()->setUniformValue(shader->matrixLocation(), transform*d.matrix); // uniform end. attribute begin d.bindAttributes(shader, target, roi); // normalize? const bool blending = d.material->hasAlpha(); if (blending) { DYGL(glEnable(GL_BLEND)); DYGL(glBlendFunc(GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA)); } DYGL(glDrawArrays(d.geometry.mode(), 0, d.geometry.textureVertexCount())); if (blending) DYGL(glDisable(GL_BLEND)); // d.shader->program()->release(); //glUseProgram(0) d.unbindAttributes(shader); d.material->unbind(); }
void OpenGLVideo::render(const QRectF &target, const QRectF& roi, const QMatrix4x4& transform) { DPTR_D(OpenGLVideo); Q_ASSERT(d.manager); VideoShader *shader = d.manager->prepareMaterial(d.material); shader->update(d.material); shader->program()->setUniformValue(shader->opacityLocation(), (GLfloat)1.0); shader->program()->setUniformValue(shader->matrixLocation(), transform*d.matrix); // uniform end. attribute begin d.bindAttributes(shader, target, roi); // normalize? const bool blending = d.material->hasAlpha(); if (blending) { DYGL(glEnable(GL_BLEND)); DYGL(glBlendFunc(GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA)); } DYGL(glDrawArrays(d.geometry.mode(), 0, d.geometry.textureVertexCount())); if (blending) DYGL(glDisable(GL_BLEND)); // d.shader->program()->release(); //glUseProgram(0) d.unbindAttributes(shader); d.material->unbind(); }