Direct3D VertexBuffer Lock() and Unlock() function

2023-10-27

Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

the IDirect3DVertexBuffer9 has that methods

STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags) PURE
STDMETHOD(Unlock)(THIS) PURE

I don't know the internal implementation of these functions. I do expect next.

  1. The 'Lock' method maps a VertexBuffer's video memory to ppbData. it gains much fater performance.

  2. The 'Lock' method is allocs a system-mem and make ppbData to point it. And the 'UnLock' method is copy that memory to real video memory. this approach by placing a abstraction layer in hardware eliminates differences.

i guess that : in 'D3DPOOL_SYSTEMMEM' mode, it implemented by way 2. in 'D3DPOOL_DEFAULT' mode, it implemented by way 1.

/* Pool types */
typedef enum _D3DPOOL {
    D3DPOOL_DEFAULT                 = 0,
    D3DPOOL_MANAGED                 = 1,
    D3DPOOL_SYSTEMMEM               = 2,
    D3DPOOL_SCRATCH                 = 3,

    D3DPOOL_FORCE_DWORD             = 0x7fffffff
} D3DPOOL;

but i don't know how implemented in every D3DPOOL mode. help me~~

asked  Dec 10 '11 at 19:34
  add comment

1 Answer

In D3DPOOL_DEFAULT, buffer contents are lost when fullscreen device loses focus and device is "lost" (D3DERR_DEVICENOTRESET or D3DERR_DEVICELOST). In this case, data within buffer is expected to be stored in video memory.

In D3DPOOL_MANAGED, a copy of data (that is stored within video memory) is stored in system memory, and as a result driver will restore it when device is lost.

D3DPOOL_SCRATCH is unsupported for vertex buffers.

D3DPOOL_SYSTEMMEM, will not guarantee better performance, because you'll be transferring data - frequently - from system memory to video memory in order to use this vertex buffer. For better performance on buffers that are frequently updated there are dynamic vertex buffers (see D3DUSAGE_DYNAMIC, D3DLOCK_DISACRD, D3DLOCK_NOOVERWRITE), which are located in D3DPOOL_DEFAULT. Also, Direct3D9 documentation says that resources created in system memory are normally not accessible for D3D9 device. For rendering from system memory there are DrawIndexedPrimitiveUP and DrawPrimitiveUP which are bound to cause problems on pure D3D9 device.

Also, there's absolutely no guarantee that either flag makes device work as you think. If common sense tells you it should work this way, but this is not documented in specification, according to Murphy's law, it probably doesn't work the way it should. For all practical purposes, driver implementation could be written by insane lunatic, as long as it conforms to Direct3D specification.

Another thing is that those functions are documented. DirectX SDK comes with several help files - *.chm that can be read on any windows system, .HxI/.HxS that integrate into visual studio, plus there's online help on MSDN, which includes explanation for D3DPOOL. If you're asking questions like this, you haven't done the homework and did not read documentation. So go ahead and read it. If Direct3D9 documentation is no longer included into latest SDK, then simply get older version of it (summer of 2004).

answered  Dec 11 '11 at 0:13
SigTerm
15.4k 1 19 50
  add comment
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Direct3D VertexBuffer Lock() and Unlock() function 的相关文章

  • 码农干货系列【1】--方向包围盒(OBB)碰撞检测

    码农干货系列 1 方向包围盒 OBB 碰撞检测 2012 06 07 11 40 by 当耐特 9251 阅读 20 评论 收藏 编辑 干货 最近一直在删文章 不是要关博洗手什么的 而是被删的文章没有达到 干货 的标准 干货的反义词是水货
  • 使用CopperCube(IrrEdit)创建Irrlicht场景

    使用CopperCube IrrEdit 创建Irrlicht场景 标签 Irrlicht游戏引擎 2013 11 22 19 32 3384人阅读 评论 7 收藏 举报 分类 Irrlicht 13 版权声明 本文为博主原创文章 未经博主
  • D3D资源管理

    摘要 受管贴图 Managed textures 也就是我们通常所谓的 自动管理贴图 在DX6中首次被引入 经过一系列的改进和增强 在DX9中自动管理的资源类型增加到贴图 顶点缓冲 顶点索引缓冲 所有这些资源使用统一的公共接口 通过使用D3
  • 成功编译RenderingPluginExample53的cpp项目的步骤

    备忘 unity中调用d3d功能的示例项目 两个方面的配置 1 为了在项目中能够找到d3d12 h d3d11 h d3d9 h等 做如下操作 在项目属性中 VC 目录 包含目录 中添加 C Program Files x86 Window
  • 高级纹理映射技术(6)

    高级纹理映射技术 6 对一些特殊的应用需要对纹理坐标进行处理 主要包括纹理坐标自动生成和纹理坐标变换 下图显示了纹理坐标的来源 处理过程以及到达光栅处理器的过程 纹理坐标自动生成 在Direct3D程序中 不仅可以在模型载入阶段或渲染阶段指
  • orge工具

    tortoisehg 3 2 1 x64 msi mercurial 3 2 1 x64 msi
  • GLFW初体验

    GLFW初体验 GLFW 很遗憾 没有找到FW的确切含义 Wiki上没有 GLFW主页也没有 猜测F表示for W表示Window GLFW是干啥用的 一个轻量级的 开源的 跨平台的library 支持OpenGL及OpenGL ES 用来
  • fvf采用另外一种方式渲染

    if FAILED hr getActiveD3D9Device gt SetVertexDeclaration d3ddecl gt getD3DVertexDeclaration getGlobalInstanceVertexBuffe
  • 使用GDI/GDI+绘制到D3D9缓冲区的方法

    这个其实是3D绘图里嵌入2D绘图的传统方式 D3D9直接使用GDI GDI 就可以画图 只不过需要额外的设置 而且只支持RGB和XRGB 不支持ARGB 因此这种方法比较适合合成UI元素和不透明的纹理贴图 不适合将要进行AlphaBlend
  • 游戏中的“垂直同步”与“三重缓冲”究竟是个啥?

    从今天开始 我们会开启 小教程 的兄弟栏目 小科普 给大家介绍在配电脑或玩游戏过程中经常会遇到的专业名词 第一期 小科普 我们来讲讲游戏中经常会遇到的一个画面选项 垂直同步 我们曾在一期语音里和大家讲探讨过垂直同步的功用 可惜语音有 60
  • 深入理解Direct3D9

    String Of Brilliant Blue QQ群 8082814 随笔 34 文章 32 评论 136 博客园 首页 新随笔 联系 管理 深入理解Direct3D9 深入理解D3D9对图形程序员来说意义重大 我把以前的一些学习笔记都
  • 关于visual studio中的$(ConfigurationName)疑问

    关于visual studio中的 ConfigurationName 疑问 2012 12 02 16 09 15 转载 标签 it 分类 程序员之路 关于vs中的各种路径的值de查看方法 来源 http social msdn micr
  • 垂直同步到底要不要开?老司机教你G-Sync显示器的正确打开姿势

    一直以来我们都认为PC的画面效果取决于显卡 认为游戏的FPS值越高代表游戏越流畅 但实际上 显示器也是决定游戏帧数的重要一环 显卡将画面渲染并输出到显示器中 显示器接收GPU的信号并输出 然而 因为显卡性能和运行程序的差异 显卡一般无法以恒
  • Texture::getSourceFileType()

    Texture getSourceFileType
  • mesa 教程

    只有这个是靠谱的 Compiling and Installing The Mesa 3D Graphics Library latest documentation
  • 三维旋转:旋转矩阵,欧拉角,四元数

    在介绍下面的文章前 大家如果接触到欧拉角的话 就一定要关注一个词 要顺规 在欧拉角体系里面 有12种顺规 这一点是好多文章没有让读书意识到 导致后面学习图形学里面的 heading pitch bank 时对不上号 一般百度百科里面说到的
  • 介绍D3DPOOL和Lock

    介绍D3DPOOL和Lock 分类 DirectX 2013 02 28 00 21 322人阅读 评论 0 收藏 举报 D3D RUTIME的内存类型 分为3种 VIDEO MEMORY VM AGP MEMORY AM 和SYSTEM
  • Ogre引擎源码——资源之Skeleton

    Ogre引擎源码 资源之Skeleton 分类 OGRE 游戏开发 引擎开发 图形引擎 游戏引擎 2012 09 21 06 17 1231人阅读 评论 0 收藏 举报 引擎 animation vector binding pointer
  • 【引用】四元组与旋转矩阵

    引用 四元组与旋转矩阵 2011 09 22 17 13 39 分类 DirectX资料 举报 字号 订阅 下载LOFTER客户端 本文转载自ericyang1231 四元组与旋转矩阵 在3D程序中 通常用quaternion来计算3D物体
  • OpenGL图形管线和坐标变换

    1 OpenGL 渲染管线 OpenGL渲染管线分为两大部分 模型观测变换 ModelView Transformation 和投影变换 Projection Transformation 做个比喻 计算机图形开发就像我们照相一样 目的就是

随机推荐

  • 随机生成验证码(Java实现)

    需求 定义方法实现随机产生一个5位的验证码 每位可能是数字 大写字母 小写字母 分析 定义一个方法 生成验证码返回 方法参数是位数 方法的返回值类型是String 在方法内部使用for循环生成指定位数的随机字符 并连接起来 把连接好的随机字
  • 选项式api V/S 组合式api

    Options 选项式api 特点 多个选项的对象来描述组件的逻辑 例如data选项写数据 methods选项写函数 一个功能逻辑的代码分散 选项所定义的属性都会暴露在函数内部的 this 上 它会指向当前的组件实例 优点 易于学习和使用
  • selenium的安装和下载谷歌浏览器镜像驱动

    selenium安装 Selenium是一个用于web自动化测试的框架 在使用Ajax请求数据的页面中 会出现 sign token等密钥 如果考虑去破解可能花费的精力较多 所以考虑借助使用Selenium框架来实现数据爬取 如果没安装se
  • tensorflow学习率控制及调试

    在深度学习中 学习率变化对模型收敛的结果影响很大 因此很多时候都需要控制学习率的变化 本文以tensorflow实现learning rate test为例 讲述学习率变化控制的方法 以及怎么调试 一 learning rate test
  • ThreadLocal使用

    1 简介 ThreadLocal类用来提供线程内部的局部变量 不同的线程之间不会相互干扰 这种变量在多线程环境下访问 通过get和set方法访问 时能保证各个线程的变量相对独立于其他线程内的变量 在线程的生命周期内起作用 可以减少同一个线程
  • HCIA/HCIP使用eNSP模拟OSPF综合应用场景(虚链路 特殊区域 认证 引入外部路由)

    OSPF综合应用场景 配套实验拓扑 OSPF Comprehensive Application Experiment topo 目录 OSPF综合应用场景 拓扑预览 一 基础配置 1 配置R1 2 配置R2 3 配置R3 4 配置R4 5
  • asp.net ajax 参数,ASP.NET jquery ajax传递参数

    第一种 GET传递 前台 ajax GET 传递 即在请求的地址后面加上参数 URL地址长度有显示 安全性低 后台接收 Request QueryString 参数名字 例如 function LoadBar id var project
  • 烂大街的TCP/IP网络模型,你真的懂了?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 面试真题 二 面试官心理分析 三 面试题剖析 一 面试真题 你能聊聊TCP IP 的四层网络模型和 OSI 七层网络模型吗 二 面试官心理分析 为啥要问这个
  • 微信支付二维码native原生支付开发模式一

    开发前 商户必须在公众平台后台设置支付回调URL URL实现的功能 接收用户扫码后微信支付系统回调的productid和openid URL设置详见回调地址设置 1 业务流程时序图 图6 8 原生支付接口模式一时序图 业务流程说明 1 商户
  • 关于JAVA 并发类的Executor误用导致的线程数量异常

    近期在项目中 在方法中局部使用 Executor创建固定线程 没有按照要求在局部用完之后进行shutdown操作 导致每次方法调用都会生成一个线程池 由于固定线程池在生成线程之后 不会自动回收 一致处于 run 状态等待任务的到达 因此导致
  • Qt Creator 无效构建套件(Kits)的清除以及恢复默认设置

    Qt Creator 无效构建套件 Kits 的清除以及恢复默认设置 在使用在Qt Creator 开发过程中 有时候由于配置的原因出现了很多无效的构建套件 Kits 在创建项目也会列出来 因此想清理掉这些的无效的Kit 再有就是将Qt的配
  • Serializable接口解读

    Serializable 接口 作为 Java 中那些绕不开的内置接口 Serializable这个接口的全限定名 包名 接口名 是 java io Serializable 这里给大家说个小技巧 当你看到一个类或者接口的包名前缀里包含ja
  • Eclipse如何打开debug变量窗口

    今天笔者在使用Eclipse调试的时候 发现没有变量 Variables 监视窗口 真是头痛得很 最后摸索出一套显示变量窗口的操作如下 点击other 找到Variables并点击 最后调试代码 调试后如图所示 点击Java 最后可以显示出
  • WDK获得U盘的序列号

    一 获得U盘的逻辑序列号 重点函数 FltQueryVolumeInformation 查询卷实例的信息 可查询的类型如下 typedef enum FSINFOCLASS FileFsVolumeInformation 1 FileFsL
  • 老板现在喊我大哥,原因是我用阿里分布式事务框架Seata解决了长久以来困扰公司的分布式事务问题

    大家好 我是曹尼玛 从大学毕业5年 一直努力学习 努力工作 追求新技术 不保守 上个月我来到一家新公司上班 月薪20K 这家公司老板人很好 对员工很关爱 公司氛围不错 同事们也努力把公司项目搞搞好 除了那个混日子的10年开发经验的老王 老板
  • virtual memory exhausted: Cannot allocate memory

    编译llvm的时候出现了这个问题 原因是用了太多线程去编译 内存不够了 把 make j 改成 make j32
  • 小白简易安装MySQL数据库

    安装MySQL 一 下载地址 注意 请下载zip版 尽量不要下载exe版 方便后续卸载 https cdn mysql com Downloads MySQL 5 7 mysql 5 7 29 winx64 zip 二 操作步骤 下载后解压
  • css3 --- 实现动画线条运动效果实例集合

    CSS3实现动画线条运动效果实例集合 一 laoyuan 2016 12 20 标签 css3 阅读 5 157 在我们日常的开发中 有时候有的图片 布局块需要加一下边框运动效果 对于这些效果 我们可以使用CSS3动画属性animation
  • MySQL进阶

    无知的我正在复习MySQL进阶知识 笔记特点是 我重新整理了涉及资料的一些语言描述 排版 而使用了自己比较容易理解的描述 同样是回答了一些常见关键问题 如果有遇到有任何无法进展问题或者疑惑的地方 应该在讨论区留言 或者 其他途径以寻求及时的
  • Direct3D VertexBuffer Lock() and Unlock() function

    Stack Overflow is a question and answer site for professional and enthusiast programmers It s 100 free no registration r