你好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想要的:))

