Mac OS OpenGL - проблемы с загрузкой процессора

0


Поскольку обновление 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;
}
Теги:
macos
opengl
sdl
cpu

2 ответа

1

Этот код всегда будет приводить к высокому использованию ЦП, поскольку на нем нет ограничения частоты кадров, поэтому он просто попытается обработать его как можно быстрее.

См. Различные сообщения ниже:

Плюс еще много поисков в Google.

0

У меня была эта проблема. Это было вызвано устаревшим драйвером Wacom Tablet. Если у вас установлен такой драйвер, я бы рекомендовал его удалить, а затем переустановить более новый драйвер. Это сделало трюк для меня.

  • 1
    Пожалуйста, не публикуйте одинаковые ответы на несколько вопросов. Отправьте один хороший ответ, затем проголосуйте / пометьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не является дубликатом, адаптируйте свои ответы на вопрос.
  • 0
    Хорошие отзывы. Благодарю. Сделаю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню