DirectX lock 与 unlock?

今天看了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 在最合适的位置创建此顶点缓冲区。最后一个参数返回创建完成的顶点缓冲区对象地址.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DirectX和OpenGL是两个常用的图形编程接口,它们有以下几个方面的不同: 1. 平台支持:DirectX是由Microsoft开发的,主要用于Windows平台。它提供了广泛的图形和多媒体功能,并与Windows操作系统紧密集成。而OpenGL是一个开放标准,可以在多个平台上使用,包括Windows、Linux、Mac等。 2. API设计:DirectX是一个综合性的API,包括Direct3D(用于3D图形渲染)、Direct2D(用于2D图形渲染)、DirectSound(用于音频处理)等多个子API。这些子API提供了全面的图形和多媒体功能。而OpenGL则是一个专注于图形渲染的API,主要用于3D图形渲染。 3. 编程语言:DirectX使用C++作为主要编程语言,它提供了C++接口和一些辅助库,如DirectXMath、DirectXTex等。而OpenGL则是一个跨语言的API,可以使用多种编程语言进行开发,如C、C++、Python等。 4. 功能特性:由于DirectX是由Microsoft开发的,它与Windows操作系统紧密集成,并提供了一些独有的功能特性,如DirectCompute(用于通用计算)、DirectX Raytracing(用于光线追踪)等。而OpenGL则是一个开放标准,它的功能特性取决于硬件和驱动程序的支持程度。 5. 开发工具和支持:DirectX提供了完整的开发工具包(如Visual Studio),以及丰富的文档和示例代码。它也有一个活跃的开发者社区和技术支持。而OpenGL的开发工具和支持相对较少,但它有一些第三方工具和库,如GLEW、GLFW等,可以简化开发过程。 需要注意的是,DirectX和OpenGL都是强大的图形编程接口,选择使用哪个取决于你的开发需求、目标平台以及个人偏好。在选择之前,建议你深入了解它们的特性、功能和使用场景,以便做出合适的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值