游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3026|回复: 6

Direct3D的effect程序是不是有指令数限制?

[复制链接]

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2004-12-5 20:50:00 | 显示全部楼层 |阅读模式
我写的程序的effect部分(.fx文件),里面的语句比较少的时候没有问题,但我现在在里面加了十来行语句,编译就出问题了:
unexpected error encountered
error code:E_FAIL(0x80004005)
calling3DXCreateEffectFromFile( pd3dDevice, str, NULL, NULL, dwShaderFlags,  NULL, &g_pEffect, NULL )

我设断点看到编译器中errorbuffer里面的内容是这样的:

变量名称                       值                                                                                                                类型
__vfptr  0x007424d4 const D3DXCore::CBuffer::`vftable'                                                                 *
[0]         0x005112df D3DXCore::CBuffer:ueryInterface(struct _GUID const &,void * *)    *
[1]         0x0050eddc D3DXCore::CBuffer::AddRef(void)                                                                  *
[2]         0x0050f9b2 D3DXCore::CBuffer::Release(void)                                                                *

这些看不懂是什么意思。

这个错误是不是因为effect程序的指令数有限制,指令太多了就会不能运行?
我检查过了应该不是代码本身的问题。
请知道的指点一下,谢谢!

69

主题

450

帖子

473

积分

中级会员

战魂缔造者

Rank: 3Rank: 3

积分
473
QQ
发表于 2004-12-6 12:24:00 | 显示全部楼层

Re:Direct3D的effect程序是不是有指令数限制?

看看括号配对上面有没有问题,应该不会有长度限制吧,要有的话也是在dx8里啊

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-12-6 19:34:00 | 显示全部楼层

Re:Direct3D的effect程序是不是有指令数限制?

应该不是括号匹配了什么的问题。我觉得代码没有错误啊。
我在VC.NET里编译(生成解决方案)是成功的,但运行(开始执行)就出了我上面说的那个错误提示。并且在REF模式下还可以执行的,但不进入REF模式执行就出错了。

出来上面那个错误提示的时候我的调用effect的代码是这样的:
V_RETURN( D3DXCreateEffectFromFile( pd3dDevice, str, NULL, NULL, dwShaderFlags,       NULL, &g_pEffect, NULL ) );

后来我改为:
HRESULT hr1 = S_OK;
LPD3DXBUFFER errorBuffer = NULL;
if (FAILED(hr1 = D3DXCreateEffectFromFile( pd3dDevice, str, NULL, NULL, dwShaderFlags,  NULL, &g_pEffect, &errorBuffer )))
{
        (char*)errorBuffer->GetBufferPointer();
         SAFE_RELEASE(errorBuffer);
    }
错误变成了:
“0x0055714"指令引用的”0x00000000"内存。该内存不能为”read"。
这是出了什么问题啊?

0

主题

39

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2004-12-7 01:39:00 | 显示全部楼层

Re:Direct3D的effect程序是不是有指令数限制?

LPD3DXBUFFER *errorBuffer = NULL;
为什么不是这样定义呢?

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-12-12 22:05:00 | 显示全部楼层

Re:Direct3D的effect程序是不是有指令数限制?

定义空指针就是那样定义的吧。
我后来发现effect里指令数是有限制的,ps_2_0的arithmatic instruction slots是64,我写的算术指令太多了,所以调用出错。
我现在想能不能把这部分进行算术运算的代码移到cpp文件里去,弄个函数把运算结果再传到fx文件里。但这两者的函数结构了什么的好像不一样,不知道这样移一下是否可以, 有没有哪位知道的告诉我一下,多谢了!

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2004-12-13 09:04:00 | 显示全部楼层

Re:Direct3D的effect程序是不是有指令数限制?

用寄存器传递可以么?

13

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2004-12-23 15:18:00 | 显示全部楼层

Re:Direct3D的effect程序是不是有指令数限制?

我本来想把effect里的一些代码移到cpp里去,具体是先在effect里得到一些采样点,把这些采样点的值传到cpp里让CPU进行处理,再把处理结果传回effect继续渲染,但这样好像不行。是不是shader的处理过程是封闭的,中途不能传出和传入数据?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-18 10:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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