如何将制服传递到着色器

时间:2013-12-02 20:54:57

标签: ios objective-c glsl shader

我正在学习objective-c而且我很满意以下问题: 在我的应用程序中,我想将一个类从一个类发送到我的着色器,它将在其代码中使用它。我花了几个小时阅读帖子,我知道我要使用glUseProgram,glGetUniformLocation和glUniform1f,但我不明白如何实现它们。

这是我启动过滤器的方式

GPUImageFilter *customFilter = [[GPUImageFilter alloc] initWithFragmentShaderFromFile:@"CustomFilter"];

在这里我想如何将浮动作为一个统一的

传递
glUseProgram(customFilter);
GLint myUniformLocation = glGetUniformLocation(customFilter, "myUniform");
glUniform1f(myUniformLocation, 0.345f);

错误告诉我,我有一个与整数转换不兼容的指针。我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:2)

您需要Shader程序的句柄,而不是指向GPUImageFilter实例的指针。 指向GPUImageFilter的指针是它在内存中的地址,着色器程序的句柄是OpenGL用来识别着色器程序的索引。

通过GPUImage Source读取,它看起来不像GPUImageFilter支持任意制服。您需要做的是将GPUImage过滤器子类化以添加该功能。

请查看GPUImageExposureFilter.hGPUImageExposureFilter.m,了解如何做到这一点的良好开端。