Я прочитал все рекомендуемые посты, я пробовал эти решения, но ни одно из них не помогло.
Вкратце проблема заключается в третьем аргументе
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
Этот кодработа:
const char *vertexShaderSource = "#version 120 \n"
"attribute vec3 pos;\n"
"attribute vec2 texCoord;\n"
"varying vec2 texCoord0;\n"
"uniform mat4 transform;\n"
"void main()\n"
"{\n"
" gl_Position = transform * vec4(pos, 1.0);\n"
" texCoord0 = texCoord;\n"
"}\0";
Но я хочу прочитать его из файла, следующий код работает
std::string s= "vertex";
std::ifstream file(s.c_str());
std::stringstream buffer;
buffer << file.rdbuf();
std::string str = buffer.str();
std::cout << str;
И выводит:
#version 120
attribute vec3 pos;
attribute vec2 texCoord;
varying vec2 texCoord0;
uniform mat4 transform;
void main()
{
gl_Position = transform * vec4(pos, 1.0);
texCoord0 = texCoord;
}
Я знаю, что янельзя просто преобразовать строку с кодом, подобным следующему:
const char *vertexShaderSource = str.c_str();
и передать его в: glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
Поэтому я использовал следующий код, чтобы предотвратить его прекращение существования:
char * writable = new char[str.size() + 1];
std::copy(str.begin(), str.end(), writable);
writable[str.size()] = '\0';
Passing glShaderSource(vertexShader, 1, &writable, NULL);
не работает также.Я все время получаю сообщение об ошибке, даже с другим кодом копирования и вставки из учебников
0:1(4): preprocessor error: syntax error, unexpected HASH_TOKEN
Что еще я могу сделать?
Я прочитал эти сообщения: Чтениешейдер из файла .txt с использованием структуры
чтение шейдеров GLSL из файла