游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6656|回复: 11

LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

[复制链接]

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-10-18 19:35:00 | 显示全部楼层 |阅读模式
高手赐教
  。。。。。。。。。。 [em3] [em4]

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2006-10-18 19:37:00 | 显示全部楼层

Re: LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

是不是把内存的东东
  转为显存的格式
  。。。。。。。。。

   [em1]

3

主题

121

帖子

121

积分

注册会员

Rank: 2

积分
121
QQ
发表于 2006-10-18 20:48:00 | 显示全部楼层

Re:LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

确保顶点存储内存处于可访问内存区域。
此时你就可以修改缓冲区数据。与此同时D3D就不能使用缓冲区,
只有用Unlock解锁之后D3D才能使用缓冲区。

所以不是转到显存中.
在创建顶点缓冲时用D3DCREATE_WRITEONLY,顶点数据就会被存储到显存中。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-10-19 11:44:00 | 显示全部楼层

Re: Re:LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

踏魔狼: RePDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

确保顶点存储内存处于可访问内存区域。
此时你就可以修改缓冲区数据。与此同时D3D就不能使用缓冲区,
只有...

这也不绝对,还要看创建时指定的资源存储方式以及资源用法,另外还要看资源访问时指定的方式。

3

主题

121

帖子

121

积分

注册会员

Rank: 2

积分
121
QQ
发表于 2006-10-19 12:05:00 | 显示全部楼层

Re: Re: Re:LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

congy: Re: RePDIRECT3DVERTEXBUFFER9中lock函数锁定了什么


这也不绝对,还要看创建时指定的资源存储方式以及资源用法,另外还要看资源访问时指定的方式。

这是当然.我只是指出其中的一种. [em20] [em20]

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2006-10-20 01:03:00 | 显示全部楼层

Re: Re:LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

踏魔狼: RePDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

确保顶点存储内存处于可访问内存区域。
此时你就可以修改缓冲区数据。与此同时D3D就不能使用缓冲区,
只有...

有个概念想请教:
D3D就不能使用缓冲区,那么该缓冲区被谁使用呢?
谁锁的就是谁在用吧?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-10-20 12:06:00 | 显示全部楼层

Re: Re: Re:LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

葡萄糖: Re: RePDIRECT3DVERTEXBUFFER9中lock函数锁定了什么


有个概念想请教:
D3D就不能使用缓冲区,那么该缓冲区被谁使用呢?
谁锁的就是谁在用吧?

其实并不是 D3D不能使用,因为在 Lock 时修改的并不是真正的显存中的数据,而是 D3D run time 自己指定的一个内存区域,有可能是非本地显存(AGP),也有可能是系统内存。如果不指定 D3DLOCK_DISCARD 或者 D3DLOCK_NOOVERWRITE 标志调用 Lock ,则要等到 Driver 完成使用这个 BUFFER 的渲染操作才返回,如果指定上面两个标志,D3D 可以继续使用原有的 Buffer 进行当前的渲染而不受 Lock 操作的影响。对于 Static Buffer 来说,只能等到 Driver 把所有的 Buffer 数据读取完成才能 Lock。

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-10-20 17:36:00 | 显示全部楼层

Re:LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

楼上说的思想基本正确,不过有些小错误:
1,Lock返回的地址不是由runtime指定的,是完全由driver给的,除非是system memory的,此地址可能是local video memory;
2,D3DLOCK_DISCARD时,driver是新创建一块buffer,旧的buffer仍然可以被硬件使用(不是driver),这种机制叫buffer renaming;

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2006-11-23 18:27:00 | 显示全部楼层

Re:LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

谢谢啊

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-11-24 11:19:00 | 显示全部楼层

Re: Re:LPDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

kypck: RePDIRECT3DVERTEXBUFFER9中lock函数锁定了什么

楼上说的思想基本正确,不过有些小错误:
1,Lock返回的地址不是由runtime指定的,是完全由driver给的,除...

LS 说的第一个的确是错误,第二个和我上面说的无异,但是更准确了一些。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 23:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表