2016-06-22 23 views
0

を指していないこととJOCLポインタは、私はJavaの持つパラメータとしてイメージを持っているカーネルを使用していたオブジェクトをゼロにするためにJavaのOpenCLの

input ="12.jpg"; 
image = createBufferedImage(input); 
image = createBufferedImage(input); 
DataBufferInt dataBufferSrc = (DataBufferInt)image.getRaster().getDataBuffer(); 
int dataSrc[] = dataBufferSrc.getData(); 
inputImageMem = clCreateBuffer(context, CL_MEM_READ_ONLY| CL_MEM_USE_HOST_PTR, 
      dataSrc.length * Sizeof.cl_uint, Pointer.to(dataSrc), null); 
clSetKernelArg(kernel, 0, Sizeof.cl_mem, Pointer.to(inputImageMem)); 

私はコンパイルするとき、私はエラーを取得:

Pointer may not point to null objects

それはラインの中にあります:

clSetKernelArg(kernel, 0, Sizeof.cl_mem, Pointer.to(inputImageMem)); 

考えられる問題は何ですか?どうすれば修正できますか?

PS:createBufferedImageはOpenCLのclCreateBuffer documentationからJOCLサンプル http://jocl.org/

答えて

1

から取られた機能である:

Returns a valid non-zero buffer object and errcode_ret is set to CL_SUCCESS if the buffer object is created successfully. Otherwise, it returns a NULL value with one of the following error values returned in errcode_ret...

clCreateBuffer関数の最後のパラメータを使用すると、エラーコードをしたいint型のポインタ(あります返される)。現在はnullに設定されています。私の推測では、何かが失敗したのはclCreateBufferです。 errcode_retの値を確認することをお勧めします。問題を解決するのに役立つエラーコードが含まれています。

+0

ドキュメントでは、バッファの値がNULLの場合、errcode_retに返される次のエラー値のいずれかを返してNULLに戻ります。** CL_INVALID_CONTEXT **または** CL_INVALID_VALUE **または** CL_INVALID_BUFFER_SIZE * *または** CL_INVALID_HOST_PTR **または.....ですが、私のコード内にあります。「ポインタがnullオブジェクトを指していない可能性があります」エラーを表示する方法はありますか? –

+0

@ NasimaInfoあなた自身で行う必要があります:エラー値を含むポインタを 'clCreateBuffer'の最後の引数として渡します。私はそれがJavaでどのように動作するかは完全にはわかりません。ポインタはC/C++のものであり、javaはそれらを使用すべきではありません。 JOCL Pointerクラスは、その周りに奇妙なハックのようなものです。整数へのポインタオブジェクトを作成し、 'clCreateBuffer'の最後の引数として渡し、何らかのエラーコードと等しいかどうかを確認してください...?私は本当にJavaの専門家やポインタの専門家ではありません。 – Kilves

+0

'あなたがPointer.to()を呼び出しているので、ポインタがnullオブジェクトの論理を指していない可能性があります。ポインタはあなたにエラーを与えるものです。しかし、ソースはclCreateBuffer()にあります – DarkZeros

関連する問題