您当前的位置: 首页 > 

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

opengl GPU 纹理加速优化

qianbo_insist 发布时间:2021-09-28 21:28:21 ,浏览量:0

1、使用线性拉伸
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

GL_TEXTURE_MAG_FILTER 和 GL_TEXTURE_MIN_FILTER分别为放大和缩小时使用的过滤算法,如果使用GL_NEAREST,速度会更快一些,使用LINEAR会使用四个像素均值来计算像素点,因此画面会更平滑,但是会稍暗,不加分辨看不出来。 如下左图为GL_LINEAR,显然平滑度比较高 GLLinear 和 nearest

2、使用Mipmap
首先产生纹理后必须要告诉GPU进行层次化纹理生成
glGenerateMipmap(GL_Texture_2D);

使用mipmaps也很简单,设置过滤参数为以下4种中的任意一种:
GL_NEAREST_MIPMAP_NEAREST:   最邻近的mip层,并使用最邻近过滤。
GL_NEAREST_MIPMAP_LINEAR:    对两个mip层使用最邻近过滤后的采样结果进行加权平均。
GL_LINEAR_MIPMAP_NEAREST:    选择最邻近的mip层,使用线性插值算法进行过滤。
GL_LINEAR_MIPMAP_LINEAR:     对两个mip层使用线性插值过滤后的采样结果进行加权平均,又称三线性mipmap。

在实际不断地变化movie纹理产生的情况下,三线性纹理不可取,会使得亮度降低。 使用硬件 产生层次纹理

glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

对于是动态的变化纹理和经常拉伸的图像来说,可以使用Mipmap,最好的方式为:

GL_LINEAR_MIPMAP_NEAREST

有人可能会问为什么不是GL_LINEAR_MIPMAP_LINEAR,这里给出原因, 1 、GL_LINEAR已经对图像进行了线性加权平均,在选择层次的时候NEAREST时最快的,而且图像不会发暗太多。兼顾了效率和效果,但是在高分辨率图像显示时,没有必要使用GL_LINEAR,反而是GL_NEARST 更为实际,因为GL_NEARST 速度更快,这时几乎没有损失,所以参数都是要灵活选择的。 2、 动态图像播放使用GL_LINEAR_MIPMAP_LINEAR是不合适的,会产生图像上的错误和滞留。

3、层级指定

指定需要加载0到4层级的纹理: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4); 另外,GL_TEXTURE_MIN_LOD和GL_TEXTURE_MAX_LOD 可以来限制纹理的使用范围。

关注
打赏
1663161521
查看更多评论
立即登录/注册

微信扫码登录

0.4884s