Поскольку обновление Mavericks (теперь я на 10.10), в окне отладки отображается это сообщение:
Функция "CGContextErase" устарела и будет удалена в предстоящем обновлении. К сожалению, это приложение или используемая им библиотека использует эту устаревшую функцию и тем самым способствует общей деградации производительности системы.
Я создаю приложение OpenGL (SDL), написанное на C++, и теперь у меня проблемы с памятью процессора из-за моего приложения (он использует 100% мощности моего процессора MacBook Intel 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 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 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;
}
Этот код всегда будет приводить к высокому использованию ЦП, поскольку на нем нет ограничения частоты кадров, поэтому он просто попытается обработать его как можно быстрее.
См. Различные сообщения ниже:
Плюс еще много поисков в Google.
У меня была эта проблема. Это было вызвано устаревшим драйвером Wacom Tablet. Если у вас установлен такой драйвер, я бы рекомендовал его удалить, а затем переустановить более новый драйвер. Это сделало трюк для меня.