最近被DrawIndexedPrimitiveUP这个函数搞崩了好几次,甚至连显卡的Blue Screen Of Death也出来凑热闹了,所以需要总结一下它崩溃的可能原因,理清下头绪:
1.与OpenGL的glXXXPointer一样,如果指针内存错误,崩溃是肯定的,这种bug比较好找.
DirectX的原因更复杂:
2.DrawIndexedPrimitiveUP不直接崩溃,而是在Present的时候崩溃.可能SetIndices的索引缓冲指针是野指针,LPDIRECT3DVERTEXDECLARATION9是野指针.

解决方法:使用Debug Runtime排除所有异常调用,这对显卡驱动程序蓝屏崩溃或异常现象的调试十分有效,如:
Direct3D9: Decl Validator: X249: (Element Error) (Decl Element [5]) Declaration can't map to fixed function FVF because blendweight must use D3DDECLTYPE_FLOAT1/2/3/4.
Direct3D9: (ERROR) :DrawIndexedPrimitive failed.

3.又发现一种DrawIndexedPrimitiveUP错误,当错误地把索引个数作为第2个参数传入(实际上第2个参数应该是顶点个数), 导致程序在运行一段不定时间,随机地,可能地,花屏了.此时DX8报告一个驱动程序的错误:
Direct3D8: (ERROR) :Driver not handled in DrawPrimitives2
Direct3D8: (ERROR) :Driver returned error: DDERR_INVALIDPARAMS  
Direct3D8: (ERROR) :Driver failed command batch. Attempting to reset device state. The device may now be in an unstable state and the application may experience an access violation.

另:在试图安装现在的DirectX Debug Runtime时发现先前网上的资料或MSDN里都没谈到现在的安装方法:把Developer Runtime\x86里的dll复制到System32目录,然后再运行Utilities\Bin\x86\dxcpl.exe切换到Debug Rumtime模式.运行REF模式需要Debug Runtime环境!

Reference:
http://linghuye.googlepages.com/MyownlittleDirectXFAQ.mht

转载于:https://www.cnblogs.com/lancidie/archive/2011/04/19/2021037.html

DrawIndexedPrimitiveUP这个函数相关推荐

  1. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  2. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  3. C++ 笔记(34)— C++ exit 函数

    当遇到 main 函数中的 return 语句时,C++ 程序将停止执行.但其他函数结束时,程序并不会停止.程序的控制将返回到函数调用之后的位置.然而,有时候会出现一些非常少见的情况,使得程序有必要在 ...

  4. C++ 笔记(30)— 友元函数与友元类

    我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...

  5. 浅显易懂 Makefile 入门 (07)— 其它函数(foreach 、if、call、origin )

    1. foreach 函数 foreach 函数定义如下: $(foreach <var>,<list>,<text>) 函数的功能是:把参数 <list&g ...

  6. 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)

    编写 Makefile 的时候,很多情况下需要对文件名进行操作.例如获取文件的路径,去除文件的路径,取出文件前缀或后缀等等. 注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待. 1 ...

  7. Go 学习笔记(65)— Go 中函数参数是传值还是传引用

    Go 语言中,函数参数传递采用是值传递的方式.所谓"值传递",就是将实际参数在内存中的表示逐位拷贝到形式参数中.对于像整型.数组.结构体这类类型,它们的内存表示就是它们自身的数据内 ...

  8. Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法

    函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...

  9. C++ 笔记(26)— 主函数 main(int argc, char *argv[]) 参数说明

    带形参的 main 函数,如 int main( int argc, char* argv[], char **env ) 是 UNIX .Linux 以及 Mac OS 操作系统中 C/C++ 的 ...

最新文章

  1. spring cloud gateway之服务注册与发现
  2. C++中的接口(抽象类)
  3. TensorFlow高效读取数据的方法
  4. 矿用巷道巡检机器人_一种井下自动巡检机器人系统
  5. 在线python编程编译器-编译器python
  6. 直播预约 | 揭秘微信支付背后的数据库技术
  7. Asp程序做页面的301跳转,使得cnasda.com跳转到www.cnasda.com
  8. win10英雄联盟登录服务器未响应,win10系统英雄联盟登陆不上的解决方法
  9. java 两个字段排序_如何在Java中按两个字段排序?
  10. 【UML】交互建模中交互图允许的消息类型
  11. oppor15android10怎么降级,OPPO R9S7.1系统怎么降回6.0版本 OPPO R9S7.1系统降级教程
  12. 转使用chrome命令行:disable
  13. 关于TypeError: e[h] is not a function的问题
  14. u盘里的视频文件损坏了怎么修复?
  15. 机器学习——概念理解之IoU
  16. 自从用了低代码开发,开发效率提升10倍
  17. 如何用ChatGPT做会议总结?
  18. 惠民“大数据”强化共享发展
  19. 职业解读 | 如何成为一名SQL开发人员
  20. Android多点触控之ZoomImageView完全解析

热门文章

  1. 在线黑客帝国文字效果生成工具
  2. java 基础之图片的多线程处理和大文件的多线程拷贝
  3. 编译安装httpd,并启动之
  4. 金笛JDMail邮件系统从源头上为企业铸造防lj邮件墙--4
  5. 二分图最大匹配 - 匈牙利算法
  6. 函数适配器:bind2nd
  7. 华为鸿蒙os什么时候发布,鸿蒙OS将于今天发布
  8. 【免费毕设】asp.net FTP客户端设计与开发 (源代码+lunwen)
  9. 计算机毕业设计中java多线程与异常处理
  10. 【毕业设计】基于PHP的网上书店的设计(论文)