从Item中获取的纹理:我可以将其过滤设为伽马校正吗?

时间:2017-08-31 13:35:57

标签: qt opengl qtquick2 gamma bilinear-interpolation

如果这是我创建的纹理,我只需将其internalFormat设为GL_SRGB。但是我将Qt Quick Item foo传递到我的自定义QQuickFramebufferObject GL代码中,我在其中foo->textureProvider()->texture()使用该纹理进行渲染。

那么我可以对纹理进行滤波(当双线性采样时)是伽马校正的吗?

注意:我知道我可以用4个纹理水龙头和lerping实现手动双线性过滤,但这会对性能造成一定影响,所以我正在寻找更好的方法。

或者我可以从Qt Quick纹理到我自己的GL_SRGB纹理,然后使用该纹理,但这更复杂,并且每次更新源纹理时都需要发生,伤害性能(和RAM使用)。

我已经搜索了谷歌寻找钩子Qt可能提供配置这个,但除了QQuickTextureFactory之外什么都没找到,但是,这不能解决我的问题,至少是AFAICS。

我需要支持OpenGL ES 2.0。

1 个答案:

答案 0 :(得分:0)

  

注意:我知道我可以用4个纹理水龙头和lerping实现手动双线性过滤,但这会对性能造成一定影响,所以我正在寻找更好的方法。

嗯,从过滤后的结果颜色来看,即使您知道插值因子,也根本无法找回用作输入的原始颜色。

  

或者我可以从Qt Quick纹理到我自己的GL_SRGB纹理,然后使用该纹理,但这更复杂,并且每次更新源纹理时都需要发生,从而损害性能(和RAM使用情况)。

此策略的更有效变体是在纹理数据上创建第二个视图,格式为SRGB(参见GL_ARB_texture_view extension,核心自GL 4.3),这完全避免了复制和额外的RAM使用。