У меня проблема с C ++, которую я просто не могу понять.
У меня есть 2 слегка отличающиеся функции. Они оба должны делать то же самое. Но только один работает правильно.
Метод 1: входные данные метода: 'const string samplerName = "test"'
void setUniformSampler(Gluint program, const string samplerName, GLuint sampler) {
GLint uniformLocation = glGetUniformLocation(program, samplerName.c_str()); // returns -1
if(uniformLocation >= 0) {
glUniform1i(uniformLocation, sampler);
} else {
throw exception(...);
}
}
Метод 2:
void setUniformSampler(Gluint program, GLuint sampler) {
GLint uniformLocation = glGetUniformLocation(program, "test"); // returns 0
if(uniformLocation >= 0) {
glUniform1i(uniformLocation, sampler);
} else {
throw exception(...);
}
}
Как видите, glGetUniformLocation возвращает 2 разных значения. Правильным возвращаемым значением будет «0», а не «-1». Поэтому мне интересно, в чем именно разница между двумя вызовами?
quote: «c_str () генерирует завершающуюся нулем последовательность символов (c-string) с тем же содержимым, что и строковый объект, и возвращает его в качестве указателя на массив символов». И это именно то, что нужно методу glGetUniformLocation (...) в качестве второго параметра. Так почему же только метод 2 выше? Это проблема компилятора?
Я работаю с MS Visual Studio 2008 на Win7.
Я искал эту ошибку почти 2 дня. Я действительно хочу уточнить это. Это сводило меня с ума ...
Спасибо
Walter
EDIT:
Это тоже не работает.
void setUniformSampler(Gluint program, const string samplerName, GLuint sampler) {
const GLchar* name = samplerName.c_str();
GLint uniformLocation = glGetUniformLocation(program, name); // still returns -1
if(uniformLocation >= 0) {
glUniform1i(uniformLocation, sampler);
} else {
throw exception(...);
}
}