如何在自己的opengl程序中使用GLSL

GLSL,即GL Shading Language,用自己写的程序取代opengl的固定渲染管线的一种语言。

 

之前看了下RenderMonkey,虽然功能不算弱,但使用RenderMonkey却不知道在里面怎么用自己的shader去渲染自己的opengl程序,所以就去找下了关于把shader链接到自己的程序里的方法。

 

因为Microsoft仅支持到opengl1.1,所以使用了glew扩展。

 

测试用的vertex shader和fragment shader非常简单,即把物体显示为红色,代码如下:

 

shader的类的定义:

 

其中m_VertexShader和m_FragmentShader存放shader的字符串,m_Vert、m_Frag和m_Program分别为顶点着色器对象、片段着色器对象和着色器程序对象的句柄。

在用ReadVertextShader()和ReadFragmentShader()方法来读取shader源代码之后,我们就使用SetShader()来编译着色器代码,然后当我们需要使用shader的时候就调用UseShader()即可。

 

SetShader()代码如下:

 

UseShader()代码如下:

 

不过我并没有使用函数来获取编译和链接的日志,这个有待进一步改进。

 

当我们不需要再使用shader时,要先取消shader对象与程序对象的绑定关系,然后再删除这些对象,我把这些步骤放在了析构函数里执行:

 

 

 

当我们写好类的实现方法后,就可以在程序里调用这些方法来使用shader了。

我是在WM_CREATE消息里执行这些的,可以根据需要来自行调用。

同时在WM_CREATE消息里使用了glewInit()来初始化glew,不初始化glew的话无法正常使用glew扩展的函数,并且glew的初始化要放在opengl资源创建之后……这个问题弄了我好久才把其解决……

 

程序运行图:

 

源代码下载:

http://download.csdn.net/source/2422990

阅读更多
个人分类: opengl学习笔记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭