我有这段代码不断重复。
g_materialAmbientIndex[0] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[0].ambient");
g_materialDiffuseIndex[0] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[0].diffuse");
g_materialSpecularIndex[0] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[0].specular");
g_materialAmbientIndex[1] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[1].ambient");
g_materialDiffuseIndex[1] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[1].diffuse");
g_materialSpecularIndex[1] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[1].specular");
g_materialAmbientIndex[2] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[2].ambient");
g_materialDiffuseIndex[2] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[2].diffuse");
g_materialSpecularIndex[2] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[2].specular");
我想把它放到for循环中,但是我遇到了字符串参数的问题。这是我的功能如下。我不断收到错误消息:
从“std :: basic_string .....”到“const GLchar *”存在没有合适的转换函数
for (int i = 0; i < MAX_MATERIALS; i++)
{
stringstream ss;
ss << i;
string str = ss.str();
g_materialAmbientIndex[i] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[" + str + "].ambient");
g_materialDiffuseIndex[i] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[" + str + "].diffuse");
g_materialSpecularIndex[i] = glGetUniformLocation(g_shaderProgramID, "uMaterialProperties[" + str + "].specular");
}
答案 0 :(得分:1)
错误消息告诉您需要知道的一切:
no suitable conversion func from "std::basic_string....." to "const GLchar*" exists
因此,该方法不知道如何处理std::string
- 它需要GLchar*
。您应该尝试的第一件事是通过char*
定期str.c_str()
。
答案 1 :(得分:1)
要将int
eger转换为字符串表示形式,请使用std::to_string函数。
然后做这样的事情:
auto str = "uMaterialProperties[" + std::to_str(i) + "].ambient";
g_materialAmbientIndex[i] = glGetUniformLocation(g_shaderProgramID, str.c_str());
答案 2 :(得分:0)
错误消息
没有合适的转换函数来自&#34; std :: basic_string .....&#34; to&#34; const GLchar *&#34;存在
表示"uMaterialProperties[" + str + "].ambient"
的结果类型为std::string
,但glGetUniformLocation
期望const GLchar *
作为输入参数的类型,并且{{1}没有自动转换转到std::string
。
您可以使用std::string::data
获取指向const GLchar *
内容的指针,该内容的类型为std::string
,并且可以转换为const char *
:
const GLchar *
你的代码看起来应该是这样的:
glGetUniformLocation( g_shaderProgramID,
("uMaterialProperties[" + str + "].ambient").data() );