2011-06-20 8 views
1

これは簡単な質問に終わることを願っています。Jogl gldrawpixels()problem

NetbeansでJOGLを使用して、各行/ colのタイルの数と各タイルの色を指定できるピクセルのチェッカーボードを作成しています(このタイルを0アルファで描画し、完全なアルファを持つタイル)。スピードは問題でも効率性でもありません。

ここに私の問題があります:glDrawPixels()を使用しようとすると、glCanvasはまばらに塗りつぶされてしまいます。あなたが見ることができるように、私は現在、より複雑なものに移行する前に、作品の単純なケースを取得しようとしています。 1Dバイトの配列に塗りつぶされたバイトの値を埋めます。次に、これをglDrawPixels()に渡してカラーバッファに書き込みます。

バイト配列を正しく処理していませんか?実際には(私が見てきたいくつかのチュートリアルとは対照的に)、このメソッドは実際のデータのためのバッファの形式しか取らないので、バイト配列をラップしたのです。

また、この方法では、指定したサイズの2倍のデータが必要になると思われます。たとえば、高さで幅の領域を管理するように指示していますが、バイト配列が実際には高さの2倍の幅の2倍でない限り、例外がスローされます。

ピクセルを管理する正しい方法だと読んだので、glDrawPixels()を使用しています。

 byte[] src = new byte[(width*2)*(height*2)]; 

     for(int a=0; a<height*2; a++){ 
      for(int b=0; b<width*2; b++){ 
       src[a*b+b]= 127; 
      } 
     } 

     gl.glDrawPixels(width, height, 
       GL.GL_RED, GL.GL_UNSIGNED_BYTE, 
       ByteBuffer.wrap(src)); 

幅ノートと高さは私のキャンバス(256×256)の大きさなので、この操作は、キャンバス全体の面積を取る必要があります。

本当にありがとうございます。私はまったく別のアプローチ(JOGLの使用を意味する限り)を含むソリューションでうまくいく。それは断片シェーダでこれをやってはいけないと言われています。御時間ありがとうございます。

+0

実際glDrawPixelsがdepreceatedさ:

だからこれに変更します。 – datenwolf

答えて

4

バッファレイアウトが間違っています。 n×m画素とkバイト/画素の画像は、n×m×k個の要素を有する。また、バッファにアクセスするにはwidth * y + x要素を前進させる必要があります。正しいバッファサイズとパラメータが渡されたにもかかわらず、バッファのオーバーランが発生するのは、間違ったピクセルアンパック設定によるものです。

byte[] src = new byte[width*height]; 

    for(int a=0; a<height; a++){ 
     for(int b=0; b<width; b++){ 
      src[a*width+b]= 127; 
     } 
    } 

    gl.glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    gl.glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); 
    gl.glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); 

    gl.glDrawPixels(width, height, 
      GL.GL_RED, GL.GL_UNSIGNED_BYTE, 
      ByteBuffer.wrap(src)); 
+0

私は今これを試してみようとしています。 – viperld002

+0

はい、これはすべてを修正します。あなたのソリューションをありがとうと私を教育していただきありがとうございます。 – viperld002