コード例 #1
0
ファイル: gl.cpp プロジェクト: chutaicho/gl4osx
bool Shader::load(const std::string& vert, const std::string& frag)
{
    core::Buffer loader;
    loader.get(vert);

    GLuint vs = glCreateShader(GL_VERTEX_SHADER);

    const GLchar* v_src = loader.getRawString().c_str();
    const GLchar* v_array[] = {v_src};

    glShaderSource(vs, 1, v_array, NULL);
    glCompileShader(vs);
    checkCompileStatus(vs);

    loader.get(frag);

    const GLchar* f_src = loader.getRawString().c_str();
    const GLchar* f_array[] = {f_src};

    GLuint fs = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fs, 1, f_array, NULL);
    glCompileShader(fs);

    bool c_status = (checkCompileStatus(fs))? true : false;

    _program = glCreateProgram();
    glAttachShader(_program, vs);
    glAttachShader(_program, fs);
    glLinkProgram(_program);

    bool p_status = (checkProgramLinkStatus(_program))? true : false;
    return (p_status && c_status)? true : false;
}
コード例 #2
0
/* Shader Program Helper
 This function will attempt to create a shader program that has
 the Vertex and Fragement shader code that you pass in. If successfully
 compiled and linked to the program, the unique program ID given by
 OpenGL will be returned. This ID will be >1 if successful, or 0 (an
 invalid ID) if any of the above fails.

 Most of the Code below is for checking if the shaders compiled and
 linked correctly.
 */
GLuint CreateShaderProgram(const std::string &vsSource,
                           const std::string &fsSource) {
  GLuint programID = glCreateProgram();
  GLuint vsID = glCreateShader(GL_VERTEX_SHADER);
  GLuint fsID = glCreateShader(GL_FRAGMENT_SHADER);

  if (programID == 0 || vsID == 0 || fsID == 0) {
    // Clean up others that were created
    glDeleteProgram(programID);
    glDeleteShader(vsID);
    glDeleteShader(fsID);

    std::cerr << "Cannot create Shaders or Program" << std::endl;
    return 0; // invalid ID
  }

  // glShaderSource() expects char**, so these are helper variables
  const char *vsSourceArray = vsSource.c_str();
  const char *fsSourceArray = fsSource.c_str();

  // https://www.opengl.org/sdk/docs/man4/xhtml/glShaderSource.xml
  glShaderSource(vsID, 1, &vsSourceArray, NULL);

  glShaderSource(fsID, 1, &fsSourceArray, NULL);

  // Compile the Shader Sources, check for errors
  glCompileShader(vsID);
  glCompileShader(fsID);

  if (!checkCompileStatus(vsID) || !checkCompileStatus(fsID)) {
    // Clean up others that were created
    glDeleteProgram(programID);
    glDeleteShader(vsID);
    glDeleteShader(fsID);

    std::cerr << "Cannot create Shaders or Program" << std::endl;
    return 0; // invalid ID
  }

  glAttachShader(programID, vsID);
  glAttachShader(programID, fsID);

  glLinkProgram(programID);

  if (!checkLinkStatus(programID)) {
    // Clean up others that were created
    glDeleteProgram(programID);
    glDeleteShader(vsID);
    glDeleteShader(fsID);

    std::cerr << "Cannot create Shaders or Program" << std::endl;
    return 0; // invalid ID
  }

  return programID;
}
コード例 #3
0
ファイル: Shader.cpp プロジェクト: bitlinker/BitlinkerCommons
		bool Shader::compile()
		{
			if (isCompiled)
				return false;

			glCompileShader(m_shader);
			isCompiled = checkCompileStatus();

			return isCompiled;
		}
コード例 #4
0
ファイル: Shader.cpp プロジェクト: jhpy1024/Mazel
void Shader::createVertexShader(const std::string& source)
{
    auto cStrSource = source.c_str();

    m_VertexShader = glCreateShader(GL_VERTEX_SHADER);

    glShaderSource(m_VertexShader, 1, &cStrSource, NULL);
    glCompileShader(m_VertexShader);

    checkCompileStatus(m_VertexShader);
}
コード例 #5
0
ファイル: Shader.cpp プロジェクト: jhpy1024/Mazel
void Shader::createFragmentShader(const std::string& source)
{
    auto cStrSource = source.c_str();

    m_FragmentShader = glCreateShader(GL_FRAGMENT_SHADER);

    glShaderSource(m_FragmentShader, 1, &cStrSource, NULL);
    glCompileShader(m_FragmentShader);

    checkCompileStatus(m_FragmentShader);
}
コード例 #6
0
ファイル: shader.cpp プロジェクト: SafeKing/ClothSimulation
GLuint Shader::ComputeByGPU(const char* computeShaderName)
{
	const char *computeShaderSource = loadComputeFile(computeShaderName);
	GLuint computeShaderID = glCreateShader(GL_COMPUTE_SHADER);
	glShaderSource(computeShaderID, 1, &computeShaderSource, NULL);
	glCompileShader(computeShaderID);
	checkCompileStatus(computeShaderID, computeShaderName);

	GLuint program = glCreateProgram();
	glAttachShader(program, computeShaderID);
	glLinkProgram(program);
	checkLinkStatus(program, computeShaderName);
	return program;
}
コード例 #7
0
ファイル: Shader.cpp プロジェクト: cginternals/globjects
bool Shader::compile() const
{
    if (m_compilationFailed)
    {
        return false;
    }

    shadingLanguageIncludeImplementation().compile(this);

    m_compiled = checkCompileStatus();

    m_compilationFailed = !m_compiled;

    changed();

    return m_compiled;
}
コード例 #8
0
ファイル: glslshaders.c プロジェクト: catrope/cg
GLuint initShader(const char * srcPath, GLenum shaderType)
{
	GLuint shader = loadShader(srcPath,shaderType);
	checkCompileStatus(shader,srcPath);
	return shader;
}
コード例 #9
0
ファイル: GLSLProgram.cpp プロジェクト: Alan-ZhangDaixi/fluid
GLuint GLSLProgram::compileProgram(const char *vsource, const char *gsource, const char *fsource,
GLenum gsInput, GLenum gsOutput)
{
	GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
	GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);

	GLint compiled = 0;

	glShaderSource(vertexShader, 1, &vsource, 0);
	glShaderSource(fragmentShader, 1, &fsource, 0);

	glCompileShader(vertexShader);

	if (checkCompileStatus(vertexShader, &compiled) == 0)
	{
		printf("<compileProgram compilation error with vertexShader>:\n");
		printf("%s\n", vsource);
		return 0;
	}

	glCompileShader(fragmentShader);

	if (checkCompileStatus(fragmentShader, &compiled) == 0)
	{
		printf("<compileProgram compilation error with fragmentShader>:\n");
		printf("%s\n", fsource);
		return 0;
	}

	GLuint program = glCreateProgram();

	glAttachShader(program, vertexShader);
	glAttachShader(program, fragmentShader);

	if (gsource)
	{
		GLuint geomShader = glCreateShader(GL_GEOMETRY_SHADER_EXT);
		glShaderSource(geomShader, 1, &gsource, 0);
		glCompileShader(geomShader);
		glGetShaderiv(geomShader, GL_COMPILE_STATUS, (GLint *)&compiled);

		if (checkCompileStatus(geomShader, &compiled) == 0)
		{
			printf("<compileProgram compilation error with geomShader>:\n");
			printf("%s\n", gsource);
			return 0;
		}

		glAttachShader(program, geomShader);

		glProgramParameteriEXT(program, GL_GEOMETRY_INPUT_TYPE_EXT, gsInput);
		glProgramParameteriEXT(program, GL_GEOMETRY_OUTPUT_TYPE_EXT, gsOutput);
		glProgramParameteriEXT(program, GL_GEOMETRY_VERTICES_OUT_EXT, 4);
	}

	glLinkProgram(program);

	// check if program linked
	GLint success = 0;
	glGetProgramiv(program, GL_LINK_STATUS, &success);

	if (!success)
	{
		char temp[1024];
		glGetProgramInfoLog(program, 1024, 0, temp);
		fprintf(stderr, "Failed to link program:\n%s\n", temp);
		glDeleteProgram(program);
		program = 0;
		exit(EXIT_FAILURE);
	}

	return program;
}