首页
学习
活动
专区
圈层
工具
发布

WPF 使用 Silk.NET 进行 DirectX 渲染入门

当前是 2021.12.23 此时 Silk.NET 还没有完成 Direct2D 的封装,为了方便演示,本文使用了 SharpDx 的 D2D 代替 本文非新手友好,如果是刚接触 DirectX 那我推荐先阅读...WPF 使用 SharpDx 渲染博客导航 当前 SharpDx 已不维护,我正在找代替的项目,详细请看 SharpDx 的代替项目 刚好找到了 dotnet 基金会下的 Silk.NET 库,此库是新写的...里面,定义对 DirectX 的调用,使用的是 Cdecl 方式调用,然而在 DirectX 的定义里,需要采用 Stdcall 来调用才是正确的。...为了关联 D3DImage 就需要继续创建 D3D9 设备,如下面代码,调用 SetRenderTarget 将 D3D11 创建的 ID3D11Texture2D 作为 D3D9 的共享纹理,从而让...设备 通过 D3D9 设备,使用共享指针创建纹理,通过纹理获取平面 获取共享指针是为了让 D3D9 的纹理共享 D3D11 的资源,获取代码如下 DXGI.IDXGIResource

3.6K40

WPF 使用 Vortice 在 D3DImage 显示 D2D 内容

我只是代为记录的工具人 本文是渲染相关系列博客中的一篇,该系列博客已按照逻辑顺序编排,方便大家依次阅读。本文属于系列博客中,比较靠前的博客,可以独立阅读,无上下篇依赖。...而 Vortice 是作为 SharpDx 的一个代替的存在,是从 SharpDx 的基础上,继续开发的一个项目。...设备,从 GetSharedHandle 方法获取到的共享纹理创建 D3D9 的纹理,从而可以让创建出来的 D3D9 的纹理设置到 D3DImage 上 private IDirect3DTexture9...简单来说就是让 D3D11 和 D2D 对接,让 D3D11 和 DXGI 对接,再让 DXGI 和 D3D9 对接。...我整个代码仓库比较庞大,使用以下命令行可以进行部分拉取,拉取速度比较快 先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init git

21410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    全平台硬件解码渲染方法与优化实践

    而较新的EGLStream是英伟达一直推崇的方法,目前我所接触到的应用主要有两个:一个是OpenMarxAL接口,其可直接作为EGLStream的输入扩展并可输出OpenGL纹理,另一个则应用在D3D11...、D3D11+EGLStream 接下来我将介绍D3D11硬解,D3D11硬解基于EGL提供的资源共享功能。...ANGLE是指用D3D9与D3D11的一些指令和(着色器)实现OpenGL ES与EGL所有接口类似的功能。...当时我将此发现反馈给FFmpeg社区,随后社区在FFmpeg中添加了用以选择VideoToolbox输出结果的接口:如果是支持性能不佳的老系统则使用UYVY442格式,而新系统则使用NV12格式。...方法类似,都是通过调用一个从老版本iOS上就存在至今的接口来实现相关功能。

    5.1K21

    WPF 使用 SharpDX 在 D3DImage 显示 介绍创建控件D3D 设备设置指针画出来

    一般使用 D3DImage 都不能拿到比原来好的性能。 那么 D3DImage 有什么用?...因为没有直接从 Direct2D 到 D3D 显示的方法,下面需要告诉大家如何在 D3D11 显示 Direct2D 然后通过相同的格式转 D3D9 最后把缓冲区指针显示。...D3D 设备 如果需要使用 Direct2D 渲染,需要先创建 D3D11 的设备,因为实际的渲染是通过 3D 渲染。...; using DXGI = SharpDX.DXGI; using D3D11 = SharpDX.Direct3D11; using D3D9 = SharpDX.Direct3D9; 在使用之前,...下面来告诉大家如何创建 D3D11.Texture2D ,创建的方法因为需要很多参数,所以代码很多 从 D3D11.Texture2D 的构造函数可以知道,需要传入两个参数 D3D11.Device 和

    3K10

    使用c++SFML制作月圆之夜总集篇

    ,真香 2020年4月6日 昨天做完扫雷后,思考了一下游戏程序设计的课程设计应该做什么。...想到做自己常玩的卡牌游戏杀戮尖塔,月圆之夜,昆特牌,好像也就那么几个,想来想去觉得月圆之夜的游戏素材更好提取一些,直接手机上截图然后抠图就行了,因为我没有pc上的存档(我当初为什么不做斗地主!...虽然但是我感觉斗地主也不好做…为什么要给自己挖坑!为什么不找个人组队!)...,所以剔除了大部分的游戏内容来减少工程量,目前是打算只保留两套卡包,一个boss,一个角色,所以也就是普通的1v1的卡牌游戏的玩法,这周会抽出时间来搭建游戏的基本框架,先把界面都绘制起来,然后在细细雕琢...(当时年轻什么也不会,这个卡牌类的逻辑我感觉写的很蠢…给自己挖了不少坑,因为一开始不知道vector的存在,也没想到用链表…) 在 Card.h 中把我们能想到的之后会用到的属性都写出来,值得注意的是,

    4.1K10

    WPF 模拟 WPFMediaKit 的 D3D 配置用来测试4k性能

    本文告诉大家我在测试 WPFMediaKit 的 D3D 配置性能影响在 4k 分辨率设备下采用高清摄像头的性能 测试效果是 10 代 i3 带 4G 内存和集显 UHD 630 在 4k 下,跑满 36...IDirect3DSurface9 类型的 m_privateSurface 可以作为 D3DImage 的使用参数 为了测试此方式的参数创建的 IDirect3DTexture9 在 WPF 里的性能...Marshal.GetObjectForIUnknown(dev); // 只是减少引用计数而已,现在换成 m_device 了 Marshal.Release(dev); 为了在 D3D9...里使用上 D2D 需要创建 D3D11 设备,这部分逻辑只是用来测试,为了方便代码,我加上 SharpDx 的引用。...值得一说的是 SharpDx 当前官方不维护了,可以选择的代替请看 SharpDx 的代替项目 <PackageReference Include="SharpDX"

    1.4K30

    WPF初体验

    而且, HWND已经不存在于控件上了, 这是一个令人很不习惯的地方. 要知道不论什么UI库, 要想跟DirectX一起使用的话, 必须有一个HWND来指定绘制区域....这样的好处就是可以跟WPF的排版/Alpha融合什么的无缝结合, 但是, 由于中间多了一个拷贝, 会影响一部分效率. 再者, D3D9在XP和Vista上的处理方式不一样....还有一个更麻烦的事: WPF是基于D3D9的, 这就意味着GL/DX10/DX11就不能直接利用这种方式来整合. 所以呢, 还是要通过HWND的传统方式来....这个问题呢, 我也没找到一个完美的方式. 一种思路是在WndProc里, 这样的话, 只有在有WM消息触发时才会渲染, 就像UE3那个查看器一样, 鼠标不动, 它就不更新....最完美的方式就是找到WPF的主循环, 问题是WPF有这东西么? 有待研究. WPF的优势是什么? 控件多样性不如WinForms, 与C++的交互便利性不如MFC, 为什么还要使用它呢?

    1.2K30

    dotnet Vortice 通过 Angle 将 Skia 和 DirectX 对接

    我使用 CsWin32 库辅助定义 Win32 方法,再从 Avalonia 拷贝 OpenGL 相关定义 本文在正文部分只提供关键的代码。...调用 Angle 的 eglCreatePbufferFromClientBuffer 将 D3D11 纹理进行包装 本文这里采用标准的 DXGI 交换链的写法。...这里用到了一些在 Avalonia 封装好的方法,为了方便理解,我将这部分关键的逻辑拆出来 先是定义 EglInterface 类,核心代码如下 public unsafe partial class...GL_FRAMEBUFFER 的 framebuffer id 是多少 次参数 fb 为输出参数,将获取当前绑定的 framebuffer id 是多少 为什么在上一行代码 BindFramebuffer...尝试实际运行代码,也可以看到 CPU 接近不动,而 GPU 在干活 本文的实现方法是我从 Avalonia 框架里面学到的,我对 OpenGL 陌生,对 DirectX 了解。

    26710

    Nebula3 SDK (Apr 2009)更新内容

    IO 下 新类Debug::ConsolePageHandler, 在web服务器上显示命令行输出 Zip 文件系统应归于档案文件系统, ZIP支持做为一个特例(Wii上使用 ARC文件代替) ZipFileSystem...KeysAs(), 和Util::Dictionary::ValuesAs() 新类 Util::PriorityArray (我想应该不需要了吧) 新类Util::RandomNumberTable...: AnimEvents, 动作可以在特定的采样时间触发一个事件 (如在合适的时间播放脚步声) 新内容: 角色附属物(attachments) (剑什么的...)...Animation系统的很多bug修正和改进 新内容: AnimDrivenMotion, 以当间动作来同步角色的移动 新内容: 消息批次, 以客户端消息打包的方式彻底解决线程间的通信开销 新方法:...加入"late-binding" 到 ShaderVariableInstance D3D9StreamTextureLoader 和D3D9Texture 从win360 移至d3d9, 因为现在有

    1.7K40

    Java编码规范

    大家好,又见面了,我是全栈君 1. Java 命名约定 除了以下几个特例之外,命名时应始终采用完整的英文描述符。此外,一般应采用小写字母,但类名、接口名以及任何非初始单词的第一个字母要大写。...成员函数注释 对于设置与获取成员函数,在成员变量已有说明的情况下,可以不加注释;普通成员函数要求说明完成什么功能,参数含义是什么返回什么; 普通成员函数内部注释 控制结构,代码做了些什么以及为什么这样做...6) 构造函数 接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。...当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。...如果我们用 String 对象代替 StringBuffer 对象的话,会花费许多不必要的创建和释放对象的 CPU 时间。

    1.3K40

    Java热门框架【SpringBoot】快速入门教程

    SpringBoot作为当下Java开发最常用的技术框架,相信你也一定听过很多次了。 那么到底什么是SpringBoot?SpringBoot又有什么用呢?...1.1 优点 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。...Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。 Spring 3.0引入 了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。...如果是Spring自己封装的启动器的artifact id名字满足:spring-boot-starter-xxxx,如果是第三方公司提供的启动满足:xxxx-spring-boot-starter。...自动配置:Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

    55320

    【React】1738- 请停止在 React 中使用“&&”进行条件渲染

    因此,我们需要知道,&&运算符导致的React UI界面错误。 如何工作? 我们应该用什么代替&&? 1....editors=1010 你会注意到,当 list 是一个空数组时,页面将呈现 0 而不是什么都没有。 我的天哪,这到底是怎么回事? 2.&& 是如何工作的? 这是一个 React 错误吗?...你一定明白为什么上面的 React 例子显示 0 了。 3.我们应该用什么来代替&&? && 运算符很容易出错,我们是否应该放弃使用它呢? 不,我们不应该那样做。...我们可以尝试这3种方式来避免这个问题。 3.1 使用!!list.length 我们可以把数组的长度转成布尔值,就不会再出现这个错误了。 // 1.... : null; 结尾 以上这就是这篇文章的全部内容!如果你觉得有用的话,请点赞我,关注我,你将会阅读到更多的优质文章。 最后,感谢你的阅读。

    1.1K50

    请停止在 React 中使用“&&”进行条件渲染

    因此,我们需要知道,&&运算符导致的React UI界面错误。 如何工作? 我们应该用什么代替&&? 1....editors=1010 你会注意到,当 list 是一个空数组时,页面将呈现 0 而不是什么都没有。 我的天哪,这到底是怎么回事? 2.&& 是如何工作的? 这是一个 React 错误吗?...你一定明白为什么上面的 React 例子显示 0 了。 3.我们应该用什么来代替&&? && 运算符很容易出错,我们是否应该放弃使用它呢? 不,我们不应该那样做。...我们可以尝试这3种方式来避免这个问题。 3.1 使用!!list.length 我们可以把数组的长度转成布尔值,就不会再出现这个错误了。 // 1.... : null; 结尾 以上这就是这篇文章的全部内容!如果你觉得有用的话,请点赞我,关注我,你将会阅读到更多的优质文章。 最后,感谢你的阅读。

    1.2K30

    HGE系列之九 管中窥豹(精灵动画)

    ,主要都是有hgeSprite(精灵)和hgeAnimation(动画)这两个类来完成所需的操作,内部使用的接口也都是hge基类所提供的(具体细节请参看源码实现),基本的原理也并无什么特殊的地方:精灵也便是一张贴图...quad的大小(考虑缩放以及旋转)来获取一个完整包围其尺寸的最小矩形,有点简化的AABB的味道 :) 接着让我们再来看看hgeSprite是如何设置翻转的: void hgeSprite::SetFlip...bYFlip; } } 设置翻转的原理其实非常简单,交换纹理坐标而已 :) 最后让我们来看看hgeSprite是如何来重新设置纹理的: void hgeSprite::SetTexture(HTEXTURE...(HTEXTURE tex) { hgeSprite::SetTexture(tex); orig_width = hge->Texture_GetWidth(tex, true); } // 重新设置使用纹理...bPlaying) return; // 如果是第一次更新,则重新设置经过时间为0 if(fSinceLastFrame == -1.0f) fSinceLastFrame=0.0f; else

    79520

    网管面试题3-windows

    62:磁盘配额的配置只能针对用户账户,而不能针对组账户,是否正确并简要说明理由。 答案:只有NTFS格式的磁盘才可以配置磁盘配额,而且只能针对用户账户来配置磁盘配额,而不能针对组账户。...如果是工作组环境,该用户就应是本地管理员组成员即可 B. 如果是工作组环境,该用户应同时是本地和远程主机上管理员组的成员 C....如果是域环境,用户账户、本地主机和远程主机必须是相同域成员,且用户应具有管理磁盘的权限 D....如果是域环境,用户账户、本地主机和远程主机既可以是相同域成员,也可以是具有信任关系的域成员,且用户应具有管理磁盘的权限 答案:B D。...这里的系统文件夹要区分不同的操作系统,如果是Windows 2000及以前的版本,则系统文件夹名为Winnt,如果是Windows XP及以后版本系统的系统文件夹名为Windows。

    1.7K10

    DirectX 使用 Vortice 从零开始控制台创建 Direct2D1 窗口修改颜色

    而 Vortice 是作为 SharpDx 的一个代替的存在,是从 SharpDx 的基础上,继续开发的一个项目。...,但同时也带来了可以进行底层优化的可能 可以代替 SharpDx 的库,除了 Vortice 之外,还有很多,详细请看 SharpDx 的代替项目 在开始阅读本文之前,我期望读者已了解很多相关的知识,例如...Win32 的概念,以及 DirectX 是什么,和 .NET 框架的基础知识加 C# 的基础语法等知识。...Win32 样式,这个样式的内容没啥固定的,可以根据自己的需求来,也可以乱来,不离谱就好 // 窗口样式,窗口样式含义请执行参阅官方文档,样式只要不离谱,自己随便写,影响不大...什么是交换链?

    1.9K30
    领券