opengl中使用两个PBO进行纹理更新,哪位大神懂?
opengl中使用两个PBO进行纹理更新,内存中的像素数据怎么也更新不进去,哪位大神懂?
其中imagedata是内容为空的指针,用glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, WIDTH, HEIGHT,
GL_BGRA, GL_UNSIGNED_BYTE, 0);更新纹理数据, if (ptr){}中我是使用了MF GDI获取桌面试试图像,然后把桌面图像从内存DC中保存到ptr中,这样做的结果就是显示不出来图像 也就是会所数据根本没更新到纹理内存中,,,,我觉得主要问题应该在if ptr中,这里我把ptr当成一个普通的内存指针用,不知道这样可以么?有大神懂么 求解答。分不够可以加 求解答啊求解答
glewinit();
glGenBuffersARB(2, pboIds);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboIds[0]);glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, DATA_SIZE, 0, GL_STREAM_DRAW_ARB);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboIds[1]);
glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, DATA_SIZE, 0, GL_STREAM_DRAW_ARB);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
static int index = 0;
int nextIndex = 0;
index = (index + 1) % 2;
nextIndex = (index + 1) % 2;
glBindTexture(GL_TEXTURE_2D, textureId);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboIds[index]);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboIds[nextIndex]);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, WIDTH, HEIGHT,
GL_BGRA, GL_UNSIGNED_BYTE, 0);
glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, DATA_SIZE, 0, GL_STREAM_DRAW_ARB);
GLubyte* ptr = (GLubyte*)glMapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY_ARB);
if(ptr){
*******//getedata();
}
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0);glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, IMAGE_WIDTH, IMAGE_HEIGHT, 0, PIXEL_FORMAT, GL_UNSIGNED_BYTE, (GLvoid*)imageData);
glBindTexture(GL_TEXTURE_2D, 0);
其中imagedata是内容为空的指针,用glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, WIDTH, HEIGHT,
GL_BGRA, GL_UNSIGNED_BYTE, 0);更新纹理数据, if (ptr){}中我是使用了MF GDI获取桌面试试图像,然后把桌面图像从内存DC中保存到ptr中,这样做的结果就是显示不出来图像 也就是会所数据根本没更新到纹理内存中,,,,我觉得主要问题应该在if ptr中,这里我把ptr当成一个普通的内存指针用,不知道这样可以么?有大神懂么 求解答。分不够可以加 求解答啊求解答
...全文
相关推荐
opengl 的pbo的使用程序
在实际应用中,PBO通常与纹理对象(Texture Objects)一起使用,用于快速上传纹理数据或获取帧缓冲区的内容。
使用OpenGL ES对YUV图片进行显示
总的来说,使用OpenGL ES显示YUV图片是一个涉及数据解析、颜色空间转换、纹理操作和图形渲染的综合过程。
Qt与OpenGL结合:实现基础图形渲染及纹理处理
内容概要:本文档详细介绍了如何在Qt框架中利用OpenGL实现基本的图形渲染及其纹理处理。首先,通过VAO、VBO、EBO、PBO的使用,讲解了顶点数据的管理与传输;接着深入探讨了纹理的应用,涵盖单个
show_uyvy422_using_PBO.zip
- 渲染:设置纹理参数,将PBO作为纹理源,使用着色器将YUV数据转换并显示为RGB图像。5.
LearnOpenGL(二十一)之 PBO(像素缓冲区对象)
像素缓冲区对象通常用于图像处理和渲染中,能够提高渲染性能和优化内存使用。例如,在处理动态纹理更新的场景中,PBO可以用来实现高效的数据传输,减少CPU到GPU的数据拷贝次数。


图形处理/算法

