Интегрированные видеокарты Intel славятся отсутствием поддержки сглаживания OpenGL. Однако вы можете обойти это.
Первый вариант: суперсэмплинг вручную
Сделайте текстуру в 2 раза больше экрана. Рендеринг вашей сцены в текстуру через FBO, затем рендеринг текстуры в половину размера, чтобы он заполнил экран с билинейной интерполяцией. Может быть очень медленным (в сложных сценах) из-за 4-кратного увеличения пикселей для рисования.
приведет к слабому сглаживанию (поэтому я не рекомендую его для настольных программ, таких как ваши часы). Убедитесь сами:
Второй вариант: (расширенный)
Используйте шейдер для выполнения морфологического сглаживания . Это новая техника, и я не знаю, насколько это легко реализовать. Он используется в некоторых продвинутых играх.
Третий вариант:
Используйте текстуры и билинейную интерполяцию в ваших интересах, эмулируя примитивы OpenGL через текстуры. Техника описана здесь .
Четвертый вариант:
Используйте отдельную текстуру для каждого элемента ваших часов.
Например, для часовой стрелки не используйте черный черный GL_POLYGON в форме стрелки. Вместо этого используйте повернутый GL_QUAD, текстурированный изображением стрелки часа, нарисованным в графической программе. Затем билинейная интерполяция позаботится о сглаживании его во время его вращения.
Этот вариант потребует минимум усилий и выглядит очень хорошо.
Пятый вариант:
Используйте библиотеку, которая поддерживает программный рендеринг -
- Qt
- Windows GDI +
- WPF
- XRender
- и т.д.
Такие библиотеки содержат свои собственные алгоритмы сглаживания, поэтому они не зависят от вашей видеокарты для сглаживания. Преимущества:
- Будет визуализировать то же самое на каждой платформе. (это не гарантируется OpenGL в различных случаях - например, толстые диагональные «галочки» на скриншоте отображаются в виде параллелограммов, а не прямоугольников)
- Имеет большой набор удобных функций рисования ("drawArc", "drawText", "drawConcavePolygon", и они будут поддерживать градиенты и границы. Также вы получаете такие вещи, как класс Image.)
- Некоторые, такие как Qt, предоставят гораздо больше функциональных возможностей типа настольных приложений. Это может быть очень полезно даже для приложения с часами. Например:
- в приложении OpenGL вы, вероятно, будете повторять цикл каждые 20 мсек и пересчитывать часы, даже не задумываясь. Это потребует ненужных циклов работы процессора и приведет к его разгрузке на ноутбуке, что приведет к разрядке аккумулятора. В отличие от этого, Qt очень хорошо разбирается в том, когда он должен перерисовывать части ваших часов (например, когда правая половина часов перестает закрываться окном или когда ваши часы перемещают стрелку минуты на один шаг).
- как только вы приступите к реализации, например, иконка в трее или диалог настроек для ваших часов, библиотека вроде Qt может сделать это проще простого. Хорошо использовать одну и ту же библиотеку для всего.
Недостатком является гораздо худшая производительность, но это не имеет никакого значения для приложения с часами, и оно меняется, если принять во внимание интеллектуальные функции перерисовки, о которых я упоминал.
Для чего-то вроде приложения с часами очень рекомендуется пятый вариант. OpenGL в основном полезен для игр, программ для 3D и графических приложений, таких как музыкальные визуализаторы. Для настольных приложений он слишком низкоуровневый, и реализации слишком сильно отличаются.