love.graphics.isGammaCorrect
Доступно начиная с LÖVE 0.10.0
Эта функция не поддерживается в более ранних версиях.
Определяет, поддерживается ли и включено ли гамма-корректное рендеринг. Его можно включить, установив t.gammacorrect = true в love.conf.
Не все устройства поддерживают гамма-корректное рендеринг; в этом случае оно будет автоматически отключено, и эта функция вернёт false. Оно поддерживается на настольных системах с графическими картами, способными использовать OpenGL 3/DirectX 10, и на устройствах iOS, способных использовать OpenGL ES 3.
Функция
Синопсис
gammacorrect = love.graphics.isGammaCorrect( )
Аргументы
Нет.
Возвращаемое значение
boolean gammacorrect- True, если гамма-корректное рендеринг поддерживается и было включено в love.conf, иначе false.
Примечания
При включенном гамма-корректном рендеринге многие функции и объекты выполняют автоматическое преобразование цвета между sRGB и линейным RGB, чтобы смешивание и математические операции в шейдерах были математически корректными (а они не корректны, если это не включено).
- Цвета, передаваемые в love.graphics.setColor, love.graphics.clear и Shader:sendColor, автоматически преобразуются из sRGB в линейное RGB.
- Цвета, заданные в SpriteBatches, тексте с цветами по символам, ParticleSystems, точках с цветами по точкам, стандартных Meshes и пользовательских Meshes, использующих атрибут "VertexColor", автоматически преобразуются из sRGB в линейное RGB при отрисовке этих объектов.
- Изображения автоматически преобразуют свои цвета из sRGB в линейное RGB при их отрисовке (и при получении пикселей в Shader), если флаг
linear = trueне установлен при создании Изображения.
- Все отрисовываемые на экране элементы будут смешиваться в линейном RGB, а затем результат будет преобразован в sRGB для отображения.
- Canvases, использующие формат CanvasFormat "normal" или "srgb", будут смешивать контент в линейном RGB, а результат будет храниться в канвасе в sRGB при отрисовке в него. Когда сам Canvas отрисовывается, его цвета пикселей преобразуются из sRGB в линейное RGB аналогичным образом, как изображения. Хранение данных пикселей канваса как sRGB обеспечивает лучшую точность (меньше полос) для более тёмных цветов по сравнению с "rgba8".
Поскольку большинство преобразований выполняются автоматически, ваш код не должен беспокоиться о преобразованиях цветов sRGB и линейного RGB при включенном гамма-корректном рендеринге, за исключением нескольких случаев:
- Если используется Mesh с пользовательскими атрибутами вершин, и один из атрибутов предназначен для использования в качестве цвета в Shader, а атрибут не называется "VertexColor".
- Если используется Shader с переменными uniform/extern или другими переменными, предназначенными для использования в качестве цветов, и Shader:sendColor не используется.
В обоих случаях, love.math.gammaToLinear может использоваться для преобразования значений цвета в линейное RGB в Lua-коде, или функции gammaCorrectColor (или unGammaCorrectColor при необходимости) шейдеров могут использоваться в коде шейдеров. Эти функции шейдера только выполняют преобразования, если гамма-корректный рендеринг фактически включен. Если это так, то препроцессорная макро-замена LOVE_GAMMA_CORRECT будет установлена.
Подробнее о гамма-корректном рендеринге можно узнать здесь, здесь и здесь.
См. также
© 2006–2020 LÖVE Development Team
Licensed under the GNU Free Documentation License, Version 1.3.
https://love2d.org/wiki/love.graphics.isGammaCorrect