Example #1
0
void Shader::buildProgram(sh *vtx, sh *frg)
{
	GLint status;
	GLchar *vtxSourceString = NULL, *frgSourceString = NULL;
	float  glLanguageVersion;

	sscanf_s((char *)glGetString(GL_SHADING_LANGUAGE_VERSION), "%f", &glLanguageVersion);

	GLuint version = static_cast<GLuint>(100 * glLanguageVersion);
	const GLsizei versionStringSize = sizeof("#version 123\n");

	program_handle = glCreateProgram();

	vtxSourceString = (char*)malloc(vtx->byteSize + versionStringSize);
	frgSourceString = (char*)malloc(frg->byteSize + versionStringSize);

	sprintf(vtxSourceString, "#version %d\n%s", version, vtx->string);
	sprintf(frgSourceString, "#version %d\n%s", version, frg->string);

	GLuint vtxShader = glCreateShader(GL_VERTEX_SHADER);
	glShaderSource(vtxShader, 1, (const GLchar **)&(vtxSourceString), NULL);

	glCompileShader(vtxShader);
	status = checkCompileError(vtxShader);
	if (status == 0) {
		printf("Failed to compile vtx shader:\n%s\n", vtxSourceString);
		return;
	}

	GLuint frgShader = glCreateShader(GL_FRAGMENT_SHADER);
	glShaderSource(frgShader, 1, (const GLchar **)&(frgSourceString), NULL);

	glCompileShader(frgShader);
	status = checkCompileError(frgShader);
	if (status == 0) {
		printf("Failed to compile frg shader:\n%s\n", frgSourceString);
		return;
	}

	free(vtxSourceString);
	vtxSourceString = NULL;

	free(frgSourceString);
	frgSourceString = NULL;

	glAttachShader(program_handle, vtxShader);
	glDeleteShader(vtxShader);

	glAttachShader(program_handle, frgShader);
	glDeleteShader(frgShader);

	linkProgram();
}
Example #2
0
GLuint GLSLProgram::compileProgram(const char *vsource, const char *fsource) {
    
    GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);  // create shader
    GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER); // create shader
    
    glShaderSource(vertShader, 1, &vsource, NULL);
    glShaderSource(fragShader, 1, &fsource, NULL);
    
    // compile vertex program
    glCompileShader(vertShader);
    if (!checkCompileError(vertShader, GL_VERTEX_SHADER)) {
        LOGI("Faild to compile Vertex Shader");
        return 0;
    }
    
    glCompileShader(fragShader);
    if (!checkCompileError(fragShader, GL_FRAGMENT_SHADER)) {
        LOGI("Faild to compile Fragment Shader");
        return 0;
    }
    
    GLuint program = glCreateProgram();
    // program attack shader
    glAttachShader(program, vertShader);
    glAttachShader(program, fragShader);
    
    // upload program
    glLinkProgram(program);
    
    GLint success = 0;
    glGetProgramiv(program, GL_LINK_STATUS, &success);
    
    if (!success) {
        GLint bufLength = 0;
        glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength);
        char *buf = new char[bufLength];
        glGetProgramInfoLog(program, bufLength, NULL, buf);
        LOGI("Cound not link program:\n%s\n", buf);
        delete [] buf;
    }
    
    // delete shader
    glDeleteShader(vertShader);
    glDeleteShader(fragShader);
    
    LOGI("Program Create Success");
    
    return program;
}
Example #3
0
    bool PythonScript::compile(bool outputInfo) {
        if (outputInfo)
            LogInfo("Compiling script");

        Py_XDECREF(BYTE_CODE);
        byteCode_ = Py_CompileString(source_.c_str(), filename_.c_str(), Py_file_input);
        isCompileNeeded_ = !checkCompileError();

        if (isCompileNeeded_) {
            Py_XDECREF(BYTE_CODE);
            byteCode_ = nullptr;
        }

        return !isCompileNeeded_;
    }
bool ShaderManager::checkAllCompileError(QString *o_log)
{
  GLint isAllCompiled = GL_TRUE;
  QString temp_log;
  std::vector <std::string> shaderPrograms = {m_data.m_vert, m_data.m_frag};

  // Iterate between vertex and fragment shaders to check compile errors
  for (auto shaderProg: shaderPrograms)
  {
    GLint isCompiled = checkCompileError(shaderProg, &temp_log);
    if (!isCompiled)
    {
      o_log->append(QString("%1:\n").arg(shaderProg.c_str()));
      o_log->append(temp_log);
    }
    if (isCompiled == GL_FALSE)
      isAllCompiled = isCompiled;
  }
  return isAllCompiled;
}