【问题标题】:OpenGL drawing invisible in release mode(when _DEBUG is defined)发布模式下OpenGL绘图不可见(定义_DEBUG时)
【发布时间】:2011-06-19 16:18:06
【问题描述】:

我成功地将我的 Opengl 项目从 Qt 移植到 MFC.. 仅在调试模式下。

在调试模式下一切正常。

只要定义了_DEBUG,它甚至可以在发布模式下工作。如果不是,每个 OpenGL 函数都会被调用,但屏幕上没有结果。

我在代码的任何地方都没有使用断言函数。 我使用 Glew 来获取 OpenGL 函数指针。

这里是(慢)OpenGL 函数,即使我认为它不会真正有帮助:

void COpenGLView::Render()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_QUADS);
    for(u32 i = 0; i < 144; ++i)
    {
        for(u32 j = 0; j < 160; ++j)
        {
            switch( lcd_[(i * 160)+j] & 0x3 )
            {
            case WHITE:      glColor3f(0.75f,1.0f,0.75f); break;
            case LIGHT_GREY: glColor3f(0.50f, 0.80f, 0.50f); break;
            case DARK_GREY:  glColor3f(0.25f,0.60f,0.25f); break;
            case BLACK:      glColor3f(0.0f,0.0f,0.0f); break;
            }
            glVertex2d(j,i);
            glVertex2d(j,i + 1);
            glVertex2d(j + 1,i + 1);
            glVertex2d(j + 1,i);
    }
    }
    glEnd();

    FinishRender();
}

所以主要问题是:如果_DEBUG没有定义,屏幕上就没有OpenGL相关的东西了!

有人知道这个问题是从哪里来的吗?

【问题讨论】:

  • 发布一个最小的、完整的程序来演示这个问题。
  • 如果 _DEBUG 被定义,你可能只做缓冲交换吗?但这就像在没有更多代码的情况下猜测......

标签: debugging opengl rendering release


【解决方案1】:

这很可能是由于错误使用 MFC 造成的。如果您没有在代码中的任何位置使用 #ifdef _DEBUG 或 ASSERT(),它仍然可能在 MFC 定义的某些宏中使用。 MFC 对只调用一些 WinAPI 函数的宏非常重视,而这些宏本身很可能包含一些 #ifdef。

但无论如何,MFC 和 OpenGL 应该很容易混合。只需发布您的 OpenGL 初始化代码,看看我们是否可以解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    相关资源
    最近更新 更多