游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4240|回复: 10

请教 关于HLSL的问题。

[复制链接]

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2009-8-17 17:20:00 | 显示全部楼层 |阅读模式
在使用自己编写的Shader时,难道只能在游戏运行时调用“D3DXCompileShader”、“D3DXCompileShaderFromFile”、“D3DXCompileShaderFromResource”,实时的把shader代码编译好,然后在运行吗?

不能事先把shader的代码编译成类似于可执行文件一样的东西,然后在游戏运行时由主程序直接调用吗?

11

主题

650

帖子

651

积分

高级会员

Rank: 4

积分
651
发表于 2009-8-17 17:48:00 | 显示全部楼层

Re:请教 关于HLSL的问题。

可以预先编译成二进制文件

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-18 10:50:00 | 显示全部楼层

Re:请教 关于HLSL的问题。

事先把D3DXCompileShaderFromFile返回的ID3DXBuffer内容保存到文件

以后游戏运行时直接载入到内存 然后 pDevice->CreateVertexShader(...);

不需要ID3DXConstantTable来改变shader内变量  直接pDevice->SetVertexShaderConstant*(...)

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
 楼主| 发表于 2009-8-18 15:10:00 | 显示全部楼层

补充:请教 关于HLSL的问题。

谢谢!

但是pShader是一个指针,用"sizeof(pShader)"或"sizeof(*pShader)”的到的值是4。
如果要把pShader中的东西储存为文件就一定要知道pShader指向的内容有多少字节。

要怎样才能获取pShader指向内容的字节数?

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-18 17:35:00 | 显示全部楼层

Re:请教 关于HLSL的问题。

....LZ的C语言不过关  保存东西不能这样保存的。

D3DXCompileShaderFromFile 参数中会返回一个ID3DXBuffer

使用ID3DXBuffer::GetBufferPointer获得指针 保存到文件

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
 楼主| 发表于 2009-8-19 09:15:00 | 显示全部楼层

补充:请教 关于HLSL的问题。

如果使用"D3DXCreateEffectFromFile"编译成效果,出来的指针是"LPD3DXEFFECT pEffect"就不像ID3DXBuffer一样有"ID3DXBuffer::GetBufferSize"和"ID3DXBuffer::GetBufferPointer"两个成员函数,使用文件流保存文件需要一个指针和保存数据块的大小。

如果使用"D3DXCreateEffectFromFile"或"D3DXCreateEffectFromFileEx"获得"LPD3DXEFFECT pEffect"怎样才能取得pEffect的BufferPointer和BufferSize?难道把pEffect强转成ID3DXBuffer也行?

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-19 12:30:00 | 显示全部楼层

Re:请教 关于HLSL的问题。

dx工具箱里有一个fxc.exe:

\Microsoft DirectX SDK (March 2009)\Utilities\bin\x86\fxc.exe

这东西可以把.fx文件编译成二进制的.fxo文件格式

在游戏里载入.fxo跟载入.fx没区别

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-19 12:36:00 | 显示全部楼层

Re:请教 关于HLSL的问题。

如果想自己编译出.fxo格式文件  可以试试 D3DXCreateEffectCompilerFromFile

出来的ID3DXEffectCompiler调用它的CompileEffect方法  可以获得ID3DXBuffer

GetBufferPointer获得它的内存指针 保存到.fxo文件

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-8-19 15:35:00 | 显示全部楼层

Re: 请教 关于HLSL的问题。

visualvisual: 请教 关于HLSL的问题。

在使用自己编写的Shader时,难道只能在游戏运行时调用“D3DXCompileShader”、“D3DXCompileShaderFromFile...


shader的最终编译是运行时,由驱动来完成的,不同的GPU上,有可能编译为不同代码
预编译得到的仅仅是二进制代码,而不是实际可运行的“GPU代码”

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-8-19 19:02:00 | 显示全部楼层

Re:请教 关于HLSL的问题。

什么时候我到ATI和NVIDIA两种显卡上试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-7 16:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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