一个完整的glslC++类
现在做计算机图形
引擎不考虑GPU是不行的,但
opengl的glsl各个函数都是分离的,使用起来很不方便,无形中也增加了初学者的学习难度,这里做了个C++类,将opengl的各个shader(包括Gshader)设置封装起来,使用就方便多了。 ok,看附件
下面再举个简单的example *.h ...... Glshader m_MyShader; ...... *.cpp ....... m_Myshader.Create("myVSFileName","myGSFileName","myFSFileName"); m_Myshader.link(); m_Myshader.TurnOn(); m_Myshader.SetTexSample("DataTex", 0); m_Myshader.SetTexSample("ColorTex", 1); ......//shader 中使用多少
纹理加多少 m_Myshader.SetFloat("shaderPram",m_Pos.x); m_Myshader.SetFloat2("shaderPram2",m_Pos.x,m_Pos.y); m_Myshader.SetFloat3("shaderPram3",m_Pos.x,m_Pos.y,m_Pos.z); ......//shader 中使用多少uniform加多少 m_Myshader.TurnOff(); ....... void render() { m_Myshader.TurnOn(); //零号纹理 glActiveTexture(GL_TEXTURE0); glEnable(GL_TEXTURE_3D); glBindTexture(GL_TEXTURE_3D,m_VolTexID); //一号纹理 glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_1D); glBindTexture(GL_TEXTURE_1D,m_Color1DTexID); ....//依次加纹理 m_Myshader.SetFloat("shaderPram",m_EyePos.x); m_Myshader.SetFloat2("shaderPram2",m_EyePos.x,m_EyePos.y); m_Myshader.SetFloat3("shaderPram3",m_EyePos.x,m_EyePos.y,m_EyePos.z); //动态uniform drawploy()//绘制多边形 //零号纹理 glActiveTexture(GL_TEXTURE0); glDisable(GL_TEXTURE_3D); //一号纹理 glActiveTexture(GL_TEXTURE1); glDisable(GL_TEXTURE_1D); ....//依次关纹理 m_Myshader.TurnOFF(); } ok!如果使用有问题可以联系我
baobaoyang2008@126.com