OSDN Git Service

Merge branch 'git-svn'
[nyartoolkit-and/nyartoolkit-and.git] / tags / 1.2.0 / sample / jogl / jp / nyatla / nyartoolkit / jogl / utils / GLNyARRaster_RGB.java
1 /**\r
2  * NyARRaster_RGBにOpenGL用のデータ変換機能を追加したものです。\r
3  * \r
4  * (c)2008 A虎@nyatla.jp\r
5  * airmail(at)ebony.plala.or.jp\r
6  * http://nyatla.jp/\r
7  */\r
8 package jp.nyatla.nyartoolkit.jogl.utils;\r
9 \r
10 import javax.media.format.RGBFormat;\r
11 import javax.media.opengl.GL;\r
12 import jp.nyatla.nyartoolkit.NyARException;\r
13 import jp.nyatla.nyartoolkit.jmf.utils.*;\r
14 import jp.nyatla.nyartoolkit.core.*;\r
15 \r
16 public class GLNyARRaster_RGB extends JmfNyARRaster_RGB\r
17 {\r
18     private byte[] gl_buf;\r
19     private int gl_flag;\r
20 \r
21     public GLNyARRaster_RGB(GL i_ref_gl,NyARParam i_param)\r
22     {\r
23         super(i_param.getX(),i_param.getY());\r
24         this.gl_flag=GL.GL_RGB;\r
25         this.gl_buf=new byte[this.width*this.height*3];\r
26     }\r
27     public void setBuffer(javax.media.Buffer i_buffer,boolean i_is_reverse) throws NyARException\r
28     {\r
29         //JMFデータでフォーマットプロパティを初期化\r
30         initFormatProperty((RGBFormat)i_buffer.getFormat());\r
31         \r
32         byte[] src_buf=(byte[])i_buffer.getData();\r
33         //GL用のデータを準備\r
34         if(i_is_reverse){\r
35             int length=this.width*3;\r
36             int src_idx=0;\r
37             int dest_idx=(this.height-1)*length;\r
38             for(int i=0;i<this.height;i++){\r
39                 System.arraycopy(src_buf,src_idx,this.gl_buf,dest_idx,length);\r
40                 src_idx+=length;\r
41                 dest_idx-=length;\r
42             }\r
43         }else{\r
44             System.arraycopy(src_buf,0,gl_buf,0,src_buf.length);\r
45         }\r
46         //GLのフラグ設定\r
47         switch(this.pix_type){\r
48         case GLNyARRaster_RGB.PIXEL_ORDER_BGR:\r
49             this.gl_flag=GL.GL_BGR;\r
50             break;\r
51         case GLNyARRaster_RGB.PIXEL_ORDER_RGB:\r
52             this.gl_flag=GL.GL_RGB;\r
53             break;\r
54         default:\r
55             throw new NyARException();\r
56         }\r
57         //ref_bufをgl_bufに差し替える\r
58         ref_buf=gl_buf;\r
59     }\r
60     /**\r
61      * GLでそのまま描画できるRGBバッファを返す。\r
62      * @return\r
63      */\r
64     public byte[] getGLRgbArray()\r
65     {\r
66         return this.ref_buf;\r
67     }\r
68     /**\r
69      * GL用のRGBバッファのバイト並びタイプを返す。\r
70      * @return\r
71      */\r
72     public int getGLPixelFlag()\r
73     {\r
74         return this.gl_flag;\r
75     }\r
76 }\r