查看: 5436|回复: 8

osg::Image的setImage函数的问题!!

[复制链接]

该用户从未签到

发表于 2011-11-9 19:12:12 | 显示全部楼层 |阅读模式
这个函数是这样的
void osg::Image::setImage  ( int  s,  
  int  t,  
  int  r,  
  GLint  internalTextureformat,  
  GLenum  pixelFormat,  
  GLenum  type,  
  unsigned char *  data,  
  AllocationMode  mode,  
  int  packing = 1   
)
其中mode参数有三种:
Enumerator:
NO_DELETE   
USE_NEW_DELETE   
USE_MALLOC_FREE   
想问下,这三种分别是什么意思呢?还有,最后那个packing有什么作用?谢谢、、

该用户从未签到

发表于 2011-11-10 12:58:31 | 显示全部楼层
Image对象在默认时会负责维护data的内存区域,例如在Image对象析构时自动释放data所用的空间。USE_NEW_DELETE即使用new和delete操作符来完成这一操作。而USE_MALLOC_FREE即使用C形式的malloc和free来完成。NO_DELETE表示内存区域不要由Image负责,而是您自己控制

该用户从未签到

 楼主| 发表于 2011-11-11 14:05:57 | 显示全部楼层
array 发表于 2011-11-10 12:58
Image对象在默认时会负责维护data的内存区域,例如在Image对象析构时自动释放data所用的空间。USE_NEW_DELE ...

如果选NO_DELETE,函数就只是把我传入的指针赋给data指针,而不会申请空间,并把数据拷入是么?USE_NEW_DELETE的话,函数就自动申请空间,并拷入数据?

该用户从未签到

发表于 2011-11-12 09:32:36 | 显示全部楼层
内存还是你分配的内存,它自己不会分配,你只是告诉他释放的时候该如何释放。

该用户从未签到

发表于 2011-11-14 09:25:00 | 显示全部楼层
如果您自己传入,那么它不会分配或者复制,而是直接使用您的指针给出的内存区域。如果是allocateImage,那么就会自己分配内存了

该用户从未签到

 楼主| 发表于 2011-11-14 16:34:26 | 显示全部楼层
array 发表于 2011-11-14 09:25
如果您自己传入,那么它不会分配或者复制,而是直接使用您的指针给出的内存区域。如果是allocateImage,那么 ...

哦、、我现在是遇到这样一个问题,我声明了一个osg::image对象,然后渲染每帧的时候,通过摄像头采集图像,并更新到osgImage中data指针指向的内存区域,但是发现,如果不每次调用setImage,显示出来的图像就仅仅停在第一帧。。但是调用setImage的话,cpu使用率就会飙升到很高。。我想问下除了setImage,还有别的方法可以让osgImage更新data数据么?

该用户从未签到

发表于 2011-11-15 12:04:28 | 显示全部楼层
memcpy,然后dirty

该用户从未签到

发表于 2011-11-15 12:05:11 | 显示全部楼层
或者直接把采集缓冲区关联到image,采集完后调用dirty

该用户从未签到

 楼主| 发表于 2011-11-15 15:41:08 | 显示全部楼层
fenma3422 发表于 2011-11-15 12:05
或者直接把采集缓冲区关联到image,采集完后调用dirty

恩,这样确实可以呢~~~很感谢~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表