0

私は、Github.Here の Brad Larson のチュートリアルから始めました。これらのコードをプロジェクトに追加したとき

- (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];
}

メソッドでクラッシュしました - (id)initWithVertexShaderFromString:(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 が有効にリンクするには、正確に 1 つの頂点と 1 つのフラグメント シェーダーが必要です」が何なのかわかりません。という意味です。(CustomShader.fsh ファイルが見つかりません)

誰でも助けてください..どうもありがとう..

4

1 に答える 1

3

上記のコードは、カスタム フラグメント シェーダー ファイル (この場合は CustomShader.fsh) からフィルターを作成しようとします。これが機能するには、プロジェクトにその名前のファイルが必要であり、それがソースのコンパイル ビルド フェーズではなく、プロジェクトのリソース コピー ビルド フェーズにあることを確認する必要があります。また、プロジェクトで期待されるスタイルの有効なフラグメント シェーダーである必要があります。MultiViewFilterExample には、これらの 1 つがあります。

これは、フィルター用に独自のカスタム フラグメント シェーダーを作成する場合にのみ必要であることに注意してください。別の方法として、フレームワークに付属している 100 以上の他のフィルターのいずれかを使用して、このプロセスを回避することができます。

于 2013-08-04T21:43:17.777 に答える