0
考慮以下幾點:。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-)調用>開始(,_shader-> SetUniform,_shader-> SetUniformImm,_vbo.GetDeclaration()激活和_vbo .Render的工作方式就好像我設置片段着色器渲染靜態顏色(甚至穿過制服的顏色)。
現在我想渲染一個texture2d(它加載的很好,我用即時模式測試過),並且我得到一個黑屏,爲什麼?
頂點:
#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是有效的,因爲我已經在OutFragColor設定R和B如TexCoord0的S和T調試它的值。
記得[設定縮小過濾器(http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture)爲你的紋理?你是否對着色器編譯和鏈接進行錯誤檢查? – Tim
天啊!我以更「美麗」的方式重寫了紋理加載,並忘記設置它們。-_- 謝謝 – greenboxal
小心,在您說它在即時模式下工作正常後,我幾乎刪除了我的評論> _>很高興幫助。 – Tim