游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5523|回复: 13

每次游戏运行时都要编译shader? 能否预先编译成二进制代码?

[复制链接]

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-7-24 17:20:00 | 显示全部楼层 |阅读模式
DX SDK里的例子都是在游戏运行时把shader代码编译成二进制指令然后运行的,

这样使得游戏发布的同时把shader代码也发布出去了

有没有办法可以先编译成二进制码, 然后保存到文件, 当游戏运行时不需要编译shader直接载入并运行?

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-7-24 18:00:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

编译shader是由驱动程序来做的

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2009-7-24 18:13:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

D3DXCompileShader
D3DXCompileShaderFromFile

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-7-24 18:23:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

嗯, 这个函数确实可以把代码编译成二进制码 但是编译好了我不知道怎么载入到游戏里运行了?

主要是二进制的shader里的变量HANDLE怎么获得?

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2009-7-24 18:37:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

详见ID3DXConstantTable

或者直接SetVertexShaderConstantF/SetPixelShaderConstantF

11

主题

650

帖子

651

积分

高级会员

Rank: 4

积分
651
发表于 2009-7-24 18:52:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

编译shader是dx做的。。。驱动编译的那个是IL dxsdk里有个工具FXC.exe是专门用来编译shader的

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-7-24 20:48:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

等等...大家可能会错意了.

我的意思是  在游戏开发时就把shader代码经过 D3DXCompileShader 编译成 LPD3DXBUFFER* ppShader 形式, 并保存到文件里.

下次游戏运行时不需要再编译了, 而是直接读入内存并调用pDev->CreateVertexShader创建 IDirect3DVertexShader9 对象.

但是问题来了, 如何获得 IDirect3DVertexShader9 里变量的 D3DXHANDLE ?

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2009-7-24 22:26:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

fxc工具 编译成fxo目标文件 直接通过createeffectfromfile来加载,一样的

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-7-25 08:02:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

除了用fxc之外  难道我说的这种办法就真的不可行吗?

真想看看 D3DXCompileShaderFromFile 的代码是怎么实现的

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-7-26 11:31:00 | 显示全部楼层

Re:每次游戏运行时都要编译shader? 能否预先编译成二进制

顶一个先
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-19 08:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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