|
|
@@ -17,12 +17,12 @@ Shader::~Shader()
|
|
|
|
|
|
void Shader::Bind() const
|
|
|
{
|
|
|
- glUseProgram(m_ShaderId);
|
|
|
+ GL_CALL(glUseProgram(m_ShaderId));
|
|
|
}
|
|
|
|
|
|
void Shader::Unbind() const
|
|
|
{
|
|
|
- glUseProgram(0);
|
|
|
+ GL_CALL(glUseProgram(0));
|
|
|
}
|
|
|
|
|
|
void Shader::SetUniform4f(const std::string& name, float v0, float v1, float v2, float v3)
|
|
|
@@ -49,7 +49,7 @@ GLint Shader::GetUniformLocation(const std::string& name)
|
|
|
std::cout << "Warning: uniform " << name << " doesn't exist" << std::endl;
|
|
|
}
|
|
|
|
|
|
- m_Locations[name] = location; // 如果没找到 会一直找不到 所以不用 else 判断
|
|
|
+ m_Locations[name] = location; // 濡傛灉娌℃壘鍒� 浼氫竴鐩存壘涓嶅埌 鎵€浠ヤ笉鐢� else 鍒ゆ柇
|
|
|
return location;
|
|
|
}
|
|
|
|
|
|
@@ -82,13 +82,13 @@ GLuint Shader::CreateShader(const std::string& vertexSource, const std::string&
|
|
|
GLuint vs = CompileShader(vertexSource, GL_VERTEX_SHADER);
|
|
|
GLuint fs = CompileShader(fragmentSource, GL_FRAGMENT_SHADER);
|
|
|
|
|
|
- glAttachShader(program, vs); // 绑定顶点着色器
|
|
|
- glAttachShader(program, fs); // 绑定片段着色器
|
|
|
- glLinkProgram(program); // 链接程序,将所有着色器合并为一个可执行的程序
|
|
|
- glValidateProgram(program); // 验证程序对象是否可以在当前的 OpenGL 状态下执行
|
|
|
+ GL_CALL(glAttachShader(program, vs)); // 缁戝畾椤剁偣鐫€鑹插櫒
|
|
|
+ GL_CALL(glAttachShader(program, fs)); // 缁戝畾鐗囨�鐫€鑹插櫒
|
|
|
+ GL_CALL(glLinkProgram(program)); // 閾炬帴绋嬪簭锛屽皢鎵€鏈夌潃鑹插櫒鍚堝苟涓轰竴涓�彲鎵ц�鐨勭▼搴�
|
|
|
+ GL_CALL(glValidateProgram(program)); // 楠岃瘉绋嬪簭瀵硅薄鏄�惁鍙�互鍦ㄥ綋鍓嶇殑 OpenGL 鐘舵€佷笅鎵ц�
|
|
|
|
|
|
- glDeleteShader(fs); // 删除着色器对象 因为一旦着色器被链接到程序对象,着色器的代码已经被链接到程序中,所以可以安全地删除着色器对象
|
|
|
- glDeleteShader(vs);
|
|
|
+ GL_CALL(glDeleteShader(fs)); // 鍒犻櫎鐫€鑹插櫒瀵硅薄 鍥犱负涓€鏃︾潃鑹插櫒琚�摼鎺ュ埌绋嬪簭瀵硅薄锛岀潃鑹插櫒鐨勪唬鐮佸凡缁忚�閾炬帴鍒扮▼搴忎腑锛屾墍浠ュ彲浠ュ畨鍏ㄥ湴鍒犻櫎鐫€鑹插櫒瀵硅薄
|
|
|
+ GL_CALL(glDeleteShader(vs));
|
|
|
|
|
|
return program;
|
|
|
}
|
|
|
@@ -100,13 +100,13 @@ GLuint Shader::CompileShader(const std::string& source, GLenum inType)
|
|
|
glShaderSource(id, 1, &src, nullptr);
|
|
|
glCompileShader(id);
|
|
|
|
|
|
- // Shader 错误处理
|
|
|
+ // Shader 閿欒�澶勭悊
|
|
|
GLint result;
|
|
|
glGetShaderiv(id, GL_COMPILE_STATUS, &result);
|
|
|
if (result == GL_FALSE) {
|
|
|
int length;
|
|
|
glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length);
|
|
|
- // alloca 在栈上申请内存,不需要 free ,在作用域结束后自动释放
|
|
|
+ // alloca 鍦ㄦ爤涓婄敵璇峰唴瀛橈紝涓嶉渶瑕� free 锛屽湪浣滅敤鍩熺粨鏉熷悗鑷�姩閲婃斁
|
|
|
char* msg = (char*)alloca(length * sizeof(char));
|
|
|
glGetShaderInfoLog(id, length, &length, msg);
|
|
|
std::cout << "Shader Compile " << (inType == GL_VERTEX_SHADER ? "vertex shader" : "fragment shader") << " Fail" << std::endl;
|