DX11渲染管道:数据的修改(Map和Unmap)

在DX11渲染过程中,由于C++与HLSL内存分配方式的不同,Cbuffer数据绑定易出错。HLSL结构体以float4为单位填充内存,cbuffer长度需为float4的整数倍。为了在GPU进入渲染管道后能修改数据,使用Map和Unmap机制,Map获取资源指针并阻止GPU访问,Unmap则释放资源并恢复GPU访问。本文通过示例说明如何利用Map和Unmap修改资源。
摘要由CSDN通过智能技术生成

在C++与Hlsl绑定Cbuffer数据的时候,非常容易出错,出错的根本原因是C++对数据结构内存的分配与hlsl不同。

重要:HLSL的结构体struct其实并不管你是一个变量还是几个变量,它就是按照一次放满一个float4的内存长度,多少变量都往一个float4里面塞,塞满了再接着塞下一个float4。测试结果显示:cbuffer的长度必须是float4的整数倍才行,不知道float+float3的这种组合是否可以正常获取数据,也不清楚float+float+float3+float3这种组合能不能正常分配到数据,关键取决于GPU的内存分配规则。

 

在进入渲染管道后,如果CPU出现了要修改buffer或者其它类型数据的时候,不可能重新new一个buffer塞进去。这个时候需要一种机制能够修改已经进入管道的数据,这种机制就是Map和Unmap机制。其本质就是对数据加锁导致GPU不能修改,然后CPU对其进行修改,

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值