feat(RHI): 实现 RHIBuffer, RHITexture, RHIShader 抽象基类

- 新增 RHIBuffer, RHITexture, RHIShader 抽象基类
- D3D12Buffer/Texture/Shader 继承抽象基类
- OpenGLBuffer/Texture/Shader 继承抽象基类
- 添加 RHICapabilities, RHIDevice 头文件
- RHIEnums 添加 Fragment/TessControl/TessEvaluation
- 文档更新差异处理策略
This commit is contained in:
2026-03-17 17:26:41 +08:00
parent f2ae95e0a7
commit e38d5ccede
17 changed files with 3113 additions and 119 deletions

View File

@@ -27,7 +27,7 @@ bool D3D12Shader::CompileFromFile(const wchar_t* filePath, const char* entryPoin
if (strstr(target, "vs_")) {
m_type = ShaderType::Vertex;
} else if (strstr(target, "ps_")) {
m_type = ShaderType::Pixel;
m_type = ShaderType::Fragment;
} else if (strstr(target, "gs_")) {
m_type = ShaderType::Geometry;
} else if (strstr(target, "cs_")) {

View File

@@ -213,68 +213,60 @@ void OpenGLShader::Use() const {
glUseProgram(m_program);
}
void OpenGLShader::Unbind() const {
void OpenGLShader::Unbind() {
glUseProgram(0);
}
void OpenGLShader::SetInt(const std::string& name, int value) const {
glUniform1i(glGetUniformLocation(m_program, name.c_str()), value);
void OpenGLShader::SetInt(const char* name, int value) {
glUniform1i(glGetUniformLocation(m_program, name), value);
}
void OpenGLShader::SetIntArray(const std::string& name, const int* values, unsigned int count) const {
glUniform1iv(glGetUniformLocation(m_program, name.c_str()), count, values);
void OpenGLShader::SetIntArray(const char* name, const int* values, unsigned int count) {
glUniform1iv(glGetUniformLocation(m_program, name), count, values);
}
void OpenGLShader::SetFloat(const std::string& name, float value) const {
glUniform1f(glGetUniformLocation(m_program, name.c_str()), value);
void OpenGLShader::SetFloat(const char* name, float value) {
glUniform1f(glGetUniformLocation(m_program, name), value);
}
void OpenGLShader::SetFloatArray(const std::string& name, const float* values, unsigned int count) const {
glUniform1fv(glGetUniformLocation(m_program, name.c_str()), count, values);
void OpenGLShader::SetFloatArray(const char* name, const float* values, unsigned int count) {
glUniform1fv(glGetUniformLocation(m_program, name), count, values);
}
void OpenGLShader::SetVec2(const std::string& name, float x, float y) const {
glUniform2f(glGetUniformLocation(m_program, name.c_str()), x, y);
void OpenGLShader::SetVec3(const char* name, float x, float y, float z) {
glUniform3f(glGetUniformLocation(m_program, name), x, y, z);
}
void OpenGLShader::SetVec2(const std::string& name, const float* values) const {
glUniform2fv(glGetUniformLocation(m_program, name.c_str()), 1, values);
void OpenGLShader::SetVec3(const char* name, const float* values) {
glUniform3fv(glGetUniformLocation(m_program, name), 1, values);
}
void OpenGLShader::SetVec3(const std::string& name, float x, float y, float z) const {
glUniform3f(glGetUniformLocation(m_program, name.c_str()), x, y, z);
void OpenGLShader::SetVec4(const char* name, float x, float y, float z, float w) {
glUniform4f(glGetUniformLocation(m_program, name), x, y, z, w);
}
void OpenGLShader::SetVec3(const std::string& name, const float* values) const {
glUniform3fv(glGetUniformLocation(m_program, name.c_str()), 1, values);
void OpenGLShader::SetVec4(const char* name, const float* values) {
glUniform4fv(glGetUniformLocation(m_program, name), 1, values);
}
void OpenGLShader::SetVec4(const std::string& name, float x, float y, float z, float w) const {
glUniform4f(glGetUniformLocation(m_program, name.c_str()), x, y, z, w);
void OpenGLShader::SetMat2(const char* name, const float* value) {
glUniformMatrix2fv(glGetUniformLocation(m_program, name), 1, GL_FALSE, value);
}
void OpenGLShader::SetVec4(const std::string& name, const float* values) const {
glUniform4fv(glGetUniformLocation(m_program, name.c_str()), 1, values);
void OpenGLShader::SetMat3(const char* name, const float* value) {
glUniformMatrix3fv(glGetUniformLocation(m_program, name), 1, GL_FALSE, value);
}
void OpenGLShader::SetMat2(const std::string& name, const float* value) const {
glUniformMatrix2fv(glGetUniformLocation(m_program, name.c_str()), 1, GL_FALSE, value);
void OpenGLShader::SetMat4(const char* name, const float* value) {
glUniformMatrix4fv(glGetUniformLocation(m_program, name), 1, GL_FALSE, value);
}
void OpenGLShader::SetMat3(const std::string& name, const float* value) const {
glUniformMatrix3fv(glGetUniformLocation(m_program, name.c_str()), 1, GL_FALSE, value);
void OpenGLShader::SetMat4Array(const char* name, const float* values, unsigned int count) {
glUniformMatrix4fv(glGetUniformLocation(m_program, name), count, GL_FALSE, values);
}
void OpenGLShader::SetMat4(const std::string& name, const float* value) const {
glUniformMatrix4fv(glGetUniformLocation(m_program, name.c_str()), 1, GL_FALSE, value);
}
void OpenGLShader::SetMat4Array(const std::string& name, const float* values, unsigned int count) const {
glUniformMatrix4fv(glGetUniformLocation(m_program, name.c_str()), count, GL_FALSE, values);
}
int OpenGLShader::GetUniformLocation(const std::string& name) const {
return glGetUniformLocation(m_program, name.c_str());
int OpenGLShader::GetUniformLocation(const char* name) const {
return glGetUniformLocation(m_program, name);
}
bool OpenGLShader::CheckCompileErrors(unsigned int shader, const char* type) {