Я работал над проектом OpenGL в Visual Studio, и у меня было два шейдера в одном файле, фрагментный шейдер и вершинный шейдер, до фрагментного шейдера у меня была строка, в которой был фрагмент #shader, а перед вершинным шейдером - строка #shader vertex, я сделал функцию, которая могла бы анализировать и разделять 2 шейдера, эта функция называлась parseshader
примечание: причина, по которой у меня была структура, в том, что я хотел, чтобы она выводила 2 две строки строка, содержащая вершинный шейдер и строка, содержащая фрагментный шейдер. Я хотел, чтобы он вывел две строки, потому что у меня была другая функция для компиляции шейдера с двумя параметрами: код вершинного шейдера и код фрагментного шейдера
struct shaderProgramSource
{
std::string VertexSource;
std::string FragmentSource;
};
static shaderProgramSource parseShader(const std::string& filepath) {
enum class shadertype{
NONE = -1 ,VERTEX = 0 ,FRAGMENT = 1
};
std::ifstream stream(filepath);
std::stringstream ss[2];
shadertype type = shadertype::NONE;
std::string line;
while (getline(stream, line))
{
if (line.find("#shader") != std::string::npos)
{
if (line.find("vertex") != std::string::npos)
shadertype type = shadertype::VERTEX;
else if(line.find("fragment") != std::string::npos)
shadertype type = shadertype::FRAGMENT;
}
else
ss[(int)type] << line << "\n";
}
return { ss[0].str(),ss[1].str() };
}
проблема в том, что я получаю предупреждение в строке, где я написал ss [(int) type] << line << "\ n"; с надписью <strong> C6385 Чтение неверных данных из 'ss': читаемый размер составляет '352' байта, но можно прочитать '-176' байтов.