ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 使用着色器渲染时,OpenGL纹理全黑

2019-08-28 10:08:43  阅读:212  来源: 互联网

标签:c opengl textures shader glsl


我有一个非常简单的OpenGL应用程序,只渲染一个纹理四边形.这是我的代码,它工作正常(纹理四边形看起来很好):

// Bind the test texture
glBindTexture(GL_TEXTURE_2D, mTestTexture);


// Draw the quad
glBegin(GL_QUADS);

glTexCoord2f(0.0f, 0.0f);
glVertex3f(x, y + (float)height, 0.0f);

glTexCoord2f(1.0f, 0.0f);
glVertex3f(x + (float)width, y + (float)height, 0.0f);

glTexCoord2f(1.0f, 1.0f);
glVertex3f(x + (float)width, y, 0.0f);

glTexCoord2f(0.0f, 1.0f);
glVertex3f(x, y, 0.0f);

glEnd();

然后我想引入一个简单的着色器.所以我修改了我的代码:

// Use shader and point it to the right texture
auto texLocation = glGetUniformLocation(mProgram, "tex");
glUseProgram(mProgram);
glUniform1i(texLocation, mTestTexture);

// Draw the quad
// Same drawing code as before...

顶点着色器:

void main(void)
{
 gl_Position     = ftransform();
 gl_TexCoord[0]  = gl_MultiTexCoord0;
}

片段着色器:

uniform sampler2D tex;

void main()
{
    vec4 color = texture2D(tex, gl_TexCoord[0].st);
    gl_FragColor = color;
}

现在我得到的是一个黑色四边形:-(

我已经尝试过很多东西:

>着色器编译正常(没有错误)
>四边形是可见的(顶点着色器似乎没问题)
>如果我更改着色器以产生固定颜色(“gl_FragColor = vec4(1,0,0,1);”),我的四边形变为红色 – >片段着色器正在做某事!
> glGetError()不会返回任何错误
>我的texLocation,mProgram和mTestTexture似乎都是有效的ID

有没有人知道为什么我在使用着色器时不会看到我的纹理?

解决方法:

glUniform1i(texLocation, mTestTexture);
                         ^^^^^^^^^^^^ texture object

纹理单元索引绑定到采样器,而不是纹理对象.

使用纹理单位零代替:

glUniform1i(texLocation, 0);

标签:c,opengl,textures,shader,glsl
来源: https://codeday.me/bug/20190828/1750483.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有