Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向不可变纹理存储器提供数据_C++_Opengl - Fatal编程技术网

C++ 向不可变纹理存储器提供数据

C++ 向不可变纹理存储器提供数据,c++,opengl,C++,Opengl,是否有一种方法可以直接(即,不是复制或填充)将数据提供给具有非glTexSubImage*的不可变存储的纹理?我知道可能不需要一个单独的函数来完成这个角色,但我确实想知道为什么不能在分配内存的同一行中指定数据(以与不可变缓冲区对象相同的方式) 我想知道为什么不能在分配内存的同一行中指定数据(与不可变缓冲区对象的方式相同) 纹理远比缓冲区对象复杂 纹理的不可变存储API为该纹理分配所有指定的mipmap级别。然而,这是唯一一次在一次操作中最多上传一个mipmap级别的像素数据。在任何像素传输操作中

是否有一种方法可以直接(即,不是复制或填充)将数据提供给具有非
glTexSubImage*
的不可变存储的纹理?我知道可能不需要一个单独的函数来完成这个角色,但我确实想知道为什么不能在分配内存的同一行中指定数据(以与不可变缓冲区对象相同的方式)

我想知道为什么不能在分配内存的同一行中指定数据(与不可变缓冲区对象的方式相同)

纹理远比缓冲区对象复杂

纹理的不可变存储API为该纹理分配所有指定的mipmap级别。然而,这是唯一一次在一次操作中最多上传一个mipmap级别的像素数据。在任何像素传输操作中都没有规定传输多个mipmap级别的数据。事实上,只有给定维度的单个图像才有意义(阵列纹理被视为高维图像)。Mipmap级别在层与层之间改变其大小,这使得像素传输操作改变其含义。特别是关于一些类似的子图像选择器

因此,如果要上载到具有多个mipmap的纹理,无论如何都需要进行多个调用。还有一个是什么

此外,请注意,
glTexImage*
glCompressedTexImage*
采用不同的参数。前者通过接收像素数据,后者接收预压缩数据。但它们都分配存储空间。如果要使
glTexStorage*
更类似于
glTexImage*
,则还必须添加
glCompressedTexStorage*
。现在你有了另一系列的功能,唯一的区别就是它们的上传方式

相比之下,缓冲区只包含一个字节数组,只有一种上传方式

总的来说,最好只使用现有的子映像基础设施进行上传,并且将分配与此完全分开

我想知道为什么不能在分配内存的同一行中指定数据(与不可变缓冲区对象的方式相同)

纹理远比缓冲区对象复杂

纹理的不可变存储API为该纹理分配所有指定的mipmap级别。然而,这是唯一一次在一次操作中最多上传一个mipmap级别的像素数据。在任何像素传输操作中都没有规定传输多个mipmap级别的数据。事实上,只有给定维度的单个图像才有意义(阵列纹理被视为高维图像)。Mipmap级别在层与层之间改变其大小,这使得像素传输操作改变其含义。特别是关于一些类似的子图像选择器

因此,如果要上载到具有多个mipmap的纹理,无论如何都需要进行多个调用。还有一个是什么

此外,请注意,
glTexImage*
glCompressedTexImage*
采用不同的参数。前者通过接收像素数据,后者接收预压缩数据。但它们都分配存储空间。如果要使
glTexStorage*
更类似于
glTexImage*
,则还必须添加
glCompressedTexStorage*
。现在你有了另一系列的功能,唯一的区别就是它们的上传方式

相比之下,缓冲区只包含一个字节数组,只有一种上传方式

总的来说,最好只使用现有的子映像基础设施进行上传,并且将分配与此完全分开