Почему Gloss не рендерит в родном разрешении? - PullRequest
3 голосов
/ 08 июня 2019

В 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 ] )

... и соответствующий рендер:

Screenshot of the render

Обновление: Кажется, этоОбщая проблема с дисплеями OpenGL и Retina (фактически способ, которым пиксели OSX рассчитываются внутри).Поскольку, как я понимаю, Gloss на самом деле не разрешает низкоуровневый доступ, я предполагаю, что это невозможно исправить.

Обновление 2: Это, похоже, особая проблема с GLUT какбазовый бэкэнд для Gloss.Восстановление Gloss, включающее GLFW и отключающее GLUT, должно решить эту проблему.

1 Ответ

2 голосов
/ 09 июня 2019

Глянец можно использовать с собственным разрешением под OSX с hdpi-дисплеем, когда серверная часть GLUT управления окнами по умолчанию заменяется на GLFW.Для этого перестройте Gloss с соответствующими флагами:

cabal install -f -GLUT -f GLFW

(Примечание: с GLFW я больше не мог использовать некоторые модули в Gloss, например, Gloss.Data.Picture или, что более важно,Graphics.Gloss.Juicy. Использование только Graphics.Gloss.Rendering работает, хотя. Относительно разрешения: убедитесь, что вы рисуете ваши картинки в размере кадрового буфера, а не в размере окна, поскольку они могут отличаться.)

...