glShaderSource 충돌

Aug 30 2020

나는 사용한다:

std::string source;
char value;
std::ifstream stream(paths[id]);
while (stream.get(value)) {

    source += value;
}
stream.close()

        
        
int shader = glCreateShader(mode);
shaders[id] = shader;


glShaderSource(shader, 1, (const GLchar* const *)source.c_str(), nullptr);

glCompileShader(shader);

또한 소스 변수에는 다음이 정확히 포함됩니다.

 #version 330 core
 layout(location = 0) in vec3 aPos;

void main()
{
    gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}

그리고 앱이 충돌합니다!

이슈가 뭐야?

답변

4 HolyBlackCat Aug 30 2020 at 09:53

문제는 여기에 있습니다 (const GLchar* const *)source.c_str(). 캐스트 없이는 작동하지 않았다는 사실 (효과적으로 reinterpret_cast)은 뭔가 잘못하고 있다는 신호입니다.

포인터를 변수에 저장 한 const char *ptr = source.c_str();다음에 전달 &ptr합니다 glShaderSource.

2 Spinkoo Aug 30 2020 at 09:55

문제는 이것에있다

glShaderSource(shader, 1, (const GLchar* const *)source.c_str(), nullptr);

이렇게 해봐

const char* src = source.c_str();
glShaderSource(shader, 1, &src,nullptr);