我正在学习objective-c而且我很满意以下问题: 在我的应用程序中,我想将一个类从一个类发送到我的着色器,它将在其代码中使用它。我花了几个小时阅读帖子,我知道我要使用glUseProgram,glGetUniformLocation和glUniform1f,但我不明白如何实现它们。
这是我启动过滤器的方式
GPUImageFilter *customFilter = [[GPUImageFilter alloc] initWithFragmentShaderFromFile:@"CustomFilter"];
在这里我想如何将浮动作为一个统一的
传递glUseProgram(customFilter);
GLint myUniformLocation = glGetUniformLocation(customFilter, "myUniform");
glUniform1f(myUniformLocation, 0.345f);
错误告诉我,我有一个与整数转换不兼容的指针。我该如何解决这个问题呢?
答案 0 :(得分:2)
您需要Shader程序的句柄,而不是指向GPUImageFilter实例的指针。 指向GPUImageFilter的指针是它在内存中的地址,着色器程序的句柄是OpenGL用来识别着色器程序的索引。
通过GPUImage Source读取,它看起来不像GPUImageFilter支持任意制服。您需要做的是将GPUImage过滤器子类化以添加该功能。
请查看GPUImageExposureFilter.h和GPUImageExposureFilter.m,了解如何做到这一点的良好开端。