2013-11-24 3 views
0

Я реализую настраиваемый фильтр, создающий две строки как вершинный шейдер, а другой - как фрагмент.Ошибки компиляции 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"]; 

Моя цель состоит в том, чтобы смешать два видео, поэтому две текстуры присутствуют в шейдерах.

+0

Вы пытались скомпилировать строку с содержимым: «CustomShaderF» вместо передачи CustomShaderF переменной? :/Можете ли вы показать сайт вызова для компиляции шейдеров? Я не знаю, как иначе это имя переменной может попасть в шейдерный компилятор в противном случае! – radical

+0

err .. Я имел в виду, «вы пытаетесь скомпилировать строку ..» – radical

+0

@radical вот вызов: customFilter = [[GPUImageFilter alloc] initWithVertexShaderFromString: @ "CustomShaderV" фрагментShaderFromString: @ "CustomShaderF"]; – Kerby82

ответ

2

Основываясь на комментарий по ОП,

здесь вызов: customFilter = [[GPUImageFilter Alloc] initWithVertexShaderFromString: @ fragmentShaderFromString "CustomShaderV": @ "CustomShaderF"];

ошибка в том, что переменная имя цитировался и используется в качестве строки. Фикс был:

Изменение, что: [[GPUImageFilter Alloc] initWithVertexShaderFromString: CustomShaderV fragmentShaderFromString: CustomShaderF];

Смежные вопросы