D3D11加载纹理资源的代码:
bool TexClass::Initilize(ID3D11Device* d3dDevice, WCHAR* TextureFilename)
{
HR(D3DX11CreateShaderResourceViewFromFileW(d3dDevice, TextureFilename, NULL, NULL, &mTexture, NULL));
return true;
}
D3D11设置纹理资源的代码:
d3dDeviceContext->PSSetShaderResources(0, 1, &texture);
TexClass.h (用于加载纹理)
#pragma once
#ifndef _TEX_CLASS_H
#define _TEX_CLASS_H
#include
#include"Macro.h"
#include //创建纹理资源的API
class TexClass
{
private:
ID3D11ShaderResourceView* mTexture;
public:
TexClass();
TexClass(const TexClass&);
~TexClass();
public:
bool Initilize(ID3D11Device* d3dDevice, WCHAR* TextureFilename);
void Shutdown();
ID3D11ShaderResourceView* GetTexture();
};
#endif // !_TEX_CLASS_H
TexClass.CPP
#include"TexClass.h"
TexClass::TexClass()
{
mTexture = NULL;
}
TexClass::TexClass(const TexClass&other)
{
}
TexClass::~TexClass()
{
}
bool TexClass::Initilize(ID3D11Device* d3dDevice, WCHAR* TextureFilename)
{
HR(D3DX11CreateShaderResourceViewFromFileW(d3dDevice, TextureFilename, NULL, NULL, &mTexture, NULL));
return true;
}
void TexClass::Shutdown()
{
ReleaseCOM(mTexture);
}
ID3D11ShaderResourceView* TexClass::GetTexture()
{
return mTexture;
}
(1)首先修复一下前几个教程冒出来的BUG,那时我以为是VS2015的bug,也就是在CameraClass.H里无法自动识别代码莫名其妙出现错误的BUG,
我发现如何一个.H文件单独包含
所以在CameraClass.H里先包含
(2)能作为Shader编译文件畅游.HLSL .vs.ps .fx等格式,我试过都行,fx和HLSL格式都行,我为了不那么麻烦都是VertexShader和PixelShader都是放在MyShader.fx文件里
(3)Shader的调试方式(就是如何发现你的Shader有语法错误),以我的为粒子,右键“”MyShader.fx“” 属性-》配置属性-》项类型,然后设置“”HLSL编译器“”,在调试编译的时候,“”error X3501: 'main': entrypoint not found“”代表你没语法错误了,其它的都是语法错误,当你调试到“””error X3501: 'main': entrypoint not found“,这时候可以右键“”MyShader.fx“” 属性-》配置属性-》项类型,然后设置“”不参与生成“”.
(4) 第四点算是对第三点的补充,貌似VertexShader函数和PixelShader函数忘记 返回值(return)时编译错误也为“”error X3501: 'main': entrypoint not found“” ,比如
VertexOut VS(VertexIn ina)
{
VertexOut outa;
outa.Pos = mul(float4(ina.Pos,1.0f), World);
outa.Pos = mul(outa.Pos, View);
outa.Pos = mul(outa.Pos, Proj);
outa.Tex= ina.Tex;
}
第五点,我把辅助的参数宏放到Macro.h里,比原教程节省大量代码.
源码的链接:点击打开链接