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 的相关文章

  • D3D中的三种Buffer

    在D3D中 针对视窗有三种Buffer 它们分别是 Color Buffer Depth Buffer和Stencil Buffer Color Buffer在D3D中又称为Render Target 意思是最后着色的目标Buffer 就是
  • 使用CopperCube(IrrEdit)创建Irrlicht场景

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

    一般可以先用d3d做地形的mesh 比如做一个100 100的网格 然后用photoshop做高度图 然后再程序里读取高度图数据 让mesh的每个顶点对应一个高度 http download csdn net source 855296 这
  • D3D资源管理

    摘要 受管贴图 Managed textures 也就是我们通常所谓的 自动管理贴图 在DX6中首次被引入 经过一系列的改进和增强 在DX9中自动管理的资源类型增加到贴图 顶点缓冲 顶点索引缓冲 所有这些资源使用统一的公共接口 通过使用D3
  • 高级纹理映射技术(6)

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

    tortoisehg 3 2 1 x64 msi mercurial 3 2 1 x64 msi
  • win10 graphedit存储的路径

    如果安装郭windows SDK的话 可能的存储位置为C Program Files x86 Windows Kits 10 bin x86 C Program Files x86 Windows Kits 10 bin x64
  • 开源游戏引擎介绍

    2D Allegro cc Main http www allegro cc 老牌子了 和SDL同时是很经典两个EG开发组件 最近貌似在和PY进行联合 ClanLib ClanLib Game SDK http www clanlib or
  • Ogre:Hardwarebuffer

    Ogre Hardwarebuffer 分类 OGRE 2012 07 03 15 56 1097人阅读 评论 0 收藏 举报 buffer float byte 存储 图形 upload Ogre中的硬件缓存是指在显卡上的存储 这和在内存
  • 游戏中的“垂直同步”与“三重缓冲”究竟是个啥?

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

    D3D9Texture loadNormTex D3D9Texture loadImpl
  • 深入理解Direct3D9

    String Of Brilliant Blue QQ群 8082814 随笔 34 文章 32 评论 136 博客园 首页 新随笔 联系 管理 深入理解Direct3D9 深入理解D3D9对图形程序员来说意义重大 我把以前的一些学习笔记都
  • 欧拉角与四元数

    以下文章摘自wiki百科 对于在三维空间里的一个参考系 任何坐标系的取向 都可以用三个欧拉角来表现 参考系又称为全局坐标系 是静止不动的 而局部坐标系则固定于刚体 随着刚体的旋转而旋转 参閲右图 设定 x y z轴为全局坐标系的参考轴 称
  • cocos2d-x 卡牌翻牌效果的实现

    cocos2d x 卡牌翻牌效果的实现 2012年07月25日 综合 共 3085字 字号 小 中 大 评论关闭 猴子原创 欢迎转载 转载请注明 转载自Cocos2D开发网 Cocos2Dev com 谢谢 原文地址 http www co
  • 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
  • OpenGL图形管线和坐标变换

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

    opengl 学习 lt 二 gt 在学习opengl过程中 我是用了 交互式的计算机图形学 自顶向下的分析 这本书着实不错 是一本理论兼opengl实践的图形学教程 在学习上 我总会是杂乱无章的学 为什么呢 我一般是在需要某个理论的时候才

随机推荐

  • 随机生成验证码(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