1

可能重复:
进行冗余 OpenGL 调用

假设我有一个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. 假设如果纹理已经绑定,则此调用不会导致某种性能损失是否正确?

4

1 回答 1

1

在为 OpenGL、OpenVG 等开发了一些实现(驱动程序)之后,glBindTexture 实际上只是将 m_textureHandle 存储在“当前上下文”内的某个“好地方”。这不是一件难事,也不应该“花费太多”。

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

于 2012-12-25T02:57:49.797 回答