在Direct3D11中使用effect
来源:互联网 发布:学市场营销的软件 编辑:程序博客网 时间:2024/05/01 00:32
D3DX11CompileFromFile(L"effect11.fx",NULL, NULL, NULL,"fx_5_0",D3D10_SHADER_SKIP_VALIDATION|D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY,NULL, NULL, &pCode, &pError, NULL);
V_RETURN( D3DX11CreateEffectFromMe
还有一个很重要的问题需要注意:
如果显卡是D3D10级别,在创建Device的时候通常会选择例如D3D_FEATURE_LEVEL_10_0,这时候会导致编译shader失败从而无法绘制场景。这个问题存在于effect11project的EffectNonRuntime.cpp里,原代码如下(第1270行左右): (XNAForum的牛人发现的)
if(pShader->pReflectionData->RasterizedStream== D3D11_SO_NO_RASTERIZED_STREAM )pShader->IsValid =FALSE;
elseif( FAILED((m_pDevice->*(pShader->pVT->pCreateShader))((UINT *)pShader->pReflectionData->pBytecode,pShader->pReflectionData->BytecodeLength,m_pClassLinkage,&pShader->pD3DObject) ) )
{
pShader->IsValid =FALSE;
}
但如果Device不是11_0,则m_pClassLinkage必须为NULL,所以这里无法通过。
我们可以更改原代码如下:
if(pShader->pReflectionData->RasterizedStream== D3D11_SO_NO_RASTERIZED_STREAM )
pShader->IsValid = FALSE;
elseif( FAILED((m_pDevice->*(pShader->pVT->pCreateShader))((UINT *)pShader->pReflectionData->pBytecode,pShader->pReflectionData->BytecodeLength,m_pClassLinkage,&pShader->pD3DObject) ) )
{
if( FAILED((m_pDevice->*(pShader->pVT->pCreateShader))((UINT *)pShader->pReflectionData->pBytecode,pShader->pReflectionData->BytecodeLength,0, &pShader->pD3DObject) ))
pShader->IsValid =FALSE;
}
很简单,多加一层判断即可。
然后build出新的d3dx11effects.lib应该就可以正常使用effect了。
- 在Direct3D11中使用effect
- 关于Direct3D11中字体的思考
- JavaFX中effect包中Blend类简单使用
- Flex 中在表单(Form组件)上填加动画效果(Effect)
- effect C++ 在operatro = 中处理“自我赋值”
- 样式中定义effect
- 如何使用Effect
- 《Effect C++》学习------条款09:绝不在构造和析构过程中调用virtual函数
- 《Effect C++》学习------条款11:在 operator= 中处理“自我赋值”
- 《Effect C++》学习------条款14:在资源管理类中小心coping行为
- 《Effect C++》学习------条款15:在资源管理中提供对原始资源的访问
- Effect
- effect C++ 尽可能使用const
- XNA4.0中effect的使用变化以及spriteBatch begin的变化
- unity中camera怎么生成使用深度图 Camera Depth Texture 实现Image Effect
- Direct3D11中的Device介绍(MSDN中D3D11的教程翻译)
- windows10中创建Direct3D11设备出现0x887a002d错误的解决方案
- 3D图形学编程基础-基于Direct3D11-学习记录(三)纹理的使用
- 盘点六大在中国复制失败的O2O案例
- ZOJ 2108 Elevator
- php5.4升级遇到的兼容性问题
- FTP主动和被动模式的区别
- PKU JudgeOnline FAQ 中文版 【ACM判题系统常见问题】
- 在Direct3D11中使用effect
- 最快线程间数据交换算法,有效避免锁竞争---TwoQueues
- MVC 3.0 在各个版本IIS中的部署
- HTTP 错误 500.19 - Internal Server Error
- 线段树单点更新
- 乔布斯和盖茨眼中真实的对方
- 启动数据库报错could not open parameter file init**.ora
- 将死的平台:.Net
- 火狐和IE的window.event对象详解