GLSL текстура не будет работать

Учтите следующее:

virtual void Draw()
{
_texture->Bind(0);

_shader->Begin();
_shader->SetUniform("WVPMatrix", _mvp);
_shader->SetUniform("InColor", _color);
_shader->SetUniformImm("InTexture", 0);
_vbo.GetDeclaration().Activate();
_vbo.Render(GL_QUADS, _ibo, 4);
_shader->End();
}

void Texture2D::Bind(int index)
{
if (index != -1)
{
glActiveTexture(GL_TEXTURE0 + index);
}

glBindTexture(GL_TEXTURE_2D, _textureID);
}

Где вызовы _shader-> Begin (), _shader-> SetUniform, _shader-> SetUniformImm, _vbo.GetDeclaration (). Activate и _vbo.Render работают так, как будто я устанавливаю фрагментный шейдер для отображения статического цвета (или даже цвета). через форму) это делает хорошо.

Сейчас я пытаюсь сделать рендеринг texture2d (он был загружен нормально, я тестировал в немедленном режиме) и получаю черный экран, почему?

Vertex:

#version 330

layout(location = 0) in vec3 VertexPosition;
layout(location = 1) in vec2 VertexTexCoord;

uniform mat4 WVPMatrix;

out vec2 TexCoord0;

void main()
{
TexCoord0 = VertexTexCoord;

gl_Position = WVPMatrix * vec4(VertexPosition, 1);
}

Фрагмент:

#version 330

in vec2 TexCoord0;

uniform sampler2D InTexture;
uniform vec4 InColor;

out vec4 OutFragColor;

void main()
{
OutFragColor = texture(InTexture, TexCoord0) * InColor;
}

PS: InColor белого цвета, поэтому он не портится с цветом текстуры, и TexCoord0 действителен, так как я уже установил R и B на OutFragColor как S и T для TexCoord0 для отладки его значений.

0

Решение

(Выложить ответ для бухгалтерии)

Вопрос аскеру забыл установить фильтр минификации для своей текстуры, и как таковая текстура была неполной и не отображалась.

Нужно позвонить glTexParameteri(GL_TEXTURE_2D, GL_MIN_FILTER, GL_LINEAR); (или GL_NEAREST)

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]