格尔玛基
|
该页面正在翻译中。 |
GLMakie是本机的,基于桌面的后端,并且是最完整的功能。 它需要一个支持OpenGL的图形卡与OpenGL版本3.3或更高.
激活和屏幕配置
通过调用激活后端 格玛基。启动!():
#
<无翻译>*格玛基。启动!*-Function
GLMakie.activate!(; screen_config...)
将GLMakie设置为当前活动的后端,还可以选择使用以下方法修改屏幕配置 屏幕_config 关键字参数。 请注意, 屏幕_config 也可以通过永久设置 Makie。set_theme!(GLMakie=(screen_config。..,)).
可以通过的参数 屏幕_config:
Renderloop
-
renderloop=GLMakie.renderloop:设置函数renderloop(::GLMakie.屏幕)它为屏幕启动了一个renderloop。
|
警告下面的关键字参数在以下情况下无效 |
-
pause_renderloop=false:如果真的,创建一个带有暂停的renderloop的屏幕。 Renderloop可以用格玛基。start_renderloop!(屏幕)并再次暂停与格玛基。pause_renderloop!(屏幕). -
vsync=错误:是否为窗口启用vsync。 -
render_on_demand=true:如果真的,场景只有在里面发生了变化时才会被渲染。 -
帧速率=30.0:设置每秒当前呈现的帧数。 -
px_per_unit=自动:设置渲染像素数与马基决议。 它默认为标量因子但可能是任何正实数。 GLFW窗口属性 -
浮点数=错误:窗口是否应该漂浮在其他窗口上方。 -
focus_on_show=错误:如果真的,在新打开时聚焦窗口。 -
装饰=真实:是否显示窗口装饰。 -
标题::String="Makie":设置窗口标题。 -
全屏=错误:是否以全屏模式启动窗口。 -
调试=错误:如果真的,启动GLFW。带有调试输出的窗口/OpenGL上下文。 -
监视器::联合{Nothing, GLFW.Monitor} =没什么:设置窗口应打开的监视器。 如果设置为什么都没有,GLFW将决定使用哪个显示器。 -
可见=真:窗口在首次创建时是否应该可见。 -
标量因子=自动:设置窗口缩放因子,如2.0在HiDPI/视网膜显示器上。 它是根据显示器自动设置的,但可以是任何正实数。
渲染常量和后处理器
-
oit=错误:是否为窗口启用订单独立透明度。 -
fxaa=真:是否为窗口启用fxaa(抗锯齿)。 -
ssao=真:是否启用屏幕空间环境光遮蔽,模拟内边缘和缝隙处的自然阴影。 -
transparency_weight_scale=1000f0:调整渲染着色器中的一个因子,以实现与顺序无关的透明度。 对于所有这些(在一个渲染管道中),这应该是相同的,否则深度"顺序"将被破坏。 -
max_lights=64:最大灯具数目着色=MultiLightShading -
max_light_parameters=5*N_lights:可上传的最大灯光参数数。 这些包括标量浮点数中除光色以外的所有内容(即位置,方向,衰减,角度)。
窗口缩放
数字的大小以与显示无关的"逻辑"尺寸给出,GLMakie后端将自动缩放HiDPI/Retina显示器上显示窗口的大小。 例如,默认 大小=(800,600) 将显示在HiDPI显示器上的1600×1200窗口中,该显示器配置了200%的缩放因子。
缩放因子可以通过显示不同的图形来复盖 标量因子 价值:
fig = Figure(size = (800, 600))
# ...
display(fig, scalefactor = 1.5)
如果比例因子未从其默认自动配置更改,则在Windows和OSX上具有不同比例因子的显示器上移动时,窗口将调整大小以保持其外观大小。 (X11不支持独立缩放因子,此时底层GLFW库未使用Wayland支持编译。)
分辨率缩放
与窗口缩放因子相关,可以缩放从图形大小和位置到像素的映射以实现HiDPI/Retina分辨率渲染。 分辨率缩放默认为与窗口缩放相同的因子,但可以使用 px_per_unit 显示图形时的参数:
fig = Figure(size = (800, 600))
# ...
display(fig, px_per_unit = 2)
在保存pngs时,分辨率比例因子也可以改变:
save("hires.png", fig, px_per_unit = 2) # 1600 × 1200 px png
save("lores.png", fig, px_per_unit = 0.5) # 400 × 300 px png
如果脚本可能在本机屏幕DPI可以变化的交互式环境中运行,则可能需要显式设置 px_per_unit=1 时保存数字以确保结果的一致性。
多个窗口
GLMakie具有显示多个独立人物(或场景)的实验性支持。 要打开新窗口,请使用 显示(GLMakie。屏幕(),figure_or_scene). 要关闭所有窗口,请使用 格玛基。关闭().
嵌入式
通过创建自定义"窗口"类型(类似于GLFW OS级窗口)并抓取GLMakie的帧缓冲区以在您自己的GUI中显示,可以对嵌入GLMakie提供实验性支持。 以下是您需要执行的操作的高级概述:
-
创建一个
我的窗类型,它可能代表您选择的GUI框架中的小部件。 将此类型的实例传递给格玛基。屏幕(;窗口=my_window,start_renderloop=false)获得一个屏幕{MyWindow}没有renderloop在后台运行的对象(可选,取决于您的应用程序)。 这是您需要使用的主要对象。 -
为
我的窗类型。 这是一个非详尽的列表:-
基地。isopen(::MyWindow)-
ShaderAbstractions。native_switch_context!(::MyWindow)(切换到窗口的OpenGL上下文) -
ShaderAbstractions。native_context_alive(::MyWindow)(检查窗口OpenGL上下文是否仍然有效) -
格玛基。framebuffer_size(::MyWindow)(获取windows帧缓冲区的大小) -
格玛基。毁灭!(::MyWindow)('破坏’窗口,这应该是一个no-op,除非你想让GLMakie真正关闭窗口) -
GLMakie。connect_screen(::Scene,Screen{MyWindow})(连接输入信号,例如键盘和鼠标;您可能需要实现单独的连接方法)。
-
-
所有这些的实际实现完全取决于你想如何嵌入GLMakie。
-
A
图现在可以通过调用在新屏幕中显示显示(屏幕,f). 如果你不使用GLMakie自己的renderloop,你需要照顾调用格玛基。render_frame(屏幕)必要时(您可以使用格玛基。requires_update(屏幕)). -
显示(屏幕,f)只会将图形绘制到帧缓冲区。 你可以得到帧缓冲区的颜色纹理附件屏幕。帧缓冲区。缓冲区[:颜色],并在您选择的GUI框架中将该颜色纹理显示为图像。 -
如果需要交互性,则需要将输入事件从键盘和鼠标传递到
麦琪get_scene(f)。活动(事件结构)。
在Linux中强制使用专用GPU
通常专用GPU用于渲染。 如果使用集成GPU,则可以告诉Julia在启动julia时使用专用GPU。 $sudo DRI_PRIME=1julia 在bash终端。 要永久使用它,请添加该行 导出DRI_PRIME=1 在你的 .巴什克 或 .zshrc 档案。
Opengl故障排除
如果您在加载GLMakie时遇到任何错误,这可能意味着您没有支持OpenGL的显卡,或者您没有安装支持OpenGL3.3的驱动程序。 请注意,大多数Gpu,甚至是8岁的集成Gpu,都支持OpenGL3.3。
在Linux上,你可以找出你的OpenGL版本与: glxinfo/grep"OpenGL版本"
如果您在linux上使用AMD或Intel gpu,您可能会遇到https://github.com/JuliaGL/GLFW.jl/issues/198[GLFW#198]。
如果您在无头服务器上,您仍然需要安装x-server和适当的图形驱动程序。
你可以在这里找到一个关于如何设置它的演示https://nextjournal.com/sdanisch/GLMakie-nogpu[下一篇文章]。
GLMakie的CI没有GPU,所以你也可以看看https://github.com/MakieOrg/Makie.jl/blob/master/.github/workflows/glmakie.yaml[.github/workflows/glmakie.yaml]用于工作设置。
如果这些都不适合您,请查看其他后端,这些后端都可以在没有GPU的情况下工作。
如果你得到一个错误指向https://github.com/JuliaGL/GLFW.jl[GLFW.jl],请查看现有的https://github.com/JuliaGL/GLFW.jl/issues[GLFW问题],也谷歌为这些错误。 这很可能是需要修复的东西。https://github.com/glfw/glfw[glfw c库]或在GPU驱动程序。
|
警告GLMakie不是线程安全的! Makie函数显示在GLMakie或更新到 |
WSL设置或X转发
来自:https://github.com/Microsoft/WSL/issues/2855#issuecomment-358861903[微软/WSL/问题/2855]
WSL可以运行OpenGL,但它不是支持的场景。 从一个干净的Ubuntu安装从商店做:
sudo apt install ubuntu-desktop mesa-utils export DISPLAY=localhost:0 glxgears
在窗户一侧:
-
安装/安装https://sourceforge.net/projects/vcxsrv/[VcXsrv]
-
选择多个窗口->显示0->启动无客户端->禁用本机opengl
故障排除:
1.)安装: sudo apt-get install-y xorg-dev mesa-utils xvfb libgl1freeglut3-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libxext-dev
2.)WSL在通过localhost时存在一些问题,因此可能需要使用: 导出显示=192.168.178.31:0,与运行VcXsrv的pcs网络适配器的本地ip
3.)一个可能需要 通过:c[mv/opt/julia-1.5.2/lib/julia/libstdc++.so.6/opt/julia-1.5.2/lib/julia/libcpp。备份],另一种形式的https://github.com/JuliaGL/GLFW.jl/issues/198[GLFW#198]