在2D纹理上绘制的红色矩形在绘制后立即消失

时间:2013-08-28 15:38:58

标签: opengl dynamic drawing textures drawrect

another question之后,我提供了绘制矩形的代码,如下所示:

void COpenGLControl::DrawRectangleOnTopOfTexture()
{
wglMakeCurrent(hdc, hrc);
glPushAttrib(GL_ENABLE_BIT|GL_CURRENT_BIT);
glDisable(target);
glColor3f(1.0f,0.0f,0.0f);
glBegin(GL_LINE_LOOP);
   glVertex2f(RectangleToDraw.at(0),RectangleToDraw.at(1));
   glVertex2f(RectangleToDraw.at(0),RectangleToDraw.at(3));
   glVertex2f(RectangleToDraw.at(2),RectangleToDraw.at(3));
   glVertex2f(RectangleToDraw.at(2),RectangleToDraw.at(1));
glEnd();
glPopAttrib();
SwapBuffers(hdc);
wglMakeCurrent(NULL, NULL);
}  

void COpenGLControl::OnDraw(CDC *pDC)
{
// TODO: Camera controls
wglMakeCurrent(hdc,hrc);
glLoadIdentity();
gluLookAt(0,0,1,0,0,0,0,1,0);
glTranslatef(m_fPosX, m_fPosY, 0.0f);
glScalef(m_fZoom,m_fZoom,1.0);
setViewRectangle();
if (WantToDrawRectangle)
    DrawRectangleOnTopOfTexture();
wglMakeCurrent(NULL, NULL);
}  
这里的问题是:
OnDraw返回后,红色矩形立即消失。我的意思是,例如,当您按下对话框上的按钮进行fixed zoom infixed zoom out时,红色矩形会闪烁然后立即消失。
或者当您OnDraw常量运行时(例如,您以高速平移),您会得到如下内容:enter image description here
肯定会在短时间后删除(消失)红色矩形,但这段红色矩形会在短时间内显示出来?

如何在纹理上渲染当前的红色矩形,直到下次调用OnDraw为止 另外,当OnDraw的下一次调用发生时,如何才能删除当前的红色矩形?

如果第二个问题很难回答,没问题请至少回答第一个问题。显然,如果用户以正常速度进行平移,则不会显示该矩形轨迹。

1 个答案:

答案 0 :(得分:1)

我猜你的问题与双缓冲有关。

某些设备在交换后不会删除后台缓冲区的内容。我的建议是在开始渲染到新缓冲区之前明确清除屏幕(glClear)。这应该处理与多个红色矩形相关的问题。

其次,我不确定您的代码中是否发生了超过必要的缓冲交换。请检查是否存在对Swap Buffer的其他显式或隐式调用,这可能导致显示错误的缓冲区。 (显示的最终缓冲区可能不是您绘制矩形的缓冲区。)