Почему Gloss не рендерит в родном разрешении?
В OSX (с собственным разрешением 2560 x 1600) Gloss отображает все с коэффициентом масштабирования 2x. При назначении размера окна 300 x 300 для функции отображения создается окно 600 x 600. Весь контент в этом окне также в два раза больше (в каждом измерении), независимо от того, нарисован ли он с помощью Gloss или загружен как спрайт (I'). Я использую Juicy для этого). Уменьшение содержимого не дает такого же чистого результата, как при отображении в реальном собственном разрешении. Есть ли способ сделать рендер Gloss в полном родном разрешении?
Я все еще новичок в Gloss и надеюсь, что не пропустил ничего очевидного.
Вот код...
module Main where
import Graphics.Gloss
import Graphics.Gloss.Juicy
import Codec.Picture
main :: IO ()
main = loadJuicy "someimg.png" >>= maybe ( print "Nope" ) displayImg
displayImg :: Picture -> IO ()
displayImg p = display ( InWindow "Image" ( 300, 300 ) ( 100, 100 ) ) white ( pictures [ p, translate 32 32 $ circleSolid 4 ] )
... и соответствующий рендер:
Обновление: это, кажется, общая проблема с OpenGL и дисплеями сетчатки (фактически способ, которым пиксели OSX рассчитываются внутренне). Поскольку, как я понимаю, Gloss на самом деле не разрешает доступ на низком уровне, я думаю, что это невозможно исправить.
Обновление 2: похоже, это особая проблема с GLUT в качестве основного бэкэнда для Gloss. Восстановление Gloss, включающее GLFW и отключающее GLUT, должно решить эту проблему.
1 ответ
Блеск может использоваться с собственным разрешением под OSX с hdpi-дисплеем, когда сервер GLUT по умолчанию заменен на GLFW. Для этого перестройте Gloss с соответствующими флагами:
cabal install -f -GLUT -f GLFW
(Примечание: с GLFW я больше не мог использовать некоторые модули в Gloss, например, Gloss.Data.Picture или, что еще важнее, Graphics.Gloss.Juicy. Хотя работает только Graphics.Gloss.Rendering. Относительно разрешения: убедитесь, что нарисовали ваши фотографии размером с фрейм-буфер, а не с размером окна, так как они могут отличаться.)