计算着色器中三维工作组使用三维纹理
三维纹理
三维纹理的定义、数据绑定和二维、一维纹理相同,纹理有最大宽度、高度、深度限制,GL_MAX_TEXTURE_SIZE的值是纹理的最大宽度和高度(二维和三维的最大宽度和高度一致,一维的最大宽度应该也是这个一维纹理使用较少),GL_MAX_3D_TEXTURE_SIZE的值是三维纹理的最大深度。
查询方式
GLint max;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);
使用glBindImageTexture函数传送纹理数据到着色器时需注意第四个参数设置。
创建纹理
glGenTextures(1, &texID);//为纹理对象保留名称
glBindTexture(GL_TEXTURE_3D, texID);//绑定到纹理目标
//设置纹理模式
glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameteri(GL_TEXTURE_3D,GL_TEXTURE_WRAP_T,GL_CLAMP);
//定义纹理的数据格式,即生成一个空纹理
glTexImage3D(GL_TEXTURE_3D,0,GL_RGBA32F_ARB,width,height,deep,0,GL_RGBA,GL_FLOAT,0);
//给纹理传入数据
glBindTexture(GL_TEXTURE_3D,texID);
glTexSubImage3D(GL_TEXTURE_3D,0,0,0,0,width,height,deep,GL_RG