This commit is contained in:
2026-02-11 17:50:12 +08:00
parent 1bcfb49b7a
commit 26e00f9fea
6 changed files with 202 additions and 51 deletions

View File

@@ -120,21 +120,35 @@ bool LOpenGLShader::compileShaderFromFile(const std::string &path) {
return true;
}
LOpenGLProgram::LOpenGLProgram() : linked_(false) {
Create();
}
LOpenGLProgram::LOpenGLProgram() { Create(); }
LOpenGLProgram::~LOpenGLProgram() {
glDeleteProgram(programId_);
if (programId_ != 0) {
glDeleteProgram(programId_);
}
}
void LOpenGLProgram::Create() { programId_ = glCreateProgram(); }
void LOpenGLProgram::Create() {
programId_ = glCreateProgram();
created_ = (programId_ != 0);
linked_ = false;
}
bool LOpenGLProgram::Link() const {
bool LOpenGLProgram::Link() {
if (!created_ || linked_ || shaderList_.empty()) {
return false;
}
glLinkProgram(programId_);
GLint success = 0;
glGetProgramiv(programId_, GL_LINK_STATUS, &success);
if (!success) {
char infoLog[512];
glGetProgramInfoLog(programId_, 512, nullptr, infoLog);
std::cout << "ERROR::PROGRAM::LINK_FAILED\n" << infoLog << std::endl;
linked_ = false;
return false;
}
linked_ = true;
return true;
}
@@ -165,7 +179,7 @@ void LOpenGLProgram::setUniformValue(const std::string &name, float x, float y,
}
void LOpenGLProgram::setUniformValue(const std::string &name, glm::mat4 value) const {
glUniform4fv(glGetUniformLocation(programId_, name.c_str()), 1, &value[0][0]);
glUniformMatrix4fv(glGetUniformLocation(programId_, name.c_str()), 1, GL_FALSE, &value[0][0]);
}
bool LOpenGLProgram::addShader(std::unique_ptr<LOpenGLShader> shader) {