c++ - OpenGL - 重新绑定(bind)一个已经绑定(bind)的纹理

标签 c++ image opengl graphics textures

<分区>

Possible Duplicate:
Making redundant OpenGL calls

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

这样实现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 的调用。假设如果纹理已经绑定(bind),此调用不会导致某种性能下降是否正确?

最佳答案

在 OpenGL、OpenVG 和类似的一些实现(驱动程序)上工作后,glBindTexture 实际上只是将 m_textureHandle 存储在“当前上下文”中的某个“好地方”。这不是一件难事,也不应该“花费太多”。

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

关于c++ - OpenGL - 重新绑定(bind)一个已经绑定(bind)的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14027208/

相关文章:

c++ - 是否有任何 C++ 工具可以检查常见的未指定行为?

c++ - 在不同的范围内新建和删除

image - bwareafilt 在 MATLAB 中的奇怪行为及其使用的算法是什么?

image - 使用 CSS3 将图像中的一种颜色替换为另一种颜色

c++ - Opengl - 渲染不同的顶点格式

api - 除了 DirectX/OpenGL,是否还有更低级别的 API?

c++ - 在嵌套的 lambda 中应用 function_traits 时编译失败

c++ - 用于 OpenGL 图形的 C 或 C++

java - 如何在Java中存储ImageIcon

c++ - getIntegerv() 和 std::cout 的奇怪行为