OpenGL统一名称指针作为字符串[重复]

Posted

技术标签:

【中文标题】OpenGL统一名称指针作为字符串[重复]【英文标题】:OpenGL Uniform Name pointer as string [duplicate] 【发布时间】:2020-01-13 08:10:58 【问题描述】:
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 引用是否危险?

【问题讨论】:

【参考方案1】:

向即将被销毁的字符串对象发送 OpenGL 引用是否危险?

没有。

见OpenGL 4.6 API Core Profile Specification - 2.1 Execution Model:

数据绑定在调用时发生。这意味着传递给 GL 命令的数据 当收到该命令时被解释。即使命令需要 指向数据的指针,这些数据在调用时被解释,任何后续 对数据的更改对 GL 没有影响

【讨论】:

【参考方案2】:

不,您的char * 可以毫无问题地转换为const char *,并且const char * 参数立即用于查找统一位置。

无论如何,传递Uni_s.c_str() 会更好一些,因为这样更容易 grep。

【讨论】:

以上是关于OpenGL统一名称指针作为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# - 使用属性名称作为字符串按属性排序的代码[重复]

JavaScript对象:按名称作为字符串访问变量属性[重复]

类别名称之间的连字符但是当我使用 foreach 作为重复名称时

在Python中将列表的名称作为字符串获取[重复]

Func<DomainObject,object> 如何将对象名称作为字符串返回 [重复]

OpenGL使用统一缓冲区作为数组