glGetShaderInfoLog со строкой - PullRequest
0 голосов
/ 30 мая 2020

Я делаю класс шейдера, у которого есть метод, возвращающий журналы шейдера:

std::string Shader::GetShaderInfoLog(){
    GLint TotalLenght=0;
    GetShaderiv(GL_INFO_LOG_LENGTH,&TotalLenght);
    std::string logs;
    logs.reserve(TotalLenght);
    glGetShaderInfoLog(name, TotalLenght, NULL, &logs[0] );
    return logs;
}

По странной причине строка журналов пуста даже с шейдером, у которого есть ошибка компиляции. Я пробовал с массивом символов:

std::string Shader::GetShaderInfoLog(){
    GLint TotalLenght=0;
    GetShaderiv(GL_INFO_LOG_LENGTH,&TotalLenght); 
    char logs[TotalLenght];
    glGetShaderInfoLog(name, TotalLenght, NULL, logs);
    return std::string(logs);
}

И этот хорошо работает. Итак, мой вопрос: почему это не работает со строкой?

1 Ответ

1 голос
/ 30 мая 2020

reserve просто увеличивает емкость строки. Но не меняет его размер.

Вам нужно resize это:

std::string Shader::GetShaderInfoLog(){
    GLint TotalLenght=0;
    GetShaderiv(GL_INFO_LOG_LENGTH,&TotalLenght);
    std::string logs;
    logs.resize(TotalLenght);
    glGetShaderInfoLog(name, TotalLenght, NULL, &logs[0] );
    return logs;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...