前面层卷积(使用片元着色器)还不够快,这里准备使用计算着色器。
先实现一个小目标:即使用计算着色器作图像处理。也就是一个卷积。
以《GPGPU基础(五):使用compute shader进行通用计算及示例》一文为模板。
有个疑问:该文为什么要计算2次,并使用了3个纹理呢?
终于在《OpenGL编程指南(第八版)-中文扫描版》的第12.4.2章《计算着色器-示例-图像处理》找到答案:第一次对图像水平处理,第二次垂直处理。
所以我们去掉哪个中间纹理,只要两个纹理(输入,输出),一次计算(卷积)就可以了。
先载入图像到下面结构中:
struct bmp_data
{
int width; //宽
int height; //高
int depth; //通道 深度
unsigned char * data; //rgbrgb...排列
};
设置纹理及传送格式:
textureParameters.texTarget = GL_TEXTURE_2D;
textureParameters.texInternalFormat = GL_RGBA32F;
textureParameters.texFormat = GL_RGB;//或GL_RGBA
textureParameters.type = GL_FLOAT;//GL_UNSIGNED_BYTE
不使用 GL_UNSIGNED_BYTE,是因为卷积核是floa