glReadPixels和alpha通道返回1.0

时间:2011-01-18 12:13:59

标签: opengl sdl

我正在从帧缓冲区读取像素数据,一切似乎都有效,除了alpha值,总是1.0

  GLfloat lebuf[areasize * 4];
  glReadPixels(xstart, ystart, partw, parth, GL_RGBA, GL_FLOAT, lebuf);

我已设置窗口创建代码以支持Alpha通道:

  SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8);

还有其他地方我应该查看为什么alpha通道似乎一直是1.0吗?更好的是,还有另一种方法(除了glReadPixels)从帧缓冲区获取纹理到客户端内存中吗?

编辑:这就是我清除缓冲区的方式:

 glClearColor(0,0,0,0);
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

3 个答案:

答案 0 :(得分:6)

你能查一下:

  • 您的SDL已接受您的格式(glGetIntegerv(GL_ALPHA_BITS, bits))?
  • 您的颜色清晰度不是1(glClearColor)。如果在渲染之前清除0.5并检索缓冲区,该怎么办?你检索0.5?
  • 您的alpha缓冲区未被写入锁定(glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE))?
  • 您是否在每帧结束时正确清除了Alpha缓冲区?
  • 你的混合函数会将正确的alpha值写入缓冲区吗?

答案 1 :(得分:3)

如果您正在使用GLUT,请记住您必须按如下方式设置主窗口:

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA | GLUT_DEPTH | GLUT_STENCIL);

否则glReadPixels将始终读取alpha通道= 1。

答案 2 :(得分:0)

请使用以下行..问题将解决。

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_ALPHA | GLUT_DEPTH | GLUT_STENCIL);