Mac Mojave + opengl - PullRequest
       18

Mac Mojave + opengl

0 голосов
/ 26 сентября 2018

Mac OS 10.14 Mojave был только что выпущен, и с июня мы знаем, что OpenGL должен был быть объявлен устаревшим в ОС.«Приложения OpenGL будут продолжать работать, но вы должны переключиться на Metal», чтобы перефразировать.Однако, по-видимому, нет документации, указывающей, можете ли вы по-прежнему компилировать с OpenGL или Apple запрещает это или не использует соответствующие библиотеки разработки.В настоящее время я занимаюсь разработкой графической программы на основе OpenGL и не могу рисковать обновлением, если компиляция больше не работает.Кто-нибудь проверял это?

РЕДАКТИРОВАТЬ: Кто-нибудь еще разделяет опыт Esenthel?

Ответы [ 11 ]

0 голосов
/ 14 декабря 2018

GLFW обойти.Подобно другим ответам, но вам не нужно изменять размер окна в цикле отрисовки, просто сначала вызовите glfwPollEvents().

window = glfwCreateWindow(width-1, height, "Hello World", NULL, NULL);
glfwPollEvents();
glfwSetWindowSize(window, width, height);

Кроме того, glfwHideWindow(), а затем glfwShowWindow(), кажется, работает.Точно так же glfwSetWindowPos() является альтернативой.Хотя установка размера окна кажется быстрее, чем скрытие / отображение окна, и я не хочу менять положение окна.

0 голосов
/ 11 января 2019

В некоторых случаях перемещение координаты окна на +1 не работает.В этом случае мы непрерывно перетаскиваем окно программным способом до его визуализации и останавливаем экран нажатием клавиатуры.Добавьте его в игровой цикл после замены буферов.

    if (glfwGetKey( window, GLFW_KEY_Q ) == GLFW_RELEASE && !mac_moved){
        int x, y;
        glfwGetWindowPos(window, &x, &y);
        glfwSetWindowPos(window, ++x, y);
    } else {
        mac_moved = true;
    }

Определите mac_moved как статическую переменную где-то сверху.

static bool mac_moved = false;
0 голосов
/ 07 ноября 2018

Мой обходной путь в GLFW - вызвать окно показа в основном цикле отрисовки.

 bool needDraw = true;
    if (needDraw) {
        glfwShowWindow(window);
        glfwHideWindow(window);
        glfwShowWindow(window);
        needDraw = false;
    }
0 голосов
/ 08 ноября 2018

Я тоже сталкивался с этим после обновления.Я использую glfw.Фактически, созданное окно может показывать желаемый контент после изменения размера или его перемещения.Я добавил glfwSetWindowPos(window, 100, 100); в основной цикл, чтобы переместить его во временное решение.

0 голосов
/ 21 октября 2018

OpenGL в Мохаве на сегодняшний день (21 октября 2018 г.) содержит ошибки.Вы должны переместить положение окна glfw, чтобы увидеть, что именно он отображает.

Этот обходной код внутри цикла рендеринга работал для меня: if(!init) { int x,y; glfwGetWindowPos(window,&x, &y); glfwSetWindowPos(window,x+1,y);<br> init = true; }

0 голосов
/ 26 октября 2018

Я использую GLUT и OpenGL.Эта проблема присутствует как в Xcode 10.0, так и в 10.1 beta3.

Если вы измените размер окна, графика будет отображаться большую часть времени.

Поэтому я разработал обходной путь, используя функцию обратного вызова изменения формы.Скажем, я хотел активировать окно 1000x1000.Я активирую его с 999x999, а затем при изменении его формы я обращаюсь к 1000x1000, как требуется:

void reshape (int width, int height){
    glutReshapeWindow (1000, 1000);
}

И на главном:

int main (int argc, char** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize( 999,999 );
    glutInitWindowPosition (0.0f, 0.0f);
    glutCreateWindow("example");

    glutReshapeFunc (reshape);
    glutDisplayFunc(draw);
    glutKeyboardFunc(keyboard);
    glutIdleFunc(idle);

    glutMainLoop();
    return 0;
}

Так как обратный вызов изменения формы запускается перед отображением, он работаетна данный момент.

0 голосов
/ 05 октября 2018

Код в

http://people.bath.ac.uk/abscjkw/ComputerPrograms/C++programs/OpenGL/MojaveOpenGL.cpp

отлично работает в Мохаве с Xcode 10.0.Размер окна автоматически изменяется, чтобы избавиться от черного.Платформы OpenGL и GLUT добавляются в проект из обычного места: / System / Library / Frameworks

Chris

0 голосов
/ 30 сентября 2018

«Исправил» это, загрузив Xcode 9.4.1

Скомпилированный в нем и заставив мое приложение работать с OpenGL view.

Я думаю, что-то с Layer-Поддерживаемые просмотры .Потому что, когда я прокручиваю свое представление OpenGL, оно становится видимым при некотором представлении ... и мерцает.И я вижу, что он правильно нарисован сзади.Но когда я прекращаю прокручивать - он исчезает.

0 голосов
/ 29 сентября 2018

Причина, по которой некоторый код OpenGL потерпел неудачу, заключается в том, что в Mojave ваше представление автоматически поддерживается на уровне слоев.Если ваш код проверяет это условие:

[NSGraphicsContext currentContextDrawingToScreen]

Он вернет НЕТ, и код с этим условием не запустится (т. Е. На экране ничего не отображается).

К сожалению,вы также не можете установить для WantsLayer значение NO в Mojave, это не будет работать.

0 голосов
/ 28 сентября 2018

Я использую GLEW, GLUT, OpenGL 2.0 и SDL 2. Я могу скомпилировать и запустить свое приложение OpenGL.Однако мне пришлось изменить пути поиска в Framework, чтобы они включали:

/ Applications / Xcode.app / Содержание / Разработчик / Платформы / MacOSX.platform / Разработчик / SDKs / MacOSX.sdk / Система / Библиотека /Фреймворки

, где теперь размещены OpenGL и GLUT framework + заголовки, так как я не смог найти никаких OpenGL / GLUT заголовков в старом пути поиска System / Library / Frameworks (хотя фреймворк все еще был, нетзаголовки были включены).Я также должен был убедиться, что мои включения были GLUT / glut.h вместо просто glut.h.

Это дает мне новые предупреждающие сообщения в виде:

[по умолчанию] Невозможнодля загрузки исключений Info.plist (eGPUOverrides) "и" сохраненные параметры включения шумоподавления такие же, как по умолчанию (= 1)

Я еще не проверил их и каковы их последствия.

Что меня действительно беспокоит, так это то, что Esenthel говорит, что после компиляции и запуска приложения просто черный экран.Я обнаружил, что если вы перетаскиваете окно приложения (я не использую полноэкранный режим), анимация начинает отображаться.Очевидно, анимация находится в фоновом режиме, и весь код оценивается, но пока я перетаскиваю окно, остается только черный экран.

РЕДАКТИРОВАТЬ: я использую Mojave и Xcode 10 (не бета).

...