假设我有一个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
。假设如果纹理已经绑定,这个调用不会导致某种性能下降,这是正确的吗?
答案 0 :(得分:1)
已经为OpenGL,OpenVG等开发了一些实现(驱动程序),glBindTexture实际上只是将m_textureHandle存储在“当前上下文”中的某个“好位置”。这不是一件困难的事情,也不应该“花费太多”。
如果您尝试保存每个执行的最后一个循环,请务必添加一个变量以确定您是否已绑定纹理,并且只在需要时才执行此操作。但总的来说,如果你不能通过做其他聪明的东西节省5-10倍的时间,我会感到非常惊讶。