Skip to content

如果你是用WSL写这个实验的话,WSL2/WSLg 环境下运行图形程序时可能出现黑屏现象 #39

Description

@zcq-zwy

环境

WSL 版本: 2.6.3.0
内核版本: 6.6.87.2-1
WSLg 版本: 1.0.71
MSRDC 版本: 1.2.6353
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows: 10.0.26200.7840

问题描述

在 WSL2 + WSLg 环境下运行 nanos-lite / navy-apps 的图形程序时,可能出现“窗口能够打开,但画面黑
屏/不正常显示”的现象。

甚至出现影响你主机上的图形程序,导致你自己的电脑黑屏几秒钟,之后出现一系列小问题

经过实验:如果你自己的电脑黑屏几秒钟,应该是WSL2 / WSLg 图形栈兼容性问题,更换自己电脑驱驱动可以解决这个问题

但之后你就会发现,自己如果你认为自己实现写的正确,图形化还是黑屏,诸如pal,马里奥都运行黑屏。

初步判断

第1个问题感觉是WSL2 / WSLg 图形栈兼容性问题,更好WSL版本或者驱动版本应该可以解决
第2个问题感觉是NEMU VGA 渲染和 WSLg 硬件加速后端的兼容性问题,因为native可以运行。
写了个测试程序,发现SDL默认硬件加速

 ./sdl_probe
环境变量 SDL_VIDEODRIVER=<未设置>
环境变量 SDL_RENDER_DRIVER=<未设置>
环境变量 LIBGL_ALWAYS_SOFTWARE=<未设置>
环境变量 GALLIUM_DRIVER=<未设置>
环境变量 LP_NUM_THREADS=<未设置>
当前视频驱动: x11
可用渲染驱动数量: 3
  [0] opengl
渲染器标志: 0xe 硬件加速 垂直同步 目标纹理
  [1] opengles2
渲染器标志: 0xe 硬件加速 垂直同步 目标纹理
  [2] software
渲染器标志: 0xd 软件渲染 垂直同步 目标纹理
最终选中的渲染器: opengl
渲染器标志: 0xa 硬件加速 目标纹理

解决方法

第一个就是切换版本,wslg或者自己win电脑驱动
第二个就是让SDL走软件渲染 export SDL_RENDER_DRIVER=software

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions