让我们假设2D纹理是使用带有空数据指针的glTexImage2D
定义的。传递空数据指针会使内存归零吗?或者当片段着色器对该纹理进行采样时,我可能会得到一些垃圾数据?
vec3 color = texture(texture0, texCoord).xyz;
文档明确指出:
数据可能是一个空指针。在这种情况下,纹理内存被分配来容纳宽度宽度和高度…的纹理如果用户试图将纹理图像的未初始化部分应用于基元,则图像未定义。
所以是的,你会得到垃圾。请记住,零也是有效的垃圾,所以不要用它来证明它是"垃圾";作品";。
将纹理清除为零的最简单方法是使用glClearTexImage
:
glClearTexImage(texture, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
对于这个函数,CCD_;全部为零";。