2017-08-31 33 views
-1

如果这是我创建的纹理,我只是简单地使其内部格式为GL_SRGB。但我将Qt Quick Itemfoo加入到我的自定义QQuickFramebufferObject GL代码中,其中我采用foo->textureProvider()->texture()并使用该纹理进行渲染。从项目中提取纹理:我可以使其过滤为伽玛校正吗?

所以我可以做纹理过滤(当双线性取样时)伽马校正?

注意:我知道我可以实现手动双线性过滤4纹理水龙头和lerping,但这会损害性能有点,所以我正在寻找一个更好的方法。

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

我已经搜索谷歌的钩子Qt可能会提供配置这个,但没有发现除了QQuickTextureFactory,但没有解决我的问题,至少AFAICS。

我需要支持OpenGL ES 2.0。

+0

这怎么可能“太宽泛”? –

+1

某人应该如何回答你的问题?为您提供代码/现有代码的链接?向你展示如何做到这一点的教程?所有这些对于SO来说都是不适当的(太广泛/不是主题)。请显示你的尝试。 – m7913d

+0

@ m7913d:Thx指出为什么我会收到选票。如果代码太多而无法提出要求,我会很高兴看到我需要采取的步骤的文字说明。或者只是一些宽泛的指针。我添加了关于这个主题的无用搜索的信息。如果谷歌搜索没有产生相关的Qt钩子,我就没有办法尝试自己了,因为(a)我不想**改变纹理的内部格式(这会很慢,并且深入到Qt内部) ,(b)我不能更改internalFormat的初始化,因为它发生在Qt代码中。 –

回答

0

注意:我知道我可以实现手动双线性过滤4个纹理水龙头和幼体,但这会损害性能,所以我正在寻找更好的方法。那么,即使知道插值因子,从过滤的结果颜色中,根本没有办法找回用作输入的原始颜色。或者我可以从Qt Quick纹理blit到我自己的GL_SRGB纹理,然后使用该纹理,但是这更复杂,并且每当源纹理更新时都需要发生,损害性能(和RAM用法)。

这种策略的一种更有效的变化将是创建第二视图到纹理数据,用SRGB格式(参见GL_ARB_texture_view extension,由于GL 4.3芯),它完全避免了复制和附加RAM的使用。

+0

“那么,从过滤后的结果颜色中,根本无法找回用作输入的原始颜色” - 但是如果我放置()texCoords并使用GL_NEAREST过滤,我可以。 “纹理视图”似乎是一个完美的解决方案,但我需要支持OpenGL ES 2.0,并且纹理视图[在ES 3.1中引入](https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_texture_view。文本)。 –

+0

是的。我不是说不能通过过滤来实现。我只是想明确说明,在一个人已经(错误地)过滤结果之后没有多少人能够做到,一个人必须在以前/未经过任何过滤之前获取这些值。这真的不是一个更好的方法。而对于ES 2.0,我真的没有看到太多选择。 – derhass

相关问题