纹理对象和采样器对象->CUDA3.0&OpenGL3.3


  在OpenGL3.3中先加入了采样器对象( sampler object ),记得以前做OpenGL程序的时候,有时会遇到需要相同的纹理数据只是filter模式不同而已,但当时由于不支持多个不同属性集共享同一个纹理对象,因此必须分别建立2个不同的纹理对象(当然使多个纹理对象共享同一个pixel buffer来达到此目的),显得很笨拙和浪费。新加入的采样器对象就使这个工作变得容易且合乎逻辑和直觉的“美感”
一个采样器对象实际上时定义了诸如过滤,寻址模式等属性,但不包括纹理的宽度和高度。之所以这样也是想当然的,因为通常采样器可以为多个纹理对象共享,当这些纹理对象的纹理内存尺寸不同时也不会造成歧义。
 
使用过程大致如下:

view plaincopy to clipboardprint?
glGenSamplers( 1, &samplerID );  
 
 
glSamplerParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );  
 
glSamplerParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );  
 
//set orther sampler attributes  
 
 
glActiveTexture( GL_TEXTURE0 );  
 
glBindSampler( GL_TEXTURE0, samplerID );   
  
glActiveTexture( GL_TEXTURE1 );  
 
glBindSampler( GL_TEXTURE1, samplerID );   
  
... 
    glGenSamplers( 1, &samplerID );

    glSamplerParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glSamplerParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    //set orther sampler attributes

    glActiveTexture( GL_TEXTURE0 );
    glBindSampler( GL_TEXTURE0, samplerID );

 
    glActiveTexture( GL_TEXTURE1 );
    glBindSampler( GL_TEXTURE1, samplerID );
    ...

一个采样器可以被多个纹理单元共享,且当该采样器对象的属性改变时,将影响所有与之关联的纹理单元锁绑定的纹理对象:如上代码,将一个采样器对象绑定到两个不同的纹理单元,假设这两个纹理单元分别于纹理对象tex0, tex1绑定,那么tex1和tex2将具有相同的过滤和寻址模式,且tex1,tex2不需要具有相同的尺寸。当关联到到同一个采样器对象的多个纹理具有相同的尺寸,数据类型以及通道数时(虽然这实际上不是必须的,因为诸如glTexImage2D这样的函数提供了internalFormat和format参数可以确保程序正确执行,但出于谨慎和正确性考虑也应如此),那么这个特点另一个隐藏的价值就是前面所说的可以共享同一个数据源。

  这个特性也被引入到CUDA3.0中,
在PTX 1.*之前,需要这样声明纹理:
view plaincopy to clipboardprint?
    .tex .u32 texid  
 
 
CUDA3.0为了向前兼容也继续提供支持,但不被推荐。3.0中纹理的使用分为统一模式( unified mode )和正交模式( independent mode ),在 PTX 中:   
 
.target texmode_independent //if nessesary   
  
.global .texref texRef;  
 
.global .samplerref sampler={ addr_mode0=clamp, addr_mode1=clamp, filter_mode=linear };   
...  
 
 
//纹理对象texRef再从纹理内从取数据时将使用线性滤波和夹持寻址模式(注意与纹理内存绑定的是texRef对象,  
 
//sampler只是设置了与之关联的纹理对象的属性集)  
 
tex.2d.v4.f32.f32 { %f0, %f1, %f2, %f3 }, [ texRef, sampler, { %r0, %r1 } ]; 
 
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/Cyrosly/archive/2010/03/30/5431963.aspx

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23056049/viewspace-630805/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23056049/viewspace-630805/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值