DirectX lock 与 unlock?

DSound音频播放 DSound是directx中的用来处理声音特性的一部分,播放音频需要准备的工作其实和waveout也是差不多啊,创建directxobject也就是创建一个LPDIRECTSOUND,这个结构的定义可以参考dsound.h头文件,接着需要一个声音的描述WAVEFORMATEX,这个声音的描述其实在DSound中是位于buffer里面的,DSound对WAVEFORMATEX进行了封装,具体可以参 阅读详情
今天看了DirectX SDK中的代码,有一个的方让我疑惑了半天:

VOID* pVertices;

if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (BYTE**)&pVertices, 0 ) ) )

    return E_FAIL;

memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );

g_pVB->Unlock();

一个将定点数据靠被到定点缓冲区的过程,为什么一定要进行一个Lock和Unluck呢?我们调用memcpy的意图是将定点数据copy到显存中去,SDK的解释是:This mechanism of locking and unlocking is required because the vertex buffer may be in device memory.也就是说定点缓冲去有可能是在物理内存而不是显卡显存中的.这样问题就来了.物理内存中存在着一个多线程的问题,就好像Double lock checking模式一样,显示的数据随时有可能被修改,而这有是绝对不允许的.

 CreateVertexBuffer 的头两个参数告诉 Direct3D 新顶点缓冲区预计的大小和用法。紧跟的两个参数指定新缓冲区的矢量格式及存储位置。这里的向量格式是 D3DFVF_CUSTOMVERTEX,就是例程先前定义的 FVF 值。D3DPOOL_DEFAULT 标记告诉 Direct3D 在最合适的位置创建此顶点缓冲区。最后一个参数返回创建完成的顶点缓冲区对象地址.
C# WinForms/WPF集成DirectX三维渲染控件:从架构到性能优化 在C#桌面应用开发中,当需要实现复杂的三维数据可视化时,传统的GDI+往往难以满足性能与交互需求。DirectX作为Windows平台原生的图形API,提供了底层硬件加速能力,是实现高性能3D渲染的关键技术。通过托管封装库(如Managed DirectX或SharpDX),开发者可以在.NET生态中调用DirectX接口,构建可深度集成的三维显示组件。这种技术方案特别适用于工业软件、上位机监控、GIS地形展示等需要实时交互与复杂模型渲染的应用场景。本文以Managed DirectX为基础,详细解析了三维 阅读详情

相关推荐

扬声器设计避坑指南:用Comsol分析反电动势对THD的影响(附案例文件)

本文深入探讨了扬声器设计中反电动势对总谐波失真的关键影响。通过COMSOL仿真,详细分析了BL值非线性、音圈电感变化等电磁-力-声耦合机制,并提供了从参数化建模到系统级优化的实战指南,帮助工程师精准量化并降低谐波失真,提升扬声器音质。

xx56789的博客 521

D3DLOCK详解

一个或者多个组合的锁定选项,用来描述资源锁定类型的表现。 D3DLOCK_DISCARD: 使用方式会强制为:D3DUSAGE_DYNAMIC。 应用程序将会丢弃锁定区域内的所有内存。对于顶点和索引缓存,整个缓存都会被丢弃。这个选项只有对用 D3DUSAGE_DYNAMIC使用方式创建的资源是合法的。   D3DLOCK_DONOTWAIT: 当显卡驱动没有能够马上锁定表面的时候,允

自由理想的足迹 4352

基于IMU的纯惯性导航轨迹绘制实践与优化

本文深入探讨了基于IMU的纯惯性导航轨迹绘制实践。通过修改开源组合导航算法KF-GINS,屏蔽GPS更新并简化地球参数,实现了仅依赖IMU数据的轨迹解算。文章详细介绍了代码改造、轨迹可视化方法,并分析了误差累积的根本原因,为深入理解惯性导航原理与传感器融合的必要性提供了宝贵的实践经验。

ff678的博客 395

深入Lock锁底层原理实现,手写一个可重入锁

点击上方"IT牧场",选择"设为星标"技术干货每日送达!synchronized与locklock是一个接口,而synchronized是在JVM层面实现...

ITMuch的专栏 284

World Creator地形导入UE

导出预设选择高度图(heigh map)格式选择PNG 16位,或者RAW 16位,需要反转y轴(与虚幻不同),命名格式会自动带一个× , 将×改成_ 或者删掉自己命名 (虚幻名称不支持x符号)导入虚幻 , 修改Z轴 , 就是用 地形最高 - 地形最低 , 然后除以512 , 再乘以100。把这个数字填入Z轴缩放 , 点击生成即可。

UE星空 2155

YOLOv8实例分割实战:从LabelMe标注到模型训练全流程(附完整代码)

本文详细介绍了YOLOv8实例分割的完整实战流程,涵盖从使用LabelMe进行数据标注、格式转换,到构建数据集、配置参数并完成模型训练的全过程。文章提供了详尽的代码示例和常见问题解决方案,旨在帮助开发者高效掌握YOLOv8实例分割技术,快速应用于实际项目。

java5的博客 816

渲染优化 lock unlock

昨天参加了公司组织的nvdia的培训,讲了一些关于D3D的优化和可能的瓶颈所在,具体的条目就不说了,这里说一些关于资源的Lock和Unlock,以及我在GL下的测试。老师讲到向Draw*这类函数是将其指令放入指令队列,带填满后或者强制刷新时交给显卡去画,也就是说它并不是即时的,而像对资源的Lock和Unlock确是即时的操作,而且cpu和gpu是并行计算的,当lock的资源正是当前gpu正在使用的资源会导致lock堵塞直到gpu使用完后才返回,也就是说不当的使用lock会造成cpu等待gpu的情形。当然D3

2011

项目管理中 PMO 的关键职能解析

在企业数字化转型与战略落地的浪潮中,PMO(Project Management Office,项目管理办公室)逐渐从“项目辅助角色”升级为“组织级战略执行中枢”。然而,多数人对PMO的认知仍停留在“管项目的部门”或“文档审核机器”的层面。本文将打破误解,通过生活化类比(如“中枢神经”“导航系统”)、流程图解(战略对齐循环)、实际案例(制造企业PMO升级),深入解析PMO的五大核心职能:战略对齐、流程标准化、资源管理、绩效监控、知识沉淀。最终揭示PMO的本质——

项目管理的博客 1252

IDirectXFileData::GetData 在dx9c中没有了

IDirectXFileData::GetData函数是dx9b中的方法,用于取得x文件中的具体数据,返回void**的指针。 在dx9c中取而代之的函数是 ID3DXFileData::Lock( SIZE_T * pSize, CONST VOID ** ppData); psize是数据缓冲区的大小,ppdata是首地址指针 用完之后使用 ID3DXFileData::Unlock(...

weixin_30421525的博客 129

基于PINN的一个简单的求解偏微分方程实例

本人是做化工模拟的一名学生,最近在学习PINN(Physics-Informed Neural Networks,物理信息神经网络)对管道动力学进行建模研究,PINN由于其对机理与数据的良好兼顾性非常热门,本文是作者对PINN入门研究过程的一个练手小题目,main code也是作者代码是基于pytorch2.6.0写的,发上来供各位参考,欢迎研究管道动力学和PINN的小伙伴一起讨论~

weixin_64491760的博客 1741

告别手动改图!用Python+PyWin32驱动SolidWorks,实现参数自动化修改(保姆级避坑指南)

本文详细介绍了如何利用Python和PyWin32驱动SolidWorks实现参数自动化修改,提供从环境配置到API连接的工业级解决方案。通过实战案例和避坑指南,帮助工程师高效搭建自动化脚本工作流,显著提升设计效率。

weixin_30614109的博客 743

VS2022+DirectX9坐标系与基本图元之顶点缓冲区(VertexBuffer)_0301

本文介绍了DX9基础渲染框架中的顶点概念和渲染流程。顶点是多边形中相邻两边的交点,显卡通过这些顶点自动计算并渲染出图形。文章解释了顶点格式的定义方式,以及如何通过顶点缓存将数据从内存传输到显卡。重点讲解了CreateVertexBuffer、Lock/Unlock等API的使用方法,以及渲染过程中的SetStreamSource、SetFVF和DrawPrimitive等关键步骤。最后展示了渲染效果,并说明颜色渐变是由显卡自动进行插值计算的结果。

蓝创精英团队 588

车载以太网-TC8测试

TC8测试的用例数量 TC8测试基本流程 TC8测试内容

天赐好车的博客 3618

C# Managed DirectX 绘制静止三角形(高效版本)

CustomVertex.TransformedColored将顶点定义在托管堆中,如果顶点的数组放在图形卡的显存中,将极大地增加绘制图形的速度。 可用VertexBuffer类为数组申请存储空间,指定顶点数组的存放位置。 VertexBuffer构造函数: public VertexBuffer(Type typeVertexType, int numVerts, Device d

jasschow的专栏 885

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

dx9 lock unlock效率太低_Lock的使用

ReentrantLock除了使用synchronized关键字来实现线程之间同步互斥,在JDK1.5中新增了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,例如嗅探锁定、多路分支通知等功能,使用上比synchronized更加灵活。主要的使用方法:Lock lock = new ReentrantLock(); try { // 获取锁 lock.lock(); ...

weixin_39787826的博客 123

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

DirectX9 进入缓存内存

C++ 进入缓存内存 We obtain a pointer to its contents by using theLockmethod. It is important to unlock the buffer when we are done accessing it. HRESULT IDirect3DVertexBuffer9::Lock( UINT OffsetToLock,

梦幻DUO的游戏开发之路 586

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

DirectX一些操作步骤

DirectX设备对象g_pd3dDevice的初始化步骤: 1,创建LPDIRECT3D9接口对象pD3D 2,获取显卡信息D3DCAPS9结构caps,并判断设置顶点处理方式int型变量vp 3,填充D3DPRESENT_PARAMETERS结构体d3dpp 4,获取LPDIRECT3DDEVICE9设备对象g_pd3dDevice,并释放LPDIRECT3D9接口对象pD3D   ...

wudics的专栏 1061

DirectX3D游戏开发二 绘制第一个图形

在前一章节我们已经创建了我们的第一个DirectX3D项目,但是只是显示一个灰色的窗口而已,并没有进行相应的 绘图操作。那么今天,我们就来让窗口变得更漂亮一些。    今天主要讲通过顶点缓冲区绘制图形。什么是顶点缓冲区?顶点缓冲区就是用来保存顶点数据的内存缓冲区,在DirectX3D中由COM接口IDirectVertexBuffer9表示,顶点缓冲区中顶点的数据就决定了渲染到屏幕上的效果。

EasyLiu 3011

dx9 lock unlock效率太低_巧用“动作经济原则”,员工不累,效率加倍!

“动作经济原则”又称“省工原则”,是使作业(动作的组成)能以最少的“工”的投入,产生最有效率的效果,达成作业目的的原则。熟悉掌握“动作经济原则”对有效安排作业动作,减缓人员疲劳,提高作业效率,能起到很大的帮助。在动作分析时,经常需用到“动作经济原则”。“动作经济原则”可划分为三大类,共22项:第一类是关于人体的使用;第二类是关于工作场所的布置;第三类是关于工具设备的设计。一、动作经济原则...

weixin_39593277的博客 192

介绍D3DPOOL和Lock

介绍D3DPOOL和Lock 分类: DirectX2013-02-28 00:21 322人阅读 评论(0) 收藏 举报   D3D RUTIME的内存类型,分为3种,VIDEO MEMORY(VM)、AGP MEMORY(AM)和SYSTEM MEMORY(SM), 所有D3D资源都创建在这3种内存之中,在创建资源时,我们可以指定如下存储标志, D3DPOO

linuxheik的专栏 590

Delphi 与 DirectX 之 DelphiX(21): TDirectDrawSurface 的绘图命令

TDirectDrawSurface.PokeLine(); TDirectDrawSurface.PokeLinePolar(); TDirectDrawSurface.PokeBox(); TDirectDrawSurface.PokeBlendPixel(); TDirectDrawSurface.PokeCircle(); TDirectDrawSurface.PokeE...

weixin_34176694的博客 231

D3DLOCK_NOOVERWRITE。D3DLOCK_DISCARD lock 和unlock

这里有点资料,顺便说一下我的理解 CPU 和GPU是可以并行工作的,如果GPU正在使用一块内存上的数据绘制,而CPU要修改这块数据,就会出现CPU等待GPU或GPU等待CPU的情况,造成资源浪费。 如果GPU在使用一块内存的时候,用D3DLOCK_DISCARD标志锁定,表示我们对原来的数据不敢兴趣了,丢弃是相对于我们来说的,GPU会分配一块新内存,用来保存我们更新的数据,这时GPU可以使用原

linuxheik的专栏 2188

获取ddsd.lPitch

获取ddsd.lPitch 编者:李国帅 qq:9611153 微信lgs9611153 时间:2009-12-11 04:58下午   所需资源: Vc DirectDraw   从DirectDraw获取lPitch: int GetSurfacelPitch(LPDIRECTDRAWSURFACE7 lpddsBack); int CDisplayHandl...

lgs7907 516
下一篇: DirectX 中矩阵得用法
NowhereFish
博客等级 码龄20年 1粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值