Wine 图形显示基本概念

这篇具有很好参考价值的文章主要介绍了Wine 图形显示基本概念。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在理解wine 图形显示之前先了解下Windows 下当前使用的图形显示方法。

Windows 图形显示

Windows采用了基于GDI(Graphics Device Interface)和 DirectX两种不同的图形显示方式。

  1. GDI(Graphics Device Interface):是Windows中内置的2D渲染引擎,主要负责窗口、控件等基本UI元素的渲染、文字绘制以及打印输出等任务。在GDI的实现中,系统采用双缓冲技术,防止屏幕重绘过程中出现闪烁等问题。
  2. DirectX: 是Microsoft提供的对硬件加速3D图形的开发工具集合,包括Direct3D, Direct2D,DirectComposition等组件,可以在Windows平台上实现高效率的图形渲染。它通过与显卡进行直接交互(即硬件加速)来实现图形的渲染和显示 。DirectX可以利用GPU中的专门硬件进行运算,并且支持着色器编程模型,使得用户可以更加灵活地控制物体各个方面的外观和行为。当前,DirectX已经推出到DirectX 12版,随着现代游戏图形越来越复杂,DirectX这种硬件加速的3D图形显示方式将会越发重要。
    其中DX11 09年推出,DX12 14年推出并于15年Windows10 上全面支持DX12,现在主流都用DX12。

参考官方文档: https://learn.microsoft.com/zh-cn/windows/win32/learnwin32/overview-of-the-windows-graphics-architecture

Windows 下图显当前架构图如下:
wined3d,wine 入门,windows,microsoft

  • 图形设备接口 (GDI) 是 Windows 的原始图形界面。 GDI 首先针对 16 位 Windows 编写,然后针对 32 位和 64 位 Windows 进行了更新。
  • GDI+ 作为 GDI 的后续版本在 Windows XP 中引入。 GDI+ 库通过一组包装平面 C 函数的 C++ 类进行访问。 .NET Framework还在 System.Drawing 命名空间中提供 GDI+ 的托管版本。
  • Direct3D 支持三维图形。
  • Direct2D 是 2D 图形的新式 API,是 GDI 和 GDI+ 的后续版本。
  • DirectWrite是文本布局和光栅化引擎。 可以使用 GDI 或 Direct2D 绘制光栅化文本。
  • DirectX 图形基础结构 (DXGI) 执行低级别任务,例如呈现输出帧。 大多数应用程序不直接使用 DXGI。 相反,它充当图形驱动程序和 Direct3D 之间的中间层。

最底层需要调用 GDI DDI 和DX DDI;(DDI (Device Driver Interface,设备驱动程序接口))。其由设备厂家根据接口协议进行开发。微软定义好所有的DDI 接口,厂家各自去实现驱动。所以如果显卡驱动没有安装成功的话,我们的电脑显示就会很丑陋,分辨率和颜色显示会混乱。
在Windows 下的开发,也可以采用 OpenGL 进行开发,同 DirectX 一样,显卡驱动中会实现OpenGL 协议接口。微软官方也支持OpenGL,但是不宣传使用。
我们平时使用的Winform、MFC、WPF、Qt等则是用来实现对这些引擎调用的工具,属于更上层的范围。
WPF采用的是DirectX作为底层绘图引擎,Winform和MFC则都采用GDI/GDI+。Qt Widget使用GDI/GDI+,QML则使用OpenGL 渲染。当然作为C++/C# 开发人员,也可以在Qt 中使用DX,或者在Winform 上使用OpenGL,只是需要自行研究函数库调用再做封装使用而已。

以上绘图引擎主要涉及到的动态库如下:

  1. gdi32.dll
    官方解释:Windows GDI - Win32 apps
    主要涉及以下一些绘图操作:
  • 位图
  • 画笔
  • 剪裁
  • 颜色
  • 坐标空间和转换
  • 设备上下文
  • 填充形状
  • 字体和文本
  • 线条和曲线
  • 图元文件
  • 多个显示监视器
  • 绘画和绘图
  • 路径
  • 打印和打印后台处理程序
  • 矩形
  • 区域
  1. gdiplus.dll
    官方解释: GDI+ - Win32 apps
    主要在gdi 的基础上新增支持了:
  • 渐变画笔
  • 基数样条
  • 独立路径对象
  • 转换和矩阵对象
  • 可缩放区域
  • Alpha 混合
  • 支持多个图像格式
  1. d2d1.dll
    官方解释:Direct2D - Win32 apps
    Direct2D 是一种硬件加速的即时模式 2D 图形 API,可为二维几何图形、位图和文本提供高性能和高质量的渲染。跟GDI/GDI+ 区别很大,在新的设备中完全可以用Direct2D 去实现。
    主要绘图操作:
  • 呈现目标
    • 呈现目标功能
    • 呈现目标资源
    • 绘图命令
    • 错误处理
  • 绘图资源
    • 画笔
    • 几何图形
    • 位图
  • 绘制文本
  • Direct2D 基元
  1. d3d*.dll/d3dcompiler*.dll
    涉及到3D 绘图,较为复杂,后续再补充。

接下来先了解下Linux 下当前的图形显示方式。

Linux 下图形显示

在linux 下主要有X11 和 Wayland 这两种显示方式。

  1. X Window系统(X11):这是一种最早引入的显示系统,它提供了基本的图形用户接口(GUI)功能,包括窗口、菜单、对话框以及文本输入等,同时支持OpenGL等高级图形渲染接口。X Window作为一种客户端/服务器模型,其结构设计使得不同的应用程序可以共享和独立使用显示设备,通常被用于使用本地计算机连接到远程服务器上时。
  2. Wayland窗口系统:近年来,Wayland逐渐取代X11成为Ubuntu推荐的默认显示服务器协议。与X Window不同,Wayland采用“合成器”(Compositor)的概念实现对图形显示的管理和处理,在不影响性能的前提下,目的是消除Linux平台下图形事件冒泡延迟,减小硬件资源的占用率,提供更流畅与舒适的界面体验。

Wine 图形显示

作为Windows 和Linux 的胶水层,Wine 需要实现Windows 上的图形显示,也即要分别实现GDI 和DirectX .
查阅源码,Wine 基本实现了对应的API 功能;其中
DirectX 真正实现在wined3d 中,与Windows 对应的各种d3dxx.dll ,函数实现均会跳转到wined3d;当然其在Linux 的实现均是调用了OpenGL 的接口。(当然,官方也提出可以通过注册表将3D 渲染引擎修改为Vulkan,但是当前的Vulkan 转换并不完善,慎用)由于DirectX 和OpenGL 的接口设计不相同,会导致部分转换有异常;
d3d12 作为一个特殊,考虑到Vulkan 与 DX12 API 比较类似,架构相近;因此其实现直接调用 winevulkan。

由于Linux 桌面显示系统基本都是基于X11,因此Wine 封装了winex11.drv,
负责将Win32界面渲染到Linux和其他UNIX操作系统的桌面上。 涉及到渲染以及鼠标键盘等事件均需要通过其中转。

附:基本概念

  1. OpenGL(Open Graphics Library)是一种跨平台的图形渲染API,它提供了一套用于绘制2D和3D图形的计算机图形学标准接口。OpenGL可以在各种硬件平台上使用,并且支持多个操作系统,包括Windows、Linux,macOS等。它由开放标准组织OpenGL Architecture Review Board (ARB)进行标准化管理。
    OpenGL主要通过定义一些函数来实现对GPU的访问和控制,并提供一系列高效的方法来渲染2D和3D图像。OpenGL本身并不直接处理输入设备或窗口系统,但它可以与其他API如GLUT或SDL结合使用以提供完整的图形编程环境。
    OpenGL具有以下优点:
    1.跨平台和可移植性:OpenGL的代码可以从一个硬件/操作系统平台方便地移植到另一个平台上而无需大量修改。
    2.开放源代码:OpenGL是一种开放的标准,其规范及时向公众公示,并且可广泛应用于各种应用程序中。
    3.性能高效:OpenGL立足于利用GPU的硬件加速,充分发挥显卡的输入/输出运算能力,因此具有极高的图形处理性能。
    4.支持各种语言:除了C/C++,OpenGL也同时兼容多种编程语言,例如 Java、Python、C#等。

  2. GTK 是一种跨平台的图形用户界面(GUI)工具包,它是为了开发基于 X Window System 的 Unix 应用程序而设计并开发的。它是使用 C 语言编写的,但也支持许多其他编程语言,如Python、Perl和C++等。GTK+ 提供了各种部件(Widgets),如按钮、文本输入框、下拉菜单等,使得开发者可以方便地构建 GUI 界面。

  3. Vulkan是一个低开销、跨平台的3D图形API,由Khronos Group推出,可运行在Windows、Linux以及Android等操作系统上。它基于前身OpenGL ES标准,并在其基础上进行了颠覆性的升级与改进。
    相对于OpenGL,Vulkan具有如下特点:
    1.效率更高:Vulkan内部优化了许多传统API中存在的“瓶颈”,采用更直接的方法向GPU提交指令,大幅度提升了效率和帧率。
    2.可扩展性更好:Vulkan被设计为模块化的,能够更好地适应不同类型GPU的硬件架构,也可以更好地利用线程并发技术,实现更多的资源共享和同时处理。
    3.精确度更高:在管线配置和着色器编译方面,Vulkan规范要求使用精确的控制调节,使得着色器执行过程更加规范、精确,并且方便游戏引擎为用户提供更加个性化的效果。
    4.跨平台性更强:Vulkan可以支持多种平台,允许游戏开发者一次编写渲染代码,即可应用到多种平台上。文章来源地址https://www.toymoban.com/news/detail-810895.html

到了这里,关于Wine 图形显示基本概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu安装wine,安装windows软件

    1.开启32位安装环境。 2.下载一个PGP公钥用来识别软件仓库 注意,这一步可能会出现NO_PUBLICKKEY的报错,可以使用以下命令解决,记得把key换成自己的。 3.更新 4.开始安装wine软件 5.安装wine的配置工具 6 安装windows的软件 此处可能会出现报错,could not load kernel32.dll, status c0000135。

    2024年02月06日
    浏览(43)
  • Wine源码中添加新的DLL模块

    编译环境:debootstrap 安装 debian bullseye 源码版本:Wine 9.0-rc4 基础环境搭建 在dlls目录下新建一个文件夹:nfs 将amsi目录下的三个文件全部复制到nfs目录下: main.c 文件内容中新加一个函数如下: spec文件改名为nfs.spec, 将上面实现的函数导出给外部调用,nfs.spec内容如下: Make

    2024年01月16日
    浏览(79)
  • ubuntu下畅玩Seer(via wine)

    部分exe文件的运行需要32位的指令集架构,需要向Ubuntu系统中添加一个新的架构(i386),以支持32位的软件包。因为在64位的Ubuntu系统中,默认情况下只能安装和运行64位的软件。 通过添加i386架构(经典操作系统时钟中断),你可以在64位系统上安装和运行32位的软件。 接下来

    2024年02月16日
    浏览(36)
  • 使用deepin-wine安装windows软件

    目录 1、详细看 2、添加仓库 3、应用安装 4、常见问题,没有应用图标,重启即可; 5、卸载与清理按照层次从浅到深可以分为如下四个层级。 5、使用deepin-wine安装windows软件 1、详细看 GitHub - zq1997/deepin-wine: 【deepin源移植】Debian/Ubuntu上最快的QQ/微信安装方式 2、添加仓库 首次

    2024年02月04日
    浏览(45)
  • Mac(M1/M2)通过wine运行windows程序

      双击文件解压缩 ,就得到了一个Wineskin Winery.app 再把这个app拖到应用程序文件夹(最后拖到个人应用程序文件夹)    然后打开这个应用(右键打开,会提示可能是恶意软件,点确定打开)    在这个界面点+号,再点下载和安装     点OK 然后可能下载一段时间,耐心等待

    2024年02月09日
    浏览(55)
  • Ubuntu 下 Wine的安装与使用(以22.04为例)

    验证是否为64位架构 返回 amd64 查看是否安装了32位架构 若显示 i386 则跳过此步,否则执行 再次检查 下载并添加 WineHQ 存储库密钥 根据需要选择需要使用的sources文件 使用官方的源 使用国内的源则编辑 /etc/apt/sources.list.d/winehq-jammy.sources 文件,在文件中写入以下内容 其他版本

    2024年02月12日
    浏览(54)
  • Manjaro(Ubuntu) 安装全新 Linux 版微信,从此告别 Wine

    目前已经基本上使用 Manjaro 来工作,而工作离不开微信作为日常的工作沟通工具。因为微信官方一直没有 Linux 版本的,所以之前都只能够使用 Wine 版本,然后踩了不少坑,但还算能勉强使用。 最近听说微信终于要发布 Linux 版本的,于是找了一些教程,还有踩了一些坑,最终

    2024年04月15日
    浏览(57)
  • Linux中_使用wine_软件_安装使用windows软件

    如果文件内容正确,可以将其复制到~/.local/share/applications目录中,以使其在应用程序菜单中可见。 如果还不行,可以尝试使用chmod命令赋予该文件执行权限,并使用./文件名运行该文件,运行exe软件。

    2024年02月09日
    浏览(38)
  • Ubuntu 上安装 Wine,让你的 Windows 软件也能运行

    当 Windows 用户开始使用 Linux 时,他们面临的主要问题是某些软件不可用。 但是在像 Wine 这样的兼容层的帮助下,您可以轻松地在 Linux 上使用 Windows 应用程序。在本文中,将带您一起讨论 Wine 是什么以及如何在 Ubuntu 系统上安装它。 当 Linux 首次发布时,它不支持为其他操

    2024年02月07日
    浏览(40)
  • Ubuntu22.04安装微信Linux版(非Wine版)+中文输入

    Ubuntu下安装微信,一直是开发者痛点问题。微信终于推出了Linux原生版本(内侧版)。 我已经将资源上传至: https://download.csdn.net/download/dengtonglong/89003661 评论区有网盘的版本。 可能会提示缺少libssl1.1: 卸载: 刚安装没法使用输入法,由于我的输入法是ibus,官方建议使用f

    2024年04月17日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包