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

OpenGL - Re-binding an already bound texture

本文关键字:绑定 纹理 OpenGL- 新绑定      更新时间:2023-10-16

可能的重复:
进行多余的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。假设纹理已经绑定,此调用不会导致某种性能命中?

是正确的吗?

曾在OpenGL,OpenVG和类似的某些实现(驱动程序)上工作过,GlbIndTexture实际上只是将M_TextureHandle存储在"当前上下文"内的某个"好地方"中。这不是一件困难的事情,也不应该"花费太多"。

如果您试图保存执行的最后一个周期,则一定要添加一个变量以确定您是否已经绑定了纹理,并且只有在需要时进行。但是总的来说,如果您无法通过做其他聪明的事情来节省5-10倍的时间,我会感到非常惊讶。