将像素传递给glTexImage2D()后会发生什么?

Nic*_*ton 10 c++ opengl glteximage2d

例如,我创建一个像素数组,如下所示:

int *getPixels()
{
    int *pixels = new int[10];
    pixels[0] = 1;
    pixels[1] = 0;
    pixels[1] = 1;
    // etc...
}

glTexImage2D(..., getPixels());
Run Code Online (Sandbox Code Playgroud)

glTexImage2D是否使用该引用或将像素复制到自己的内存中?

如果答案是前者,那么我应该做以下事情吗?

int *p = getPixels();
glTexImage2D(..., p);

/* Just changed to delete[], because delete
 * would only delete the first element! */
delete[] p;
Run Code Online (Sandbox Code Playgroud)

Bri*_*aro 9

手册页中的这个引用来看,听起来像glTexImage2D会分配自己的内存.这是有道理的,理想情况下,OpenGL API会发送数据存储在显卡本身(如果允许驱动程序/实现/等).

在GL版本1.1或更高版本中,像素可以是空指针.在这种情况下,纹理存储器被分配以容纳宽度宽度和高度高度的纹理.然后,您可以下载子纹理以初始化此纹理内存.如果用户尝试将纹理图像的未初始化部分应用于基元,则图像未定义.

所以,我想,一旦你生成纹理,释放记忆就没有害处.