2013-02-15 111 views
2

這是我的印象(以及this question的答案似乎證實了這一點),我可以從GPUImageTwoPassFilter繼承,以便在圖像上連續有效地運行兩個片段着色器,但將所有代碼和這些代碼限制在一個類中。但是,在我的實驗中,似乎沒有編譯過第二個片段着色器,執行得更少;下面的示例構建並運行時沒有投訴。生成的圖像看起來就像只有第一個片段着色器在單一着色器類中運行一樣。GPUImage雙通道濾鏡 - 第二個frag着色器永遠不會運行?

這裏可能會出現什麼問題?在GPUImageTwoPassFilter的子類GPUImage代碼庫中找到的所有示例都只是對每次傳遞使用相同的片元着色器程序(如GPUImageGaussianBlurFilter中的),這並沒有幫助。

#import "BFTwoPassTest.h" 

NSString *const kBFTwoPassTestFirstFragmentShaderString = SHADER_STRING 
(
varying highp vec2 textureCoordinate; 
uniform sampler2D inputImageTexture; 

void main() 
{ 
    lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate); 
    gl_FragColor = vec4(1.0, textureColor.g, textureColor.b, 1.0); 
} 
); 


NSString *const kBFTwoPassTestSecondFragmentShaderString = SHADER_STRING 
(
varying highp vec2 textureCoordinate; 
uniform sampler2D inputImageTexture; 

void main() 
{ 
    This should be an obvious syntax error. 
} 
); 


@implementation BFTwoPassTest 

- (id)init { 
    self = [self initWithFirstStageFragmentShaderFromString:kBFTwoPassTestFirstFragmentShaderString secondStageFragmentShaderFromString:kBFTwoPassTestSecondFragmentShaderString]; 
    if (self) { 

    } 
    return self; 
} 


@end 

回答

1

糟糕,GPUImageTwoPassFilter.m第55行有一個錯誤。下面一行:

if (!(self = [self initWithFirstStageVertexShaderFromString:kGPUImageVertexShaderString firstStageFragmentShaderFromString:firstStageFragmentShaderString secondStageVertexShaderFromString:kGPUImageVertexShaderString secondStageFragmentShaderFromString:firstStageFragmentShaderString])) 

應該已經

if (!(self = [self initWithFirstStageVertexShaderFromString:kGPUImageVertexShaderString firstStageFragmentShaderFromString:firstStageFragmentShaderString secondStageVertexShaderFromString:kGPUImageVertexShaderString secondStageFragmentShaderFromString:secondStageFragmentShaderString])) 

感謝您指出了這一點,它現在應該固定在庫中。但是,將來我可能會建議將這樣的特定框架問題發佈到GitHub issues page for the project而不是這裏?

+1

如果我認爲這是框架中的一個錯誤的結果,而不僅僅是我誤解了事情,我會使用GitHub問題。無論如何,我拉你的代碼,現在我有兩個着色器按預期運行。謝謝。 – 2013-02-16 06:24:19

+0

@GarrettAlbright - 我只是指出了這一點,因爲我很快就會看到這是一個GitHub問題。我收到所有直接寄給我的郵件,但我必須在這裏搜索這些東西。我仍然感謝你指出。 – 2013-02-16 17:20:03