2013-08-04 55 views
0

當有一個碰撞,我從布拉德·拉爾森的教程Github.Here開始時,我添加了這些代碼到我的項目使用GPUImageFilter

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

GPUImageVideoCamera *videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack]; 
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait; 
GPUImageFilter *customFilter = [[GPUImageFilter alloc] initWithFragmentShaderFromFile:@"CustomShader"]; 
GPUImageView *filteredVideoView = [[GPUImageView alloc] initWithFrame:self.view.bounds]; 

[self.view addSubview:filteredVideoView]; 

[videoCamera addTarget:customFilter]; 
[customFilter addTarget:filteredVideoView]; 

[videoCamera startCameraCapture]; 
} 

,我得到了在方法崩潰 - initWithVertexShaderFromString(ID):(的NSString *)vertexShaderString fragmentShaderFromString :(NSString *)fragmentShaderString;

隨着輸出如下日誌:

013-08-04 17:17:37.567 ViewPack[36088:907] Failed to load vertex shader 
2013-08-04 17:17:37.570 ViewPack[36088:907] Failed to compile fragment shader 
2013-08-04 17:17:37.572 ViewPack[36088:907] Program link log: ERROR: OpenGL ES 2.0  requires exactly one vertex and one fragment shader to validly link. 
2013-08-04 17:17:37.573 ViewPack[36088:907] Fragment shader compile log: (null) 
2013-08-04 17:17:37.574 ViewPack[36088:907] Vertex shader compile log: (null) 
2013-08-04 17:17:37.576 ViewPack[36088:907] *** Assertion failure in -[GPUImageFilter initWithVertexShaderFromString:fragmentShaderFromString:], /Users/dachang/Desktop/Files/Libs/GPUImage-master/framework/Source/GPUImageFilter.m:97 

我想我已經正確添加GPIImage到我的項目,因爲我做的可以導入所有的頭。我不知道'OpenGL ES 2.0只需要一個頂點和一個片段着色器來有效鏈接。'意味着(我無法找到CustomShader.fsh文件)

可有人請help..thanks很多..

回答

3

上面的代碼試圖創建從定製片段着色器文件的過濾器(在這種情況下, CustomShader.fsh)。爲此,您需要在項目中使用該名稱的文件,並且需要確保它處於項目的複製資源構建階段,而不是編譯源構建階段。它也必須是項目預期樣式的有效片段着色器。 MultiViewFilterExample有其中之一。

我應該注意到,這隻有在您需要爲過濾器創建自己的自定義片段着色器時才需要。或者,您可以使用框架附帶的100多種其他過濾器之一,並避免此過程。

+0

因此,目前看來我並不需要使用.fsh。框架中的100多個過濾器足夠好。百萬感謝布拉德。 – jokerdc