我最近一直在学习 Rust,并正在使用 glfw3 和 gl 开发 3d 引擎。我已经尝试获得一个可以在我的 C++ 引擎中运行的着色器程序,并且可以在我的 Rust 引擎上运行,但在设置着色器制服的实现上遇到了障碍。
着色器.h:
template <typename T> void SetUniform(const GLchar* name, const T& data);
Run Code Online (Sandbox Code Playgroud)
着色器.cpp
template <> void ShaderProgram::SetUniform<int>(const GLchar* name, const int& data) {
glUniform1i(GetUniformLocation(name), data);
}
template <> void ShaderProgram::SetUniform<float>(const GLchar* name, const float& data) {
glUniform1f(GetUniformLocation(name), data);
}
template <> void ShaderProgram::SetUniform(const GLchar* name, const glm::vec2& data) {
glUniform2f(GetUniformLocation(name), data.x, data.y);
}
//etc...
Run Code Online (Sandbox Code Playgroud)
由于我对 Rust 的了解有限,我尝试使用 match 语句,因为它到目前为止为我节省了很多麻烦,但没有成功。
pub fn set_uniform<T>(&mut self, value: T){
match T {
u32 …Run Code Online (Sandbox Code Playgroud)