OpenGL - 重新绑定已绑定的纹理

时间:2012-12-25 02:30:15

标签: c++ image opengl graphics textures

  

可能重复:
  Making redundant OpenGL calls

假设我有一个Image类,它有一个名为draw的方法,可以在屏幕上绘制图像的一部分,还可以存储包含实际图像数据的2d纹理的句柄。

可以像这样实现draw()方法吗?

// ix, iy, w and h specify which part of the image to draw
void Image::draw(int x, int y, int ix, int iy, int w, int h)
{
   glBindTexture(GL_TEXTURE_2D, m_textureHandle);
   //and then draw the specified part of the image
}

我主要关注的是致电glBindTexture。假设如果纹理已经绑定,这个调用不会导致某种性能下降,这是正确的吗?

1 个答案:

答案 0 :(得分:1)

已经为OpenGL,Op​​enVG等开发了一些实现(驱动程序),glBindTexture实际上只是将m_textureHandle存储在“当前上下文”中的某个“好位置”。这不是一件困难的事情,也不应该“花费太多”。

如果您尝试保存每个执行的最后一个循环,请务必添加一个变量以确定您是否已绑定纹理,并且只在需要时才执行此操作。但总的来说,如果你不能通过做其他聪明的东西节省5-10倍的时间,我会感到非常惊讶。