Ejemplo n.º 1
0
	void setFragmentShader(const QByteArray &code) {
		if (!m_frag)
			m_frag = addShaderFromSourceCode(QOpenGLShader::Fragment, code);
	}
Ejemplo n.º 2
0
	void setVertexShader(const QByteArray &code) {
		if (!m_vertex) {
			m_vertex = addShaderFromSourceCode(QOpenGLShader::Vertex, code);
			m_hasColor = code.contains("vColor");
		}
	}
Ejemplo n.º 3
0
void Z3DShaderProgram::loadFromSourceCode(const QStringList &vertSrcs, const QStringList &geomSrcs,
                                          const QStringList &fragSrcs, const QString &header)
{
  removeAllShaders();
  for (int i=0; i<vertSrcs.size(); ++i) {
    QString vertSrc = header + vertSrcs[i];
#ifdef _QT5_
    if (!addShaderFromSourceCode(QOpenGLShader::Vertex, vertSrc)) {
#else
    if (!addShaderFromSourceCode(QGLShader::Vertex, vertSrc)) {
#endif
      LDEBUG() << vertSrc;
      throw Exception("Can not compile vertex shader. Error log: " + log().toStdString());
    }
  }

  for (int i=0; i<geomSrcs.size(); ++i) {
    QString geomSrc = header + geomSrcs[i];
#ifdef _QT5_
    if (!addShaderFromSourceCode(QOpenGLShader::Geometry, geomSrc)) {
#else
    if (!addShaderFromSourceCode(QGLShader::Geometry, geomSrc)) {
#endif
      LDEBUG() << geomSrc;
      throw Exception("Can not compile geometry shader. Error log: " + log().toStdString());
    }
  }

  for (int i=0; i<fragSrcs.size(); ++i) {
    QString fragSrc = header + fragSrcs[i];
#ifdef _QT5_
    if (!addShaderFromSourceCode(QOpenGLShader::Fragment, fragSrc)) {
#else
    if (!addShaderFromSourceCode(QGLShader::Fragment, fragSrc)) {
#endif
      LDEBUG() << fragSrc;
      throw Exception("Can not compile fragment shader. Error log: " + log().toStdString());
    }
  }

  if (!link()) {
    throw Exception("Can not link shader. Error log: " + log().toStdString());
  }
}

void Z3DShaderProgram::loadFromSourceCode(const QStringList &vertSrcs, const QStringList &fragSrcs,
                                          const QString &header)
{
  loadFromSourceCode(vertSrcs, QStringList(), fragSrcs, header);
}

void Z3DShaderProgram::setHeaderAndRebuild(const QString &header)
{
  loadFromSourceCode(m_vertSrcs, m_geomSrcs, m_fragSrcs, header);
}

GLint Z3DShaderProgram::getUniformLocation(const QString &name)
{
  GLint l = uniformLocation(name);
  if (l == -1 && logUniformLocationError()) {
    LWARN() << "Failed to locate uniform:" << name;
  }
  return l;
}