【问题标题】:Why doesn't Gloss render in native resolution?为什么 Gloss 不能以原始分辨率渲染?
【发布时间】:2019-10-23 19:41:46
【问题描述】:

在 OSX(原始分辨率为 2560 x 1600)上,Gloss 以 2 倍的缩放系数显示所有内容。 为 display 函数提供 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 应该可以解决问题。

【问题讨论】:

  • 我建议您发布您发现的解决方案作为答案。

标签: haskell gloss juicy-pixels


【解决方案1】:

当默认窗口管理后端 GLUT 被替换为 GLFW 时,Gloss 可以在 OSX 下使用 hdpi-display 以原始分辨率使用。为此,请使用适当的标志重建 Gloss:

cabal install -f -GLUT -f GLFW

(注意:使用 GLFW,我无法再使用 Gloss 中的某些模块,例如 Gloss.Data.Picture 或更重要的是 Graphics.Gloss.Juicy。不过,仅使用 Graphics.Gloss.Rendering 即可。与分辨率相关:制作确保以帧缓冲区的大小绘制图片,而不是窗口大小,因为它们可能会有所不同。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多