pjcozzi
12-01-2010, 06:07 AM
Hi,
I have some PBO/texture code that works on NVIDIA but not ATI. On NVIDIA, the scene looks like:
http://miniglobe.sourceforge.net/ATI/Correct.png
On ATI, it looks like the alignment is off:
http://miniglobe.sourceforge.net/ATI/Incorrect.png
This is using a 5400x2700 RGB texture. If I resize the texture to 2700x1350 or add an alpha component, it works on ATI. Perhaps this is related to a bug we discussed a while back: ATI: glTexImage2D with large texture doesn't work (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Main=49106&Number=2523 68).
Here is the code for each texture:
5400x2700 RGB (works on NVIDIA, artifacts on ATI)
glGenBuffers(1,&buffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB,43740000,0 ,GL_STREAM_DRAW);
glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB,0,43740 000,data);
glGenTextures(1,&texture);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,0);
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,5400,2700,0,G L_RGB,GL_UNSIGNED_BYTE,0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,5400,2700,GL_B GR,GL_UNSIGNED_BYTE,0);
glDeleteBuffers(1,&buffer);
2700x1350 RGB (works on both NVIDIA and ATI)
glGenBuffers(1,&buffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB,10935000,0 ,GL_STREAM_DRAW);
glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB,0,10935 000,data);
glGenTextures(1,&texture);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,0);
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,2700,1350,0,G L_RGB,GL_UNSIGNED_BYTE,0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,2700,1350,GL_B GR,GL_UNSIGNED_BYTE,0);
glDeleteBuffers(1,&buffer);
5400x2700 RGBA (works on both NVIDIA and ATI)
glGenBuffers(1,&buffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB,58320000,0 ,GL_STREAM_DRAW);
glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB,0,58320 000,data);
glGenTextures(1,&texture);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,0);
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,5400,2700,0,G L_RGB,GL_UNSIGNED_BYTE,0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,5400,2700,GL_B GRA,GL_UNSIGNED_BYTE,0);
glDeleteBuffers(1,&buffer);
Here are the textures:
5400x2700 RGB: world.topo.200412.3x5400x2700.jpg (http://miniglobe.sourceforge.net/ATI/world.topo.200412.3x5400x2700.jpg) 2700x1350 RGB: world.topo.200412.3x2700x1350.jpg (http://miniglobe.sourceforge.net/ATI/world.topo.200412.3x2700x1350.jpg) 5400x2700 RGBA: world.topo.200412.4x5400x2700.png (http://miniglobe.sourceforge.net/ATI/world.topo.200412.4x5400x2700.png) Original source: NASA Visible Earth (http://visibleearth.nasa.gov/view_rec.php?id=7135)
I thought this could have something to do with my call to glPixelStorei, but I verified the data is indeed 4 byte aligned.
I tested using a Radeon HD 5870 with Catalyst 10.11 on Vista 64.
Thanks,
Patrick
I have some PBO/texture code that works on NVIDIA but not ATI. On NVIDIA, the scene looks like:
http://miniglobe.sourceforge.net/ATI/Correct.png
On ATI, it looks like the alignment is off:
http://miniglobe.sourceforge.net/ATI/Incorrect.png
This is using a 5400x2700 RGB texture. If I resize the texture to 2700x1350 or add an alpha component, it works on ATI. Perhaps this is related to a bug we discussed a while back: ATI: glTexImage2D with large texture doesn't work (http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Main=49106&Number=2523 68).
Here is the code for each texture:
5400x2700 RGB (works on NVIDIA, artifacts on ATI)
glGenBuffers(1,&buffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB,43740000,0 ,GL_STREAM_DRAW);
glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB,0,43740 000,data);
glGenTextures(1,&texture);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,0);
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,5400,2700,0,G L_RGB,GL_UNSIGNED_BYTE,0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,5400,2700,GL_B GR,GL_UNSIGNED_BYTE,0);
glDeleteBuffers(1,&buffer);
2700x1350 RGB (works on both NVIDIA and ATI)
glGenBuffers(1,&buffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB,10935000,0 ,GL_STREAM_DRAW);
glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB,0,10935 000,data);
glGenTextures(1,&texture);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,0);
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,2700,1350,0,G L_RGB,GL_UNSIGNED_BYTE,0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,2700,1350,GL_B GR,GL_UNSIGNED_BYTE,0);
glDeleteBuffers(1,&buffer);
5400x2700 RGBA (works on both NVIDIA and ATI)
glGenBuffers(1,&buffer);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB,58320000,0 ,GL_STREAM_DRAW);
glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB,0,58320 000,data);
glGenTextures(1,&texture);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,0);
glBindTexture(GL_TEXTURE_2D,texture);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,5400,2700,0,G L_RGB,GL_UNSIGNED_BYTE,0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB,buffer);
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,5400,2700,GL_B GRA,GL_UNSIGNED_BYTE,0);
glDeleteBuffers(1,&buffer);
Here are the textures:
5400x2700 RGB: world.topo.200412.3x5400x2700.jpg (http://miniglobe.sourceforge.net/ATI/world.topo.200412.3x5400x2700.jpg) 2700x1350 RGB: world.topo.200412.3x2700x1350.jpg (http://miniglobe.sourceforge.net/ATI/world.topo.200412.3x2700x1350.jpg) 5400x2700 RGBA: world.topo.200412.4x5400x2700.png (http://miniglobe.sourceforge.net/ATI/world.topo.200412.4x5400x2700.png) Original source: NASA Visible Earth (http://visibleearth.nasa.gov/view_rec.php?id=7135)
I thought this could have something to do with my call to glPixelStorei, but I verified the data is indeed 4 byte aligned.
I tested using a Radeon HD 5870 with Catalyst 10.11 on Vista 64.
Thanks,
Patrick