HLSL入门

HLSL的输入输出结构定义了该着色器的输入和输出顶点数据

struct VS_INPUT
{
    vector position  : POSITION;
};

// Output structure describes the vertex that is
// output from the shader.  Here the output
// vertex contains a position and color component.
struct VS_OUTPUT
{
    vector position : POSITION;
    vector diffuse  : COLOR;
};
此种语法建立了着色器中的变量和硬件存储器之间的联系,即输入变量总是与输入存储器关联,

输出变量总是与输出存储器关联,VS_INPUT结构的成员position将被连接到一个特定的顶点输入

位置寄存器,类似的,VS_OUTPUT成员diffuse将被连接到一个特定的顶点输出颜色寄存器中。

像C++函数一样,HLSL程序也应该有一个入口点,称为入口函数,但入口函数的名称在遵循命名规则的

前提下其名称可自由选择(可以不再叫Main)

VS_OUTPUT Main(VS_INPUT input)
{
    // zero out members of output
    VS_OUTPUT output = (VS_OUTPUT)0;
 
    // transform to view space and project
    output.position  = mul(input.position, ViewProjMatrix);

    // set vertex diffuse color to blue
    output.diffuse = Blue;

    return output;
}
入口函数主要负责依据输入顶点计算输出顶点。

如果要在着色器中获取ViewProjMatrix变量的一个句柄,那么可用如下方式实现:

D3DXHANDLE h0;
h0 = ConstTable->GetConstantByName(0,"ViewProjMatrix");
一旦获取了着色器代码中哪个变量的D3DXHANDLE类型的句柄,就可使用ID3DXConstantTable::SetXXX对变量进行设置

可用如下函数对保存在文本文件中的着色器程序进行编译

HRESULT  D3DXCompileShaderFromFile(
  __in   LPCSTR pSrcFile,
  __in   const D3DXMACRO *pDefines,
  __in   LPD3DXINCLUDE pInclude,
  __in   LPCSTR pFunctionName,
  __in   LPCSTR pProfile,
  __in   DWORD Flags,
  __out  LPD3DXBUFFER *ppShader,
  __out  LPD3DXBUFFER *ppErrorMsgs,
  __out  LPD3DXCONSTANTTABLE *ppConstantTable
);
HLSL的变量类型:标量类型,向量类型,矩阵类型,数组,结构体








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值