在OSX(具有2560 x 1600原始分辨率)上,Gloss以2倍缩放倍率显示所有内容。
将显示尺寸为300 x 300的窗口赋予显示功能将创建一个600 x 600的窗口。该窗口中的所有内容(在每个尺寸上)也都是其两倍(无论是使用Gloss绘制还是作为精灵加载(I' m为此使用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 ] )

...以及相应的渲染:

haskell - 为什么Gloss不以原始分辨率渲染?-LMLPHP

更新:
这似乎是OpenGL和视网膜显示器的一个普遍问题(实际上是内部计算OSX像素的方式)。因为据我了解,Gloss确实不允许低级别访问,所以我猜想这是不可修复的。

更新2:
对于Gloss作为Gloss的基础后端,这似乎是一个特殊的问题。重建启用GLFW的光泽度并禁用GLUT应该可以解决此问题。

最佳答案

当默认的窗口管理后端GLUT交换为GLFW时,可以在OSX下以hdpi-display在原始分辨率下使用光泽度。为此,使用适当的标志重建光泽度:
cabal install -f -GLUT -f GLFW
(注意:使用GLFW后,我无法再在Gloss中使用某些模块,例如Gloss.Data.Picture或更重要的是Graphics.Gloss.Juicy。尽管仅使用Graphics.Gloss.Rendering可以。但是与分辨率有关:请确保绘制图片以帧缓冲区的大小显示,而不是窗口大小,因为它们可能有所不同。)

关于haskell - 为什么Gloss不以原始分辨率渲染?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56508882/

10-11 03:03