コード例 #1
0
ファイル: Shader.cpp プロジェクト: SIMONSON7/CQEngine_beta
Shader::Shader(const char* vsFilePath, const char* fsFilePath)
	:m_vShaderFile(NULL), m_fShaderFile(NULL), m_vFileSize(0), m_fFileSize(0)
{
	// 加载 vs
	if (_loadShader(vsFilePath, &m_vShaderFile, &m_vFileSize) != 0) return;
	const char* tmp = m_vShaderFile;

	// 编译
	GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
	glShaderSource(vertexShader, 1, &tmp, NULL);
	glCompileShader(vertexShader);

	GLint success ;
	GLchar infoLog[1024];
	glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);

	if (!success)
	{
		//输出错误信息;
		glGetShaderInfoLog(vertexShader, 1024, NULL, infoLog);
		return;
	}

	//加载
	if (_loadShader(fsFilePath, &m_fShaderFile, &m_fFileSize) != 0) return;
	tmp = m_fShaderFile;

	//fs obj
	GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
	glShaderSource(fragmentShader, 1, &tmp, NULL);
	glCompileShader(fragmentShader);

	// 检查 fs 编译结果:
	glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
	if (!success)
	{
		//输出错误信息;
		glGetShaderInfoLog(fragmentShader, 1024, NULL, infoLog);
		return;
	}

	//生成 program objec 并且进行链接
	m_shaderProgram = glCreateProgram();
	glAttachShader(m_shaderProgram, vertexShader);
	glAttachShader(m_shaderProgram, fragmentShader);

	glLinkProgram(m_shaderProgram);
	glGetProgramiv(m_shaderProgram, GL_LINK_STATUS, &success);
	if (!success)
	{
		//输出错误信息;
		glGetProgramInfoLog(m_shaderProgram, 1024, NULL, infoLog);
		return;
	}
	//删除 vs,fs
	glDeleteShader(vertexShader);
	glDeleteShader(fragmentShader);
}
コード例 #2
0
ファイル: glslShaders.cpp プロジェクト: Eyescale/Equalizer
bool GLSLShaders::loadShaders(const std::string &vShader,
                              const std::string &fShader,
                              const GLEWContext *glewContext)
{
    if (_shadersLoaded)
        return true;

    LBASSERT(glewContext);
    _glewContext = glewContext;

    _program = glCreateProgramObjectARB();

    GLhandleARB vertexShader = _loadShader(vShader, GL_VERTEX_SHADER_ARB);
    if (!vertexShader)
        return _cleanupOnError();

    glAttachObjectARB(_program, vertexShader);

    GLhandleARB fragmentShader = _loadShader(fShader, GL_FRAGMENT_SHADER_ARB);
    if (!fragmentShader)
        return _cleanupOnError(vertexShader);

    glAttachObjectARB(_program, fragmentShader);

    glLinkProgramARB(_program);

    GLint status;
    glGetObjectParameterivARB(_program, GL_OBJECT_LINK_STATUS_ARB, &status);
    if (status != GL_FALSE)
    {
        _shadersLoaded = true;
        return true;
    }

    _printLog(_program, "Linking");
    return _cleanupOnError(vertexShader, fragmentShader);
}
コード例 #3
0
bool CShaderMngr::LoadShader(const char *strFileName, GLenum nShaderType, const char *strName)
{
	shaderData *sData = new shaderData;

	if (_loadShader(strFileName, sData) == 0)
	{
		if (_compileShader(sData, nShaderType))
		{
			m_Shaders.push_back(std::pair<string, shaderData*>(string(strName), sData));
			return true;
		}
	}

	return false;
}