hanrea请进,Windows版本CPU占用高的原因及解决方法

你好Hanrea:)

CocosStudio的Windows版CPU占用很高,Mac版不存在这个问题。
我研究了一下,是opengl32.dll当中V-Sync使用了Busy loop造成的(CPU不停的检测V-Blank信号),这个问题影响到了cocos2d-x本体,
如果你把窗口分辨率设置的稍大一点,CPU占用会相当明显。CocosStudio调用cocos2d-x作渲染,所以也跟着出了问题。

也就是说只要关掉V-Sync,就可以解决这个问题。

cocos2d-x的win32平台相关代码中添加一个函数

typedef BOOL (APIENTRY *WGLSWAPEXT)(int);

void setVsync(bool vsync = true)
{
const GLubyte *s;

s = glGetString(GL_EXTENSIONS);
WGLSWAPEXT wglSwapIntervalEXT = nullptr;

if(strstr((const char*)s, "WGL_EXT_swap_control"))
{
    wglSwapIntervalEXT = (WGLSWAPEXT)wglGetProcAddress("wglSwapIntervalEXT");
    if(wglSwapIntervalEXT)
    {
        wglSwapIntervalEXT(vsync ? 1 : 0);
    }
}

}

在CCGLView.cpp的 bool GLView::initGlew() 这个函数中 关闭V-Sync

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

if(glew_dynamic_binding() == false)
{
    MessageBox("No OpenGL framebuffer support. Please upgrade the driver of your video card.", "OpenGL error");
    return false;
}

setVsync(false);

#endif

当然这样做就不能V-Sync了(如果既想要V-Sync,又想要CPU占用低,只能用D3D了,这正是MS想要的:))

非常抱歉,代码忘记排版了,看起来很乱:12:

:14::14:顶~~~

非常感谢,这个我们会测试一下。如果后续可以,后续版本会添加进去。