ios - 为 GPUImage 创建耗时的制服

标签 ios objective-c opengl-es glsl gpuimage

我正在与 Brad Larson 的 GPUImage 合作,我发现这真的很棒。为了灵 active 和易于编写,我创建了一个具有 3 个统一输入的自定义过滤器。我将其基于 GPUImageBrightnessFilter.h 和 .m。一个 uniform 只是一个“参数” float ,一个是“中心”CGPoint,如果我需要它们可以输入触摸坐标,还有一个是时间 float ,它是自着色器启动以来耗时量。我正在使用 initWithFragmentShaderFromFile 来使用我自己的着色器文件。

我的“参数”和“中心”制服有效。时间制服是行不通的,因为我不明白如何创造一个不断变化的制服(就像时间一样)。

我的时间统一的目标似乎与 SpriteKit 的 u_time 相似。它返回自当前着色器运行以来的秒数,您可以将其输入自定义着色器以对其进行动画处理。一个非常简单的示例用途可能是随着时间的推移循环图像的色调。随着我对 GLSL 知识的增长,我希望以更复杂的方式构建它。

我不确定要发布什么代码,因为我的误解可能存在于很多地方,而且可能是我正在尝试做一些不可能的事情。这篇关于设置开始时间并从 CACurrentMediaTime() 中减去它的帖子似乎是一个不错的起点:

Getting the time elapsed (Objective-c)

问题是我不确定如何不断更新制服以传递到我的着色器。我是否在我的自定义过滤器的 setter 中执行它有时间?自定义 setter 不是只执行一次吗?我是否在我的 init 覆盖中这样做?那不是只执行一次吗?我是否在我的 Controller 中编写了一个不断调用 setter 的循环?这似乎是一个昂贵且困惑的解决方案。

我不是要代码,只是建议引导我朝着正确的方向前进,或者让我远离我思考中的任何错误方向。

最佳答案

提出这个问题帮助我找到了解决方案并了解了 NSTimer。我将一个创建重复 NSTimer 的方法合并到我自定义的 GPUImageFilter 子类中,该子类将时间统一传递给着色器。它调用一个选择器来增加我的“时间”变量并将其传递到统一数组中。

关于ios - 为 GPUImage 创建耗时的制服,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34026511/

相关文章:

android - 如何获取 URL Scheme myapp ://to work with Instagram API redirect uri

iphone - 如何改善我的应用程序的启动时间?

objective-c - 有没有办法强制在 NSArray、NSMutableArray 等上输入?

iphone - 视网膜显示屏图像质量问题

ios - 将 Firebase 值(Int)转换为字符串会导致错误

ios - 在没有播放按钮覆盖的情况下在 ios 中显示 html5 视频

ios - 游戏中心排行榜未出现在游戏的生产版本中?

java - iOS 中的 RSA SHA256 签名和 Java 上的验证

c++ - 如何使用 OpenGL 交叉编译 UnixBench?

android - 在Android的OpenGL ES中运行时创建大型纹理的最有效方法