请教如何把下面代码的fo循环改成OpenGL gpu运算,而不是cpu运算。
Ps: 麻烦各位老哥给出可用的代码,不要用ai的回答来回复,谢谢。
void CVideoTrackSource::FlipTextureFromTextureId(unsigned int textureId, int width, int height)
{
glBindTexture(GL_TEXTURE_2D, m_TextureId);
// 这里拷贝图片数据从 textureId 到 m_TextureId
glCopyImageSubData(textureId, GL_TEXTURE_2D, 0, 0, 0, 0, m_TextureId, GL_TEXTURE_2D, 0, 0, 0, 0, width, height, 1);
int pixelSize = 4;
unsigned char* data = new unsigned char[width * height * pixelSize];
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
// 这里从 y 轴翻转数据(这段代码需要改成到 GPU 上运行)
for(int y = 0; y < height / 2; y++)
{
for(int x = 0; x < width; x++)
{
int index1 = (y * width + x) * pixelSize;
int index2 = ((height - y - 1) * width + x) * pixelSize;
for(int i = 0; i < pixelSize; i++)
{
std::swap(data[index1 + i], data[index2 + i]);
}
}
}
// 这里设置 m_TextureId 的 翻转 后的数据
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
glBindTexture(GL_TEXTURE_2D, 0);
delete[] data;
}