/*! * Sets the pass's \a shaderProgram. This posts a ComponentUpdated * QScenePropertyChange to the QChangeArbiter. The value is set to * the \a ShaderProgram and the property name to "shaderProgram". */ void QRenderPass::setShaderProgram(QShaderProgram *shaderProgram) { Q_D(QRenderPass); if (d->m_shader != shaderProgram) { if (d->m_shader != Q_NULLPTR && d->m_changeArbiter != Q_NULLPTR) { QScenePropertyChangePtr e(new QScenePropertyChange(NodeRemoved, QSceneChange::Node, id())); e->setPropertyName("shaderProgram"); e->setValue(QVariant::fromValue(d->m_shader->id())); d->notifyObservers(e); } d->m_shader = shaderProgram; emit shaderProgramChanged(); // We need to add it as a child of the current node if it has been declared inline // Or not previously added as a child of the current node so that // 1) The backend gets notified about it's creation // 2) When the current node is destroyed, it gets destroyed as well if (!shaderProgram->parent()) shaderProgram->setParent(this); if (d->m_changeArbiter != Q_NULLPTR) { QScenePropertyChangePtr e(new QScenePropertyChange(NodeAdded, QSceneChange::Node, id())); e->setPropertyName("shaderProgram"); e->setValue(QVariant::fromValue(shaderProgram->id())); d->notifyObservers(e); } } }
/*! \property QShaderProgramBuilder::shaderProgram Holds the shader program on which this builder generates code. */ void QShaderProgramBuilder::setShaderProgram(QShaderProgram *program) { Q_D(QShaderProgramBuilder); if (program != d->m_shaderProgram) { if (d->m_shaderProgram) d->unregisterDestructionHelper(d->m_shaderProgram); // We need to add it as a child of the current node if it has been declared inline // Or not previously added as a child of the current node so that // 1) The backend gets notified about it's creation // 2) When the current node is destroyed, it gets destroyed as well if (program && !program->parent()) program->setParent(this); d->m_shaderProgram = program; // Ensures proper bookkeeping if (d->m_shaderProgram) d->registerDestructionHelper(d->m_shaderProgram, &QShaderProgramBuilder::setShaderProgram, d->m_shaderProgram); emit shaderProgramChanged(program); } }