glShaderSource gặp sự cố

Aug 30 2020

Tôi sử dụng:

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);

Và ứng dụng gặp sự cố trên Biến thể nguồn cũng chứa chính xác:

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

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

Và ứng dụng chỉ bị treo!

Vấn đề là gì?

Trả lời

4 HolyBlackCat Aug 30 2020 at 09:53

Vấn đề là ở đây: (const GLchar* const *)source.c_str(). Thực tế là nó không hoạt động nếu không có cast (thực tế là a reinterpret_cast) là một dấu hiệu cho thấy bạn đang làm sai.

Lưu con trỏ vào một biến : const char *ptr = source.c_str();, rồi chuyển &ptrtới glShaderSource.

2 Spinkoo Aug 30 2020 at 09:55

vấn đề là ở đây

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

cố gắng làm điều này

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