如何在 ActiveX 控件中正确初始化 OpenGL
How to properly initialize OpenGL in ActiveX controls?
我正在尝试使用OpenGL创建一个简单的ActiveX控件。我在PreCreateWindow中添加了一些样式:
BOOL CMFCActiveXControl1Ctrl::PreCreateWindow(CREATESTRUCT& cs) {
cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
cs.lpszClass = _T("STATIC");
return COleControl::PreCreateWindow(cs);
}
OpenGL 的初始化:
int CMFCActiveXControl1Ctrl::OnCreate(LPCREATESTRUCT lpCreateStruct) {
PIXELFORMATDESCRIPTOR pfd = { 0 };
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;
hDC = ::GetDC(m_hWnd);
int format = ChoosePixelFormat(hDC, &pfd);
SetPixelFormat(hDC, format, &pfd);
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
return 0;
}
然后我尝试用红色清除颜色缓冲区,但我看到的只是一个黑色方块:
void CMFCActiveXControl1Ctrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;
glClearColor(1, 0, 0, 0);
SwapBuffers(wglGetCurrentDC());
}
glClearColor (...)
实际上并没有清除颜色缓冲区,它只是设置调用glClear (...)
时将使用的颜色。
GL3 中有一个新功能:glClearBuffer (...)
可用于在一次调用中将缓冲区清除为显式值,但通常您需要在设置清除颜色后调用glClear (GL_COLOR_BUFFER_BIT)
。
相关文章:
- OpenGL GLM 矩阵/向量未正确初始化
- 在没有库的情况下初始化 OpenGL
- GTKmm Opengl 上下文未初始化
- 在上下文初始化之前查询支持的最高 OpenGL 版本?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 初始化多个纹理 OpenGL、SDL C++ 时出现问题
- openGL如何处理发送给它的空/未初始化数据?
- 您应该如何在OpenGL 4.5中初始化立方体地图阵列
- 为什么要使用'glad'库进行 opengl 初始化?
- OpenGL + SDL + glew 在成功初始化后不会绘制任何内容
- 无法初始化 OpenGL
- 使用visual studio 2012初始化openGL时出现问题
- 正确初始化 OpenGL 的结构数组
- 如何在 ActiveX 控件中正确初始化 OpenGL
- MFC和OpenGL CView,C ,Glew之后初始化OpenGL
- 在渲染以外的另一个线程中初始化 OpenGL 上下文
- QGLWidget paintEvent:在哪里初始化openGL
- OpenGL 着色器语言初始化错误无法从 GLChar 转换为 const
- iOS 下的 OpenGL ES 2.0 初始化
- 为什么我不能单独创建和初始化 OpenGl VAO?