-1

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

那么我可以使纹理的过滤(当双线性采样时)是伽玛正确的吗?

注意:我知道我可以使用 4 个纹理抽头和 lerping 实现手动双线性过滤,但这会在一定程度上损害性能,所以我正在寻找更好的方法。

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

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

我需要支持 OpenGL ES 2.0。

4

1 回答 1

0

注意:我知道我可以使用 4 个纹理抽头和 lerping 实现手动双线性过滤,但这会在一定程度上损害性能,所以我正在寻找更好的方法。

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

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

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

于 2017-09-01T12:43:00.323 回答