一、GLEW初始化后并不支持新版的opengl函数。 原因是piexlFormart选择了支持向BitMap绘制,这样会使当前opengl环境只支持OpenGL 1.1。
顺便记录一下GLEW使用的几个注意点:
1、头文件要在最前引用 不要在其前边引用gl.h文件 会导致错误。
2、初始化要在wglCreateContext MakeCurrent之后初始化。并检查返回值是否是 GLEW_OK
3、支持的opengl版本判断使用if(GL_VERSION_x_x) {} (GL_VERSION_4_0)来判断
int bits = 32; static PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be { sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor 1, // Version Number PFD_DRAW_TO_WINDOW | // Format Must Support Window //PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL, // Format Must Support OpenGL //PFD_DOUBLEBUFFER, // Must Support Double Buffering PFD_TYPE_RGBA, // Request An RGBA Format bits, // Select Our Color Depth 0, 0, 0, 0, 0, 0, // Color Bits Ignored 0, // No Alpha Buffer 0, // Shift Bit Ignored 0, // No Accumulation Buffer 0, 0, 0, 0, // Accumulation Bits Ignored 16, // 16Bit Z-Buffer (Depth Buffer) 0, // No Stencil Buffer 0, // No Auxiliary Buffer PFD_MAIN_PLANE, // Main Drawing Layer 0, // Reserved 0, 0, 0 // Layer Masks Ignored }; int piexelFormat = ChoosePixelFormat(mHDC, &pfd); if (!SetPixelFormat(mHDC, piexelFormat, &pfd)) { return false; } _context = wglCreateContext(mHDC); if (!wglMakeCurrent(mHDC, _context)) { return false; } GLenum err = glewInit(); if (GLEW_OK != err) { return false; }
二、Opengl可以直接向DIB的DC(设备无关)上绘制,但透明度始终为0.导致updateLayeredWindows时将产生一种特殊的混合效果。(重点:透明度为零,其他颜色数据不为0时 update效果不是纯透明)这将导致误会,实际上只是没有透明度数据引起的。【注:这里的误会是指GDI+函数DrawRectangle 填充色为255时也会引起此效果,设置为254即可,这两个机制不知是否相同,有时间的同学可以试试 然后结果给大家分享一下】