效果:优化前 10-15%左右  优化后 0%-2% 观察没超过3
[ 破解过程 ]-----------------------------------------
 
  看到论坛上有人在问D3D游戏CPU占用问题,自己晚上抽空学习了一下
典型的D3D程序渲染过程如下
 
 
//-----------------------------------------------------------------------------
// Desc: 渲染图形
//-----------------------------------------------------------------------------
VOID Render()
{
//清空后台缓冲区
     g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0 );
 
//开始在后台缓冲区绘制图形
     if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
     {
   //设置世界矩阵
         SetupWorldMatrice();
 
   //在后台缓冲区绘制图形
         g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
         g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
         g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2*50-2 );
 
   //结束在后台缓冲区渲染图形
         g_pd3dDevice->EndScene();
     }
 
//将在后台缓冲区绘制的图形提交到前台缓冲区显示
     g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
 
研究后发现
SetStreamSource
EndScene
此二函数消耗CPU较多 做法也很简单 直接 NOP 不掉这俩函数 不让调就行了
比较极端,这样子的坏处就是游戏界面显示不了了..见附图
 
具体分析过程
 
 
 
  先断 D3D.Present 然后
SHIFT+F9向上找(这个过程比较漫长,我的方法比较笨,一层一层的试,把每一层调用NOP掉,找这样子的
层,NOP掉后黑屏,并且不掉线,并且越上层越好,因为越上层NOP 那么省掉的运算就越少,效果也越好..)
 
 
 
 
我定位出来是在这个一层
0079751E      E8 AD2DFBFF    call    0074A2D0
                  这里是 SetStreamSource 已经被我NOP掉了
00797523      90             nop   
00797524      90             nop
00797525      90             nop
00797526      90             nop
00797527      90             nop
00797528      8BF8           mov     edi, eax
0079752A      33F6           xor     esi, esi
0079752C      85FF           test    edi, edi
0079752E      74 10          je      short 00797540
00797530      E8 7B4B2200    call    009BC0B0
00797535   .  6A 01          push    1
00797537   .  8BC8           mov     ecx, eax
00797539   .  E8 32412C00    call    00A5B670
0079753E   .  8BF0           mov     esi, eax
00797540   >  E8 6B502200    call    009BC5B0
00797545   .  8BC8           mov     ecx, eax
00797547   .  E8 74512200    call    009BC6C0
0079754C   .  57             push    edi
              这里应该是 EndScene 也已经被NOP掉
0079754D      90             nop   
0079754E      90             nop
0079754F      90             nop
00797550      90             nop
00797551      90             nop
00797552   .  83C4 04        add     esp, 4
00797555   .  E8 56502200    call    009BC5B0
0079755A   .  8BC8           mov     ecx, eax
0079755C   .  E8 2F522200    call    009BC790
00797561   .  85F6           test    esi, esi
00797563   .  C705 A86AC400 >mov     dword ptr [C46AA8], 0
0079756D   .  74 2A          je      short 00797599
0079756F   .  E8 3C4B2200    call    009BC0B0
00797574   .  6A 01          push    1                                 
00797576   .  8BC8           mov     ecx, eax                          
00797578   .  E8 A34C2200    call    009BC220                          
0079757D   .  E8 2E4B2200    call    009BC0B0
00797582   .  6A F4          push    -0C                                
00797584   .  6A 01          push    1                                  
00797586   .  68 00006040    push    40600000                          
0079758B   .  6A 00          push    0                                 
0079758D   .  68 00008040    push    40800000                          
00797592   .  8BC8           mov     ecx, eax                           
00797594   .  E8 474D2200    call    009BC2E0                          
00797599      85FF           test    edi, edi
0079759B    ^ 0F84 8BE4FFFF  je      00795A2C
007975A1      C645 FC 1F     mov     byte ptr [ebp-4], 1F
007975A5   .  E8 86001100    call    008A7630
007975AA   .  8B10           mov     edx, dword ptr [eax]
007975AC   .  8BC8           mov     ecx, eax
007975AE   .  FF92 18010000  call    dword ptr [edx+118]
007975B4   .  85C0           test    eax, eax
007975B6   .  74 0F          je      short 007975C7
007975B8   .  E8 636EF9FF    call    0072E420
007975BD   .  8B10           mov     edx, dword ptr [eax]
007975BF   .  8BC8           mov     ecx, eax
007975C1   .  FF92 9C000000  call    dword ptr [edx+9C]
007975C7   >  E8 A4222200    call    009B9870
007975CC   .  8BC8           mov     ecx, eax
007975CE   .  E8 AD242200    call    009B9A80
007975D3   .  E8 C85E2200    call    009BD4A0
007975D8   .  8B10           mov     edx, dword ptr [eax]
007975DA   .  8BC8           mov     ecx, eax
007975DC   .  FF52 40        call    dword ptr [edx+40]
007975DF   .  B9 50EFC700    mov     ecx, 00C7EF50
007975E4   .  E8 E7621700    call    0090D8D0
007975E9   .  E8 42001100    call    008A7630
007975EE   .  8B10           mov     edx, dword ptr [eax]
007975F0   .  8BC8           mov     ecx, eax
 
 
看起来很简单 实际上真正动手做的时候还是有点麻烦,需要耐心

小试DirectX游戏CPU优化相关推荐

  1. Unity移动端游戏性能优化简谱之 以引擎模块为划分的CPU耗时调优

    <Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...

  2. 游戏开发43课 移动游戏性能优化1

    1. 前言 很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章. 涉及到具体优化技巧时,博主会尽量阐述原理和依据,让读者知其然也知其所以然.要完全读懂这 ...

  3. 移动游戏性能优化建议与字体剥离精简工具

    / 在 Unity 中制作游戏时对动态字体的剥离和精简是现在常用的手段,现在有两篇博客是大家阅读和参照较多的,分别是 如何精简Unity中使用的字体文件 和 FontPruner 字体精简工具.他们各 ...

  4. 移动游戏性能优化通用技法

    1. 前言 很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章. 涉及到具体优化技巧时,我会尽量阐述原理和依据,让读者知其然也知其所以然. 要完全读懂这 ...

  5. 游戏性能优化技术干货分享——内存管理

    项目的性能优化主要围绕CPU.GPU和内存三大方面进行.接上期CPU优化专讲,我们本期和大家分享内存方面的优化心得. 无论是游戏还是VR应用,内存管理都是其研发阶段的重中之重. 然而,在我们测评过的大 ...

  6. UE4制作多人大地型游戏的优化

    摘自https://gameinstitute.qq.com/course/detail/10131 8月11日,由腾讯游戏学院举办的第二届腾讯游戏开发者大会(TGDC)在深圳举行.大会技术论坛中,E ...

  7. 极光会客厅:大型H5游戏如何登陆微信小游戏及游戏性能优化分享

    上周末,由极光网络主办的首期"极光会客厅"正式开门迎客.在本次的"2D小游戏开发实战技术沙龙"上,极光网络客户端主程陈策以及极光网络项目总监陈源向一众与会者分享 ...

  8. unity 转微信小游戏 资源优化

    资源优化 可通过转换工具配套提供的资源优化工具,将游戏内纹理资源针对webgl导出做优化. 工具入口 菜单栏-微信小游戏-资源优化工具 工具介绍 Texture 区域1: 选中目录,以设定规则扫描目录 ...

  9. LayaBox H5游戏性能优化

    对于游戏开发避免不了性能相关优化,小编总结了如下: 一.内存优化(如:代码不规范,初始化定义的变量,销毁时未及时清理会存在内存中) 1.对象池优化,LayaAir引擎中的对象池:laya.utils. ...

最新文章

  1. npm获取配置,设置代理
  2. jQuery选择器和选取方法 http://www.cnblogs.com/MaxIE/p/4078869.html
  3. 并行算法 Parallel Algorithm -- 提高执行效率
  4. node 获取mysql数据类型,node连接mysql获取数据
  5. bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会 -- Tarjan
  6. IMP-00009:异常结束导出文件解决方案
  7. (26)System Verilog范围随机函数约束类内变量
  8. cuBLAS矩阵乘法性能分析(附代码示例)
  9. 深入理解事件(event)与委托(delegate)
  10. 对接微信支付服务商后商户能得到哪些服务?
  11. 微信小程序双击底部导航栏刷新页面
  12. Base16,Base32,Base64编码的介绍
  13. mysql date的写法_mysql 对日期的写法 mybatis
  14. 卡尔曼滤波/粒子滤波融合定位模拟器
  15. 怎么给图片添加水印?教你一个图片加水印小妙招
  16. 傅里叶变换音频可视化_音频可视化中的信号处理方案
  17. Idea生成英文JavaDoc以及中文编码问题
  18. linux右键没有创建新文件夹,将新建文档添加回Ubuntu 18.04中的右键菜单
  19. ROS系统与开源社区介绍
  20. 手把手教你设计一个通用BootLoader

热门文章

  1. day2和day3随堂笔记
  2. 人工智能泡妞第一步 · 了解学科
  3. java根据日期判断星座_给定公历日期计算12星座(Java代码实现)
  4. 用Python做个美少女大战小怪兽
  5. 视频教程-C语言项目开发系列视频课程-C/C++
  6. 湖南大学计算机考研群2021,湖南大学2021年硕士研究生拟录取名单公示
  7. android的适配器作用,适配器模式安卓中的应用
  8. 在服务器上跑 Java Selenium 的教程
  9. 【leetcode】771. 宝石与石头 (简单)
  10. 【Numpy】多维度切片截取