OpenGL 绘图在发布模式下不可见(当定义 _DEBUG 时)

发布于 2024-10-15 13:09:39 字数 1030 浏览 6 评论 0原文

我成功地将我的 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 相关的内容!

有谁知道这个问题从何而来?

I ported my Opengl project from Qt to MFC with success.. only in debug mode.

Everything works great in debug mode.

It even works in release mode, as long as _DEBUG is defined. If it's not, every OpenGL function get called, but without result on the screen.

I use no assert function anywhere in the code.
I use Glew to get OpenGL function pointers.

Here is the (slow) OpenGL function, even if I don't think it will really help:

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();
}

So the main problem is: There is nothing OpenGL-related on the screen if _DEBUG is not defined!

Anyone know where do this problem come from?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猫卆 2024-10-22 13:09:39

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

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

This is most likely caused by the wrong use of MFC. In case you are not using #ifdef _DEBUG or ASSERT() anywhere in your code, it is still possible it is used in some macros defined by the MFC. MFC is quite heavy on macros that just call some WinAPI function, and those macros may very well contain some #ifdefs themselves.

But regardless, MFC and OpenGL should be very simple to mix. Just post your OpenGL initialization code to see if we can work it out.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文