2016-06-08 3 views
-1

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

GLuint shaderProg = compileShaderPair(vsource, fsource); 
GLint texSampler = glGetUniformLocation(shaderProg, "tex"); 
glUniform1i(texSampler, 0); 
glUseProgram(shaderProg); 
... 
GLuint tex; 
glActiveTexture(GL_TEXTURE0); 
glGenTextures(1, &tex); 
glBindTexture(GL_TEXTURE_2D, tex); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
int width, height, components; 
unsigned char* img = stbi_load("texture.jpg", &width, &height, &components, 3); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img); 
glGenerateMipmap(GL_TEXTURE_2D); 

Vertex Shader:

#version 330 
in vec3 pos; 
in vec2 uv; 
out vec2 texcoord; 
void main() { 
    texcoord = uv; 
    gl_Position = vec4(pos, 1.0) 
} 

Фрагмент шейдеры:

#version 330 
in vec2 texcoord; 
out vec4 outColor; 
uniform sampler2D tex; 
void main() { 
    outColor = vec4(texture(tex, texcoord).rgb, 1.0); 
} 

Я проверил, что текстура загружается, и что координаты текстуры хорошо.

EDIT: он отлично работает при отладке в RenderDoc, но при запуске сам по себе он не работает.

+0

try outColor = texture (tex, texcoord); –

+0

Как вы точно проверили координаты текстуры? – 246tNt

+0

Также, пожалуйста, разместите шейдеры вершин. – 246tNt

ответ

0

Упс! Я забыл об ошибках Visual Studio с рабочим каталогом при отладке, и stb_image не выбрасывал никаких ошибок при попытке загрузить изображение. Запустив его за пределами Visual Studio, он отлично работает.

0

При использовании GL_RGB в internalFormat, точность остается в реализации, лучше использовать GL_RGBA8

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img); 

Не уверен, что это ваша проблема, но стоит mentionning так или иначе, и «Комментарии» маловаты для написания кода.

+0

Не помогло, но я сохранил изменения. – rytone

Смежные вопросы