C opengl win32未绘制到屏幕
我正在尝试使用C opengl win32未绘制到屏幕,c,winapi,opengl,glew,wgl,C,Winapi,Opengl,Glew,Wgl,我正在尝试使用glClearBufferfv(GL\u COLOR,0,red)绘制一个红色屏幕 程序显示白色屏幕,光标上的加载图标持续旋转 我正在使用glew。我也在使用VisualStudio,我想我已经链接到了所有必要的库。我使用了整个创建一个临时上下文来使用wglCreateContextAttribsARB扩展 我有两个设置功能。第一个创建窗口并设置pfd:(编辑器没有正确格式化我的代码,因此我将省略函数名) 第二个创建上下文并启动消息循环: HDC hDC; HGLRC hRCt,
glClearBufferfv(GL\u COLOR,0,red)
绘制一个红色屏幕
程序显示白色屏幕,光标上的加载图标持续旋转
我正在使用glew。我也在使用VisualStudio,我想我已经链接到了所有必要的库。我使用了整个创建一个临时上下文来使用wglCreateContextAttribsARB扩展
我有两个设置功能。第一个创建窗口并设置pfd:(编辑器没有正确格式化我的代码,因此我将省略函数名)
第二个创建上下文并启动消息循环:
HDC hDC;
HGLRC hRCt, hRC;
HWND hWnd;
MSG msg;
hWnd = CreateOpenGLWindow("minimal", 0, 0, 256, 256, PFD_TYPE_RGBA, 0);
if (hWnd == NULL)
exit(1);
hDC = GetDC(hWnd);
hRCt = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRCt);
glewExperimental = true;
glewInit();
int attribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 4,
WGL_CONTEXT_MINOR_VERSION_ARB, 5,
WGL_CONTEXT_FLAGS_ARB, 0,
0
};
hRC = wglCreateContextAttribsARB(hDC, 0, attribs);
wglMakeCurrent(hDC, NULL);
wglDeleteContext(hRCt);
wglMakeCurrent(hDC, hRC);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&msg, hWnd, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
wglMakeCurrent(NULL, NULL);
ReleaseDC(hWnd, hDC);
wglDeleteContext(hRC);
DestroyWindow(hWnd);
return msg.wParam;
这是我的wndproc:
static PAINTSTRUCT ps;
switch (uMsg) {
case WM_PAINT:
display();
BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
case WM_SIZE:
//glViewport(0, 0, LOWORD(lParam), HIWORD(lParam));
PostMessage(hWnd, WM_PAINT, 0, 0);
return 0;
case WM_CHAR:
switch (wParam) {
case 27: /* ESC key */
PostQuitMessage(0);
break;
}
return 0;
case WM_CLOSE:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
这是我的显示功能:
glClearBufferfv(GL_COLOR, 0, red);
glFlush();
红色是一个全局变量,定义为:
GLfloat red[4] = {1, 0, 0, 1};
有没有关于它为什么不显示在屏幕上的帮助?请将display()
放在BeginPaint
和EndPaint
之间
通过调用BeginPaint函数启动绘制操作。
此函数使用有关的信息填充PAINTSTRUCT结构
重新绘制请求
完成绘制后,调用EndPaint函数。此函数
清除更新区域,该区域向窗口发出该窗口已关闭的信号
完成了绘画本身
参考:
使用示例快速恢复问题:
HDC hdc = GetDC(hWnd);
case WM_PAINT:
{
PAINTSTRUCT ps;
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 2));
BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
}
调试:
调试:
也许你忘了
SwapBuffers(一些hdc)代码>在glFlush()之后我已经试过了。我现在已经可以用了。我不太清楚它是什么,但我从零开始,让它工作起来。我也不想将我的新代码与此进行比较并发布解决方案。不过我还是不太清楚到底出了什么问题。@AlanSanchez好吧,我的意思是display()
的动作可能会影响WndProc中WM_PAINT
的背景显示function@AlanSanchez现在,你似乎已经解决了这个问题,你介意分享一下你的尝试吗?
HDC hdc = GetDC(hWnd);
case WM_PAINT:
{
PAINTSTRUCT ps;
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 2));
BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
}
HDC hdc = GetDC(hWnd);
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint(hWnd, &ps);
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 2));
EndPaint(hWnd, &ps);
}