glReadPixels和alpha通道返回1.0

kam*_*iro 3 opengl sdl

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

  GLfloat lebuf[areasize * 4];
  glReadPixels(xstart, ystart, partw, parth, GL_RGBA, GL_FLOAT, lebuf);
Run Code Online (Sandbox Code Playgroud)

我设置了窗口创建代码以支持alpha通道:

  SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8);
Run Code Online (Sandbox Code Playgroud)

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

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

 glClearColor(0,0,0,0);
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)

tib*_*bur 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值写入缓冲区吗?