-
glTexSubImage 填满了整张图片:
GLfloat* pData = new GLfloat[1024*768*4];
memset(pData, 0x00, 1024*768*4*sizeof(GLfloat));
glBindTexture(GL_TEXTURE_2D, m_ImageTex);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1024, 768, GL_RGBA, GL_FLOAT, pData);
glBindTexture(GL_TEXTURE_2D, 0);
delete pData;
-
使用Pixel Buffer从gpu复制数据,这种方法更快更好
我。初始化PBO
glGenBuffers(1, &m_PixelBuffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, m_PixelBuffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER, SCREEN_WIDTH*SCREEN_HEIGHT*4*sizeof(GLfloat), NULL, GL_STATIC_DRAW);
GLfloat* pData = nullptr;
pData = (GLfloat*)glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
memset(pData, 0x00, 1024*768*4*sizeof(GLfloat));
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
ii.
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, m_PixelBuffer);
glBindTexture(GL_TEXTURE_2D, m_ImageTex);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, GL_RGBA, GL_FLOAT, NULL);
glBindTexture(GL_TEXTURE_2D, 0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);