glCopyTexSubImage2D 命令和帧缓冲区

问题描述 投票:0回答:0

我有 Delphi 和 OpenGL 的代码。 OpenGL 上下文已初始化并且正在运行。但这是我的问题。

我将背景图像绘制到帧缓冲区 screenFrameBuffer(屏幕大小)并将纹理 tempTexture 连接到该帧缓冲区。之后,我将其他五个纹理的一部分绘制到该帧缓冲区(从 r = 1 到 5 的列)。现在是开始屏幕。

稍后,我想更新专栏。首先,我再次将背景绘制到同一个缓冲区并绘制更改的列。在下面的测试代码中,我将第一列绘制到第四列的位置。 在我将 tempTexture 绘制到屏幕上之后,除了第四列之外的所有列都是清晰的并且有一个背景图像(这是计划好的并且没问题)但是第四列有来自第四列和第一列内容的旧内容绘制。就像以某种方式保留了起始屏幕的帧缓冲区内容一样。

procedure TForm1.Button4Click(Sender: TObject);
var
  r : integer;
begin
  glBindTexture(GL_TEXTURE_2D, 0);
  glBindFramebuffer(GL_FRAMEBUFFER, 0);
  
  // bck to bck
  
  // Set up temporary framebuffer and texture
  glBindFramebuffer(GL_FRAMEBUFFER, screenFrameBuffer);
  glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, bckTex, 0);
  glBindTexture(GL_TEXTURE_2D, tempTexture);
  glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, Form1.Width, Form1.Height);

  // reel1 to reel4

  // Unbind the temporary texture and framebuffer
  glBindTexture(GL_TEXTURE_2D, 0);
  glBindFramebuffer(GL_FRAMEBUFFER, 0);

  // Set up temporary framebuffer and texture
  glBindFramebuffer(GL_FRAMEBUFFER, screenFrameBuffer);
  glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, signsTex[1], 0);
  glBindTexture(GL_TEXTURE_2D, tempTexture);
  glCopyTexSubImage2D(GL_TEXTURE_2D, 0, offset[4], topOffset, 0, startPos[1], signWidth, 3 * signHeight);

  // Unbind the temporary texture and framebuffer
  glBindTexture(GL_TEXTURE_2D, 0);
  glBindFramebuffer(GL_FRAMEBUFFER, 0);
  /////////////////

  glBindTexture(GL_TEXTURE_2D, tempTexture);
  glPushMatrix();
  glTranslatef(0.0, 0.0, 0.0);
  DrawTexture(Form1.Width, Form1.Height, Form1.Width, Form1.Height, Form1.Width, Form1.Height, 0, 0, 0, 0);
  glPopMatrix();

  glFlush;
  SwapBuffers(Canvas.Handle);
end;

当我以不同的方式更新同一列时,也使用帧缓冲区,没问题。看起来问题出在命令上:

glCopyTexSubImage2D(GL_TEXTURE_2D, 0, offset[4], topOffset, 0, startPos[1], signWidth, 3 * signHeight);

它必须是具有 alpha 值的东西。我尝试了很多选择但没有运气。

我没有更多的想法,所以任何帮助都会很棒。

谢谢.....

delphi opengl transparency framebuffer
© www.soinside.com 2019 - 2024. All rights reserved.