自小牛队更新(我现在在10.10上)后,调试窗口显示以下消息:
函数'CGContextErase'已过时,将被删除 在即将到来的更新中。不幸的是,这个应用程序,或库 它使用,正在使用这个过时的功能,从而有助于 导致系统性能整体下降。
我正在创建一个用C ++编写的OpenGL(SDL)应用程序,现在由于我的应用程序而导致CPU内存出现问题(它使用了我MacBook的100%强大功能) i5处理器)。 所以,也许是因为所有这些CGContextErase函数。 我该如何解决? 好吧,也许我的代码中有错误:
//I'm using the SDL2
#include <SDL2/SDL.h>
class sWindow {
public:
SDL_Window *win;
SDL_Surface *winSur;
SDL_Event e;
void createWindow(char*,int,int,int,int,Uint32);
void update();
void render();
void close();
SDL_Rect WIN_RECT;
char WIN_TITLE = NULL;
int WIN_ID = -1;
};
SDL_Rect newRect(int x, int y, int w, int h) {
SDL_Rect returnRect;
returnRect.x = x;
returnRect.y = y;
returnRect.w = w;
returnRect.h = h;
return returnRect;
}
//The window, where the content(surface) will be rendered.
sWindow win1;
//Window's construct
void sWindow::createWindow(char* title, int x, int y, int w, int h, Uint32 flags) {
win = SDL_CreateWindow(title, x, y, w, h, flags);
winSur = SDL_GetWindowSurface(win);
WIN_RECT = newRect(x, y, w, h);
WIN_ID = SDL_GetWindowID(win);
}
//The logic and render actions...
void sWindow::update() {
}
//Window's destructor
void sWindow::close() {
SDL_DestroyWindow(win);
SDL_FreeSurface(winSur);
}
//Main loop control
bool quit = false;
//Initilize the OpenGL and other libs(SDL2)
bool inited() {
bool result = true;
if (SDL_INIT_VIDEO <= 0) {
result = false;
printf("SDL_INIT_VIDEO Failed");
}
return result;
}
//Main loop...
int main(int argc, char* argv[]) {
if (inited()) {
win1.createWindow((char*)"SpaceCode", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 380, 280, SDL_WINDOW_SHOWN);
while (!quit) {
while (SDL_PollEvent(&win1.e) != 0) {
if (win1.e.type == SDL_QUIT) {
quit = true;
}
}
}
}
win1.close();
SDL_Quit();
return 0;
}
答案 0 :(得分:1)
此代码总是会导致高CPU使用率,因为没有帧率上限,因此它会尽可能快地尝试处理它。
请参阅以下各个帖子:
另外还有更多关于Google的搜索。
答案 1 :(得分:0)
我有这个问题。这是由一个过时的Wacom平板电脑驱动程序引起的。如果您安装了这样的驱动程序,我建议将其删除,然后重新安装更新的驱动程序。这对我有用。