d3d

内存对齐还是需要重视的——XMMATRIX 为例

和自甴很熟 提交于 2019-12-09 19:36:41
最近研究 D3D,搜了一个教材跟着学: http://www.rastertek.com/dx11s2tut04.html 用 x64 的配置运行,完美,过了几天需要用 x86 测试,结果一运行,程序崩溃…… 赶紧排查问题,x64 的 Debug、Release 都是可以的,而 x86 则是 Debug 可以,Release 才会崩。 开发环境是 VS2015,编译时曾经遇到一些错误和警告,是 UMU 自己消灭掉了,最后有一类警告应该是关键: warning C4316: 'SystemClass': object allocated on the heap may not be aligned 16 原因是 XMMATRIX 需要 16 字节对齐,但代码的作者把它塞在几个类里,然后去 new 这些类了…… 尝试把这些类从 heap 改为 stack,问题解决! 八哥太多,不能轻易放任警告! 来源: oschina 链接: https://my.oschina.net/u/725292/blog/1553339

FPS 游戏实现D3D透视

匿名 (未验证) 提交于 2019-12-03 00:14:01
FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视,本教程将学习D3D透视的实现原理,并通过DLL注入的方式实现透视。 Direct3D 透视是一种主流的透视方式,因为现如今大部分游戏都会使用Dx9图形接口,那么我们该如何实现D3D透视? 在D3D中普遍会使用深度缓存区(Depth Buffer)来进行消隐处理,通过使用Z轴深度缓存即可实现将人物实体被遮挡的部分不被显示出来,而我们的目的就是要让它强制显示出来,D3D的核心功能主要集成在COM组件中,只要Hook其中EndScence(), DrawPrimitive(),DrawIndexedPrimitive()函数就可以感知绘图操作,然后通过调用SetRenderState()渲染函数,改变其中的渲染参数即可实现不同的透视效果. 如上概述可知:我们需要找到 DrawIndexedPrimitive 这个渲染函数并 hook 这个函数即可实现透视,但需要注意,该函数与普通的API函数不一样,由于DirectX的功能都是以COM组件的形式提供的类函数,所以普通的Hook无法搞它,我这里直接找到了函数地址直接hook,或者你也可以使用Detour库,利用Detour也可以HOOK

海康大华网络摄像头高起播低延时RTSP网页无插件流媒体专用播放器EasyPlayer-RTSP之GDI和D3D两种视频渲染方式的区别介绍

亡梦爱人 提交于 2019-12-01 23:12:08
EasyPlayer是一个RTSP专属的流媒体播放器,在GitHub上开源大部分源码其主要功能有播放、抓图、录制视频、实时静音/取消静音。 GDI和D3D两种视频渲染方式的区别 EasyPlayer-RTSP windows播放器支持D3D和GDI两种渲染方式。 D3D支持格式如下: DISPLAY_FORMAT_YV12 DISPLAY_FORMAT_YUY2 DISPLAY_FORMAT_UYVY DISPLAY_FORMAT_A8R8G8B8 DISPLAY_FORMAT_X8R8G8B8 DISPLAY_FORMAT_RGB565 DISPLAY_FORMAT_RGB555 GDI支持格式如下: DISPLAY_FORMAT_RGB24_GDI GDI渲染方式则是我们熟知的采用GDI进行图像绘制,其优势就是通用性强,只要是目前常用的windows操作系统基本上都支持;其劣势就是效率比较低下,也只支持RGB24一种色彩格式显示; D3D渲染方式则刚好相反,其优势就是效率比较高,支持多种色彩格式进行渲染;劣势就是通用性较差,windows系统必须要支持D3D才可以使用,需要一定的硬件支撑。 GDI渲染格式界面选择如下: D3D渲染格式界面选择如下: 从界面上可以看出GDI方式的OSD字幕叠加比D3D方式有明显的区别

FPS 游戏实现D3D透视

北城以北 提交于 2019-12-01 07:49:48
FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视,本教程将学习D3D透视的实现原理,并编通过DLL注入的方式实现透视。 Direct3D 透视是一种主流的透视方式,因为现如今大部分游戏都会使用Dx9图形接口,那么我们该如何实现D3D透视? 在D3D中普遍会使用深度缓存区(Depth Buffer)来进行消隐处理,通过使用Z轴深度缓存即可实现将人物实体被遮挡的部分不被显示出来,而我们的目的就是要让它强制显示出来,D3D的核心功能主要集成在COM组件中,只要Hook其中EndScence(), DrawPrimitive(),DrawIndexedPrimitive()函数就可以感知绘图操作,然后通过调用SetRenderState()渲染函数,改变其中的渲染参数即可实现不同的透视效果. 如上概述可知:我们需要找到 DrawIndexedPrimitive 这个渲染函数并 hook 这个函数即可实现透视,但需要注意,该函数与普通的API函数不一样,由于DirectX的功能都是以COM组件的形式提供的类函数,所以普通的Hook无法搞它,我这里直接找到了函数地址直接hook,或者你也可以使用Detour库,利用Detour也可以HOOK

[译]Windows 中的 2D 绘图 API

走远了吗. 提交于 2019-11-26 21:43:05
原文链接 : 2D Drawing APIs in Windows 背景知识 : Windows 图形编程 在 Windows 7 操作系统中,微软花费了很大的力气构建了一套新的 2D 绘图 API。我们称之为 Direct2D ,隶属于 DirectX 家族。这个 API 的开发填补了 Windows 图形平台的一些缺陷。其中非常重要的一点就是普通的 2D 程序渲染不再缺乏硬件加速。而在 Windows Vista 中,我们知道 GDI 是无法进行硬件加速的。微软寄望于开发的这个 API 具备很多现代特性。比如支持抗锯齿和 Alpha Blend 的 2D 渲染,和其它现代图形 API 交互,服务器端渲染,诸如此类。 为了方便理解微软为何开发 Direct2D ,我们先来回顾一下当初开发 Windows 时的历史。最初的渲染系统叫做 GDI (图形设备接口),今天仍然存在。它最初为 16 位 Windows 写就,随后升级到 32 位 Windows (Windows 95 和 Windows NT)。因为 GDI 是为很久以前那些计算能力低下的计算机而开发的,所以它并没有诸如抗锯齿之类的特性,大多数 API 亦不支持 Alpha 通道。 在 Windows 95 期间,DirectX 发布了第一版。DirectDraw 是其中最早的组件之一。当初的本意是在硬件加速启用的情况下