OpenGL SOIL — сбой при загрузке текстуры

Я шаг за шагом следую этому руководству и даже скопировал весь код. но все равно не загружается текстура. Вот мой код, части, которые касаются вопроса:

GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture); // All upcoming GL_TEXTURE_2D operations now have effect on this texture object
                                       // Set the texture wrapping parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);   // Set texture wrapping to GL_REPEAT (usually basic wrapping method)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
// Set texture filtering parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Load image, create texture and generate mipmaps
int width, height;
unsigned char* image = SOIL_load_image("container.jpg", &width, &height, 0, SOIL_LOAD_RGB);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
glGenerateMipmap(GL_TEXTURE_2D);
SOIL_free_image_data(image);
glBindTexture(GL_TEXTURE_2D, 0); // Unbind texture when done, so we won't accidentily mess up our texture.

А вот и мои шейдеры:

#version 330 core
in vec3 ourColor;
in vec2 TexCoord;

out vec4 color;

uniform sampler2D ourTexture;

void main()
{
    color = texture(ourTexture, TexCoord);
}

А также

#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 color;
layout (location = 2) in vec2 texCoord;

out vec3 ourColor;
out vec2 TexCoord;

void main()
{
    gl_Position = vec4(position, 1.0f);
    ourColor = color;
    TexCoord = texCoord;
}

Я использую SOIL для загрузки данных изображения. Это слишком устарело? Что я должен делать?


person Masoud Nazemi    schedule 12.04.2017    source источник
comment
Как выглядит структура вашего проекта? Вероятно, container.jpg не находится в корне каталога вашего проекта.   -  person vallentin    schedule 12.04.2017
comment
проверить значение unsigned char* image   -  person Mandar    schedule 12.04.2017
comment
Как сказал Мозфокс: if (!image) std::cerr << "image load error\n";   -  person jparimaa    schedule 12.04.2017
comment
@vallentin: это корень моего проекта.   -  person Masoud Nazemi    schedule 12.04.2017
comment
@justus: нет ошибки загрузки изображения!   -  person Masoud Nazemi    schedule 12.04.2017


Ответы (1)


Учебник code, которому вы следуете, кажется неправильным, поскольку он не позвоните glActiveTexture или glUniform. См. код игрового цикла в конце руководства. .

Возможно, вам не хватает чего-то вроде этого:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glUniform1i(glGetUniformLocation(ourShader.Program, "ourTexture"), 0);
person jparimaa    schedule 12.04.2017