OpenGL ES 2.0中贴图无法绑定到shader中的sample2D上去

lexchou 2011-06-24 04:40:42
创建贴图的代码:


glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

unsigned int size = newWidth * newHeight * 4;
GLchar* newData = malloc(size);
GLuint* n = (GLuint*)newData;
//随意初始化成非黑色的值
for(int i = 0; i < newWidth * newHeight; i++)
{
n[i] = 0x88000000+ 100 * i;
}
GLuint err;
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, newWidth, newHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, newData);


将这个贴图绑定到shader的sample2D上的代码:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, layer.texture);
GLint uniform = glGetUniformLocation(program, "texture");
glUniform1i(uniform, 0);

对应的fragment shader代码:

varying lowp vec2 texCoord;

uniform sampler2D texture;
void main()
{
gl_FragColor = texture2D(texture, texCoord);
}

这里试过将texCoord直接当颜色输出, uv坐标的2个分量都是正常的0~1之间的值, 所以texCoord不会有问题
每一步执行后都试过用glGetError来获取出错信息, 都是正常的. 但是在shader中输出的全是黑的.
贴图的大小是512*512.

以前只用过Direct3D和HLSL, 头一次用OpenGL ES 2.0和GLSL, 在网上搜用ES2来贴图的完整的C和GLSL的例子也没搜到. 恳请高手不吝赐教.

运行环境是iOS模拟器
...全文
291 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
热爱Coding 2011-06-24
  • 打赏
  • 举报
回复
纯粹路过帮顶

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧