Set_Up_Shader(unsigned int sShader, string Uni_s, glm::vec3 V3){
int isu = glGetUniformLocation(sShader, &Uni_s[0]);
glUniform3fv(isu, 1, glm::value_ptr(V3));
}
[我的问题是:显然glGetUniformLocation参数2应该是const char *。 OpenGL会延迟/需要const对象吗?将OpenGL参考发送给即将被销毁的字符串对象是否有危险?
将OpenGL引用发送到不久将被销毁的字符串对象是否危险?
编号
请参见OpenGL 4.6 API Core Profile Specification - 2.1 Execution Model:
数据绑定在调用时发生。这意味着将数据传递给GL命令收到该命令时将被解释。即使命令要求指向数据的指针,这些数据将在进行调用时以及随后的任何操作数据更改对GL没有影响
否,您的char *
可以毫无问题地转换为const char *
,并且const char *
自变量立即用于查找统一位置。
无论如何,传递Uni_s.c_str()
会更好一些,因为这样更容易grep。