您的位置:首页 > 编程语言

GPU编程入门(一)

2007-05-21 21:58 423 查看
该系列文章al by 我就是条狗~~

随便说点我记得住的历史,学点历史是有用的,可以增加兴趣最少...

GPU就是图形处理器,随着硬件的发展越来越快,GPU的处理能力也今非昔比,现在GPU能够进行很复杂的数据处理,并且拥有某些CPU不同的处理特性。GPU语言就是用来用来控制GPU处理的一种语言吧...现在基本有两种,一种是NVIDIA的Cg(C for graphics 图形C语言)另一种是microsoft的HLSL(high level shader language 高级着色语言 天知道是不是这么拼的....)其实这两种是同样的语言,两家公司共同开发的,分别实现而已。我写的这个教程采用HLSL 没别的,我学的这个...哈哈...

简单的说了下我知道的历史,下面是正题。hlsl程序大多有两个部分组成(怎么说,算是吧,不过你要非只写一个,当然也是成立的,不过对复杂程序,一个是显然不够的),一个是顶点程序(vertex shader )另一个是像素程序(pixel shader),这两个程序从名字上看就知道是分别代替CPU渲染管线中的 顶点处理(vertex processing)和像素处理(pixel processing)的阶段工作,让CPU腾出更多的周期处理复杂的AI 什么什么的.cpu时钟周期是宝贵的.学游戏的都知道 关于历史和简介只说这么多吧,...


//顶点程序


//全局变量


vector color;




//输入结构




struct VS_INPUT...{




vertor position :POSITION;}




//输出结构




struct VS_OUTPUT...{




vertor position : POSITION;




vector color:COLOR;}




//主函数




VS_OUTPUT main(VS_INPUT)...{




VS_OUTPUT out;




out.position=VS_INPUT.posintion;




out.color=color;




return out;}





看上面的例子,hlsl的语法和c的语法其实是很像的,所有有c的基础的话对学习hlsl是非常有帮助的

我自己就最喜欢给出例子以后先告诉我怎么运行,不然看半天枯燥到死我早扔掉书了,所以,我先告诉你怎么运行一个hlsl顶点程序。

顶点程序保存为.txt文件。例如first。tet,创建一个简单的directx程序,然后可以调用 D3DXCompileShaderFromFile函数从first。tet中编译一个顶点着色器,具体代码如下:


IDirect3DVertexShader9* firstShader=0;//顶点着色器指针




//一个常量列表,用于给全局变量赋值




ID3DXCostantTable* firstConstTable =0;




D3DXHANDLE colorHandle =0;//你猜这个是什么??






ID3DXBuffer* shaderbuffer = 0;//创建一个buffer,编译后的shader保存在这里




//另一个buffer用于保存错误信息,如果有的话




ID3DXBuffer* errorbuffer = 0;




//编译着色器代码




D3DXCompileShaderFromFile( "first.tex",//顶点程序文件路径和文件名




0,




0.




"main",//入口函数名




"vs_3_1"//shader版本号




D3DXSHADER_DEBUG,//采用debug模式编译




&shaderbuffer,//指向编译后的指针




&errorbuffer,




&firstConstTable//常量列表);




//接下来创建电调着色器




g_pDevice->CreatVertexShader((DWORD*)shaderbuffer->GerBufferPointer,&firstShader);






/**//*接下来是对顶点程序中的全局变量赋值,着色器的全局变量被编译以后放在一个叫做常量列表的结构中,就是ConstTable,也就是编译函数D3DXCompileShaderFromFile的最后一个参数,具体的赋值过程是通过变量名获得指向着色器的句柄(handle),通过set函数和句柄为变量赋值,比如要设置这里的color就使用 SetVertor ,如果是矩阵那自然就是SetMatrix函数咯,具体过程如下:*/




D3DVEVTOR4 color =(1.0f,1.0f,0.0f,1.0f);//先定义一个vertor值




colorHandle =frestConstTable->GetConstantByName(0,//父亲指针表示,如果是最高级别即没有父,就是0




"color"//变量名);




//我们先把设置各个变量为默认值,这是个好习惯




firstConstTable->SetDefaults(g_pDevice);




//然后设置值




firstConstTable->SetVertor(g_pDevice,colorHandle,&color);



好了,把这段代码加到你的渲染代码里头 到这里,一个顶点程序就写完了。

其实这个顶点程序什么也没干,唯一的事情就是把颜色设置了一下而已,不过对学习基础来说,够了...

也许你要说,那还没有设置position的值呢,不,这个值不需要设置,而是由程序从要处理的顶点里头取得,这也是顶点程序的一个必要的参数,即一定要有position,道理是不言自明的吧
好了,花了我一个多小时啊,写了这么点,算是体会到写书人的痛苦了....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: