Я реализую настраиваемый фильтр, создающий две строки как вершинный шейдер, а другой - как фрагмент.Ошибки компиляции GPUImage и шейдера
Я нахожусь на ранней стадии, и я просто пытался скомпилировать и запустить программу с пользовательскими шейдерами, просто копируя ту, что используется в GPUImage.
Здесь шейдеры:
NSString *const CustomShaderV = SHADER_STRING
(
attribute vec4 position;
attribute vec4 inputTextureCoordinate;
attribute vec4 inputTextureCoordinate2;
varying vec2 textureCoordinate;
varying vec2 textureCoordinate2;
void main()
{
gl_Position = position;
textureCoordinate = inputTextureCoordinate.xy;
textureCoordinate2 = inputTextureCoordinate2.xy;
}
);
NSString *const CustomShaderF = SHADER_STRING
(
varying highp vec2 textureCoordinate;
varying highp vec2 textureCoordinate2;
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;
uniform highp float bVal;
uniform highp float hVal;
uniform highp float sVal;
void main()
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
lowp vec4 alphaColor = texture2D(inputImageTexture2, textureCoordinate2);
lowp vec4 outputColor;
outputColor = textureColor;
gl_FragColor = outputColor;
}
);
Однако всякий раз, когда я инициализировать фильтр с такими шейдерами моего приложения авария с этим журналом.
2013-11-24 17:58:40.243[865:60b] Shader compile log:
ERROR: 0:1: 'CustomShaderV' : syntax error syntax error
2013-11-24 17:58:40.245[865:60b] Failed to compile vertex shader
2013-11-24 17:58:40.248[865:60b] Shader compile log:
ERROR: 0:1: 'CustomShaderF' : syntax error syntax error
2013-11-24 17:58:40.249[865:60b] Failed to compile fragment shader
2013-11-24 17:58:40.250[865:60b] Program link log: ERROR: One or more attached shaders not successfully compiled
2013-11-24 17:58:40.252[865:60b] Fragment shader compile log: (null)
2013-11-24 17:58:40.253[865:60b] Vertex shader compile log: (null)
шейдеров правильно для меня, так просто вырезать и копировать другие рабочий шейдеров включены в GPUImage проектов.
Вызов внутри кода на двух шейдеры выше выглядит следующим образом:
customFilter = [[GPUImageFilter alloc] initWithVertexShaderFromString:@"CustomShaderV" fragmentShaderFromString:@"CustomShaderF"];
Моя цель состоит в том, чтобы смешать два видео, поэтому две текстуры присутствуют в шейдерах.
Вы пытались скомпилировать строку с содержимым: «CustomShaderF» вместо передачи CustomShaderF переменной? :/Можете ли вы показать сайт вызова для компиляции шейдеров? Я не знаю, как иначе это имя переменной может попасть в шейдерный компилятор в противном случае! – radical
err .. Я имел в виду, «вы пытаетесь скомпилировать строку ..» – radical
@radical вот вызов: customFilter = [[GPUImageFilter alloc] initWithVertexShaderFromString: @ "CustomShaderV" фрагментShaderFromString: @ "CustomShaderF"]; – Kerby82