发布和重用着色器程序句柄

时间:2015-07-02 11:38:56

标签: c++ opengl-es

我的引擎中有几个着色器程序,这取决于我加载的模型(lambert,blinn,diffuse plain ...)。一切正常,但是,当我重新加载模型时,着色器索引增加,我的硬件拒绝索引。

  

...链接[3]:基本蓝色

     

......链接[6]:基本红色

     

......链接[9]:基本绿色

重装后

  

...链接[30]:基本蓝色

     

......链接[33]:基本红色

     

......链接[36]:基本绿色

我加载的最后一个着色器应该具有ID 27.因此,在重新加载时,着色器被编译到下一个ID中。 (28个顶点着色器,29个片段着色器,30个编译程序)。

当我重新加载模型时,我清楚(更好地说,我想我清楚)着色器。

glDeleteProgram(programID);

但身份证不断增加就像身份证一样不会被释放。为了防止ID仍被其他东西使用,比如纹理或vbos,我清除纹理:

glDeleteTextures(1,&handle);

和维也纳国际组织。

glDeleteBuffers(1, &vertexVBOID);
glDeleteBuffers(1, &indexVBOID);

但他们保持着色器ID不断增加。

  1. 我可能会遗漏一些东西吗?
  2. 如何发布ID?
  3. 如何检查哪种对象持有id?

0 个答案:

没有答案