• 7744阅读
  • 4回复

[提问]glReadPixels()在win32平台和x64平台上的表现不一样??? [复制链接]

上一主题 下一主题
离线wjz2047
 

只看楼主 正序阅读 楼主  发表于: 2014-05-19
我电脑是win7 64位的,用vs2010调试一个win32程序,ok。然后我把平台换成x64,Rebuild,调试发现问题。下面贴出部分代码:
vector<float> sift_buffer;
//经过其他操作,sift_buffer被赋值
float * buffer1 = &sift_buffer[0];
glReadPixels(0, 0, 16, (_num_sift[0] + 15)/16, GL_RED, GL_FLOAT, buffer1);
通过调用glReadPixels函数,sift_buffer中的值会被更改。
我查看了下,在win32和x64平台下,传给glReadPixels函数的sift_buffer值是一样的,但是经过glReadPixels函数后,sift_buffer值不再一样。开始一部分数据都一样,但后来数据发生了偏移,win32下sift_buffer[686]、sift_buffer[687]、sift_buffer[688]和x64下的sift_buffer[688]、sift_buffer[689]、sift_buffer[690]对上了。后面的数据也有很多是偏移的。请问这是什么原因导致的呢?
离线wjz2047

只看该作者 4楼 发表于: 2014-06-12
回 realfan 的帖子
realfan:不建议float * buffer1 = &sift_buffer[0];的用法。
容器有可能重新分配空间,导致地址变化的。
你换成float数组,把数组的指针传给glReadPixels,看问题还存在吗. (2014-06-12 09:49) 

很久以前的帖子了,我最后归结为显卡问题,放弃了64位编程。感谢版主回复,有空试试
离线realfan

只看该作者 3楼 发表于: 2014-06-12
不建议float * buffer1 = &sift_buffer[0];的用法。
容器有可能重新分配空间,导致地址变化的。
你换成float数组,把数组的指针传给glReadPixels,看问题还存在吗.
离线wjz2047

只看该作者 2楼 发表于: 2014-05-22
不知道opengl中有没有能实现glReadPixels同样功能的其他函数呢
离线wjz2047

只看该作者 1楼 发表于: 2014-05-20
快速回复
限100 字节
 
上一个 下一个