窗口标题重叠Opengl渲染

Window title over lapping Opengl rendering

本文关键字:渲染 Opengl 重叠 窗口标题      更新时间:2023-10-16

我正在尝试学习windows上的opengl编程,虽然我最初开始使用SDL,但我决定放弃它,以便学习如何使用WGL自己启动opengl上下文。

我使用nanovg作为一个快速的形状绘图库,并与SDL一切渲染得很好,然而,现在我已经删除了SDL并创建了我自己的窗口和OpenGL上下文,我发现窗口的标题栏重叠渲染区域。如果渲染区域的原点(0,0)在整个窗口的左上角,而不是在标题栏的下方,如果这有意义吗?

形状渲染得很好,但是如果我在位置0,0渲染一个矩形,高度为20,最初我看不到,但是,如果我增加窗口的高度,它最终会出现。

我该怎么做才能使渲染区域的原点位于标题栏的正下方?

我已经设置glViewport为0,0和窗口的宽度和高度在启动时,如果这有帮助的话。

编辑:这是OpenGL上下文创建代码,WindowSize。宽度和窗口大小。你看到的高度属性与WinAPI CreateWindow函数的高度和宽度相同。

const int PixelFormatAttributeList[] =
                {
                    WGL_DRAW_TO_WINDOW_ARB, GL_TRUE,
                    WGL_SUPPORT_OPENGL_ARB, GL_TRUE,
                    WGL_DOUBLE_BUFFER_ARB, GL_TRUE,
                    WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_ARB,
                    WGL_COLOR_BITS_ARB, 32,
                    WGL_DEPTH_BITS_ARB, 32,
                    WGL_STENCIL_BITS_ARB, 32,
                    0 
                };
int ContextAttributes[] =
                {
                    WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
                    WGL_CONTEXT_MINOR_VERSION_ARB, 3,
                    WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
                    0 
                };
wglChoosePixelFormatARB(WindowDeviceContext, PixelFormatAttributeList, NULL, 1, &PixelFormat, &FormatCount);
SetPixelFormat(WindowDeviceContext, PixelFormat, &PFD);
OpenGLContext = wglCreateContextAttribsARB(WindowDeviceContext, 0, ContextAttributes);                  
wglMakeCurrent(WindowDeviceContext, OpenGLContext);
glViewport(0, 0, WindowSize.Width, WindowSize.Height);
nvgCreateGL3(NVG_ANTIALIAS | NVG_STENCIL_STROKES);

谢谢,

好吧,所以事实证明这与我对窗口的无知有关,而不是与OpenGL本身有关(但这也与我对OpenGL的无知有关)。窗口中的窗口的大小包括它的标题栏,并且将视口的大小设置为窗口的大小是导致在标题栏下面呈现形状的问题的原因,解决它的方法是检索窗口的客户端矩形,并使用它来设置视口。