本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-avoiding-memory-leaks/ 在托管 XAML 应用中使用 Win2D 控件时,必须谨慎处理对象引用计数,以免控件不能被垃圾回收器回收. 内存泄漏的发生条件 你正在通过 C# 等 .Net 语言 (非原生 C++)使用 Win2D 你使用了以下任一 Win2D 控件: CanvasControl CanvasVirtualControl CanvasAnimatedControl Canva…
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-handling-device-lost/ “设备丢失”是指 GPU 设备失效无法继续进行渲染的情况.GPU 硬件故障.驱动程序缺陷.驱动程序软件更新或者从一个 GPU 切换到另一个都可能导致此问题.丢失的设备无法使用,此时任何尝试使用设备的 Win2D 都会引发异常.要解决这一问题,应用必须创建新设备再重新创建所有图形资源. 并非所有应用都需要操心如何解决设备丢失的情况.设备丢失是一种比较少见的情况(但愿…
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-dpi-dips/ 本文旨在解释物理像素与设备独立像素(DIPs, device independent pixels)之间的区别,以及 Win2D 如何处理 DPI (dots per inch/每英寸点数). Win2D 被设计为可以自行感知设备环境,以便在各种高低不同 DPI 的设备上呈现正确的视觉表现,故多数应用可以忽略 DIPs 和 DPI 之间的区别.如果你的应用有更多特定需求,或者你希望自行定…
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-offscreen-drawing/ 应用有时需要将图形绘制到并不立即显示的目标上.此类绘制动作被称作“幕后绘制”或“绘制到纹理”.当应用需要将绘制操作输出保存到一个文件.返回为一个像素数组或留作后续操作的输入源时,常需要进行这种幕后绘制. 通过使用 Win2D 中的 CanvasRenderTarget 可以轻松实现以上场景. CanvasRenderTarget 派生自 CanvasBitmap ,包含…
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-premultiplied-alpha/ 在计算机绘图中有两种表示颜色值不透明度的方法.Win2D 中两种方法均有所采用.本文旨在解释两种方法之间的区别以及其各自的使用场景. 直接 Alpha (Straight alpha) 当使用直接,亦即线性 Alpha 时: RGB 值指定绘制目标的颜色 Alpha 值指定绘制目标的质密程度 在该方法中,RGB 和 Alpha 通道各自独立发挥作用.它们可以在不互相…
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-pixel-formats/ DirectXPixelFormat 枚举 包含了 Direct3D 和 DXGI 所使用全部各种像素格式,但其中只有部分被 Win2D 所支持 (或被 Win2D 构建的基础—— Direct2D 所支持). 如果不确定该采用哪种格式,默认选择 B8G8R8A8UIntNormalized 作为像素格式以及 Premultiplied 作为 CanvasAlphaMode (…
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-interop-with-direct2d/ Win2D 作为 Direct2D 的上层实现,支持与其进行双向互操作.如果你有一个 Win2D 对象,你可以访问到用以实现它的原生 Direct2D 对象:而如果你有一个 Direct2D 对象,只要包装该 Direct2D 对象的 Win2D 对象存在,你也能查找到此 Win2D 对象,或者,当 Win2D 包装对象不存在时,你也可以手动创建一个新的包装器.…
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-choosing-control-resolution/ 本文旨在讲解如何配置 Win2D XAML 控件使用的分辨率.下文将介绍如何: 使 Win2D 控件运行在固定的分辨率. 通过调整控件 DPI 减少渲染像素数以增强性能. 分辨率与控件缩放 本文中所用的“分辨率”一词,是指位图的尺寸(高宽). Win2D XAML 控件绘制的对象均有分辨率和 DPI 这两项属性.对象的 DPI 指示了绘制时其构成像素…
避免内存泄漏 本文从微软官方文档翻译 http://microsoft.github.io/Win2D/html/RefCycles.htm 如果文档有问题,可以在 https://github.com/Nukepayload2/Win2dDocVB发 Issue,也可以直接回复. 当在托管的 XAML 应用程序中使用 Win2D 控件,需要注意垃圾回收器回收这些控件前它们的引用计数循环. 你有一个问题,如果... 您正在使用 Win2D 从一种.NET 语言如 VB (不是 c + +) 您使…
1. 造成内存泄漏的原因? threadLocal是为了解决对象不能被多线程共享访问的问题,通过threadLocal.set方法将对象实例保存在每个线程自己所拥有的threadLocalMap中,这样每个线程使用自己的对象实例,彼此不会影响达到隔离的作用,从而就解决了对象在被共享访问带来线程安全问题.如果将同步机制和threadLocal做一个横向比较的话,同步机制就是通过控制线程访问共享对象的顺序,而threadLocal就是为每一个线程分配一个该对象,各用各的互不影响.打个比方说,现在有1…