Exemplo n.º 1
0
        public SDLWindow2DGl()
        {
            screen_ = new Screen2DGl();

            // screen.beginDrawDelegate
            // SDLWindowを用いるときは、つねにウィンドゥはひとつ描画されているはずなので
            // ↑は何も設定しなくていい。

            Screen.EndDrawDelegate = delegate
            {
                SDL.SDL_GL_SwapBuffers();
            };
        }
Exemplo n.º 2
0
 // This method is called when the control is redrawn
 protected override void OnPaint(PaintEventArgs eventArgs)
 {
     // Visual Studioのデザインモードのとき。
     if (DesignMode)
     {
         Screen2DGl scr = window.Screen;
         scr.Select();
         scr.SetClearColor(100, 200, 100);
         scr.Clear();
         scr.DrawString("Open GL", 5, 10, 10);
         scr.DrawString("Control", 5, 30, 10);
         scr.Update();
     }
     // 描画用のメソッドはここに書いて。
 }
Exemplo n.º 3
0
        ///	<summary>
        ///	描画メソッド。
        ///	Screen2DGlの線の太さを変更しているので注意。
        ///	</summary>
        public void OnDraw(Screen2DGl screen, int x, int y)
        {
            if (fpstimer == null)
            {
                return;
            }
            int fps     = (int)fpstimer.Fps;
            int realfps = fpstimer.RealFpsInt;

            screen.SetLineWidth((int)((float)size) / 6 + 1);

            // string txt = realfps.ToString("D6");


            string txt = StringConv.ToDecZeroSuppress(realfps, 6) + "FPS";
            int    r, g, b;

            screen.GetColor(out r, out g, out b);               // 色を保存
            screen.SetColor(0, 120, 0);
            screen.DrawString(txt, x, y, size);
            screen.SetColor(r, g, b);           // 色を復帰
        }
Exemplo n.º 4
0
        public SDLWindow2DGl()
        {
            screen_ = new Screen2DGl();

            // screen.beginDrawDelegate
            // SDLWindowを用いるときは、つねにウィンドゥはひとつ描画されているはずなので
            // ↑は何も設定しなくていい。

            Screen.EndDrawDelegate = delegate
            {
                SDL.SDL_GL_SwapBuffers();
            };
        }
Exemplo n.º 5
0
        ///	<summary>
        ///	描画メソッド。
        ///	Screen2DGlの線の太さを変更しているので注意。
        ///	</summary>
        public void OnDraw(Screen2DGl screen,int x,int y)
        {
            if (fpstimer == null) return ;
            int fps = (int)fpstimer.Fps;
            int realfps = fpstimer.RealFpsInt;

            screen.SetLineWidth((int)((float)size)/6 + 1);

            // string txt = realfps.ToString("D6");

            string txt = StringConv.ToDecZeroSuppress(realfps,6) + "FPS";
            int r,g,b;
            screen.GetColor(out r, out g, out b);	// 色を保存
            screen.SetColor(0,120,0);
            screen.DrawString(txt,x,y,size);
            screen.SetColor(r,g,b);	// 色を復帰
        }
Exemplo n.º 6
0
        // IntPtr oldContext;
        //    ↑
        // Win32WindowのSelectのネストが出来るようにしようと考えたのだが、
        // 前のコンテキストを保存しておいても、
        //    Select
        //     Select
        //   Update ←このあと、1つ目のSelectのViewに設定しなおす必要があるのだが、
        //            このための復帰処理が難しい
        //  Update
        //        ので、こういう実装は現実的ではないと判断する。
        // 初期化用のhelper関数
        private YanesdkResult InitByHdc_(IntPtr hDc)
        {
            this.hDC = hDc;

            screen_ = new Screen2DGl();
            screen_.BeginDrawDelegate = delegate
            {
                hDC = GetDC(this.hWnd);
            //	oldContext = opengl32.wglGetCurrentContext();
                Opengl32.wglMakeCurrent(this.hDC , this.hRC);
                //	テクスチャー描画が基本なのでテクスチャーを有効にしておかねば
            };
            screen_.EndDrawDelegate = delegate
            {
                SwapBuffers(this.hDC);
                Opengl32.wglMakeCurrent(this.hDC,IntPtr.Zero);
                ReleaseDC(this.hWnd, this.hDC);
            };

            // 描画を行なわないdelegateを渡す。
            // なぜなら、テクスチャの読み込みは、
            // wglMakeCurrentが実行されていないと
            // 正しく読み込まれないので、beginDrawDelegateを行なってから
            // 読み込み、それが終わり次第この
            // delegateを呼び出して、openglのassignを解放してやる必要がある。
            screen_.QuitDrawDelegate = delegate
            {
                Opengl32.wglMakeCurrent(this.hDC , IntPtr.Zero);
            //		opengl32.wglMakeCurrent(this.hDC , oldContext);
                ReleaseDC(this.hWnd, this.hDC);
            };

            YanesdkResult result = CreatePixelFormat(this.hDC);

            if ( result != YanesdkResult.NoError )
                return result;

            // Create a new OpenGL rendering contex
            this.hRC = Opengl32.wglCreateContext(this.hDC);

            // context共有を利用する。
            // 0番は常に生きていると仮定。
            // opengl32.wglShareLists(Singleton<GlInitializer>.Instance.hNullRC,this.hRC);
            //	↑これをやるとthreadが終了しなくなるので
            //    一つ目のRendering Contextだけ解放しないことにする。

            if ( theFirstHRc != IntPtr.Zero )
                Opengl32.wglShareLists(theFirstHRc , this.hRC);
            else
                theFirstHRc = this.hRC;

            ReleaseDC(this.hWnd, this.hDC);

            RECT32 rect = new RECT32();
            //	GetWindowRect((IntPtr)this.hWnd, out rect);

            GetClientRect((IntPtr)this.hWnd, out rect);
            Screen.UpdateView(rect.left - rect.right, rect.bottom - rect.top);

            return YanesdkResult.NoError;
        }
Exemplo n.º 7
0
        // IntPtr oldContext;
        //	↑
        // Win32WindowのSelectのネストが出来るようにしようと考えたのだが、
        // 前のコンテキストを保存しておいても、
        //	Select
        //	 Select
        //   Update ←このあと、1つ目のSelectのViewに設定しなおす必要があるのだが、
        //			このための復帰処理が難しい
        //  Update
        //		ので、こういう実装は現実的ではないと判断する。

        // 初期化用のhelper関数
        private YanesdkResult InitByHdc_(IntPtr hDc)
        {
            this.hDC = hDc;

            screen_ = new Screen2DGl();
            screen_.BeginDrawDelegate = delegate
            {
                hDC = GetDC(this.hWnd);
                //	oldContext = opengl32.wglGetCurrentContext();
                Opengl32.wglMakeCurrent(this.hDC, this.hRC);
                //	テクスチャー描画が基本なのでテクスチャーを有効にしておかねば
            };
            screen_.EndDrawDelegate = delegate
            {
                SwapBuffers(this.hDC);
                Opengl32.wglMakeCurrent(this.hDC, IntPtr.Zero);
                ReleaseDC(this.hWnd, this.hDC);
            };

            // 描画を行なわないdelegateを渡す。
            // なぜなら、テクスチャの読み込みは、
            // wglMakeCurrentが実行されていないと
            // 正しく読み込まれないので、beginDrawDelegateを行なってから
            // 読み込み、それが終わり次第この
            // delegateを呼び出して、openglのassignを解放してやる必要がある。
            screen_.QuitDrawDelegate = delegate
            {
                Opengl32.wglMakeCurrent(this.hDC, IntPtr.Zero);
                //		opengl32.wglMakeCurrent(this.hDC , oldContext);
                ReleaseDC(this.hWnd, this.hDC);
            };

            YanesdkResult result = CreatePixelFormat(this.hDC);

            if (result != YanesdkResult.NoError)
            {
                return(result);
            }

            // Create a new OpenGL rendering contex
            this.hRC = Opengl32.wglCreateContext(this.hDC);

            // context共有を利用する。
            // 0番は常に生きていると仮定。
            // opengl32.wglShareLists(Singleton<GlInitializer>.Instance.hNullRC,this.hRC);
            //	↑これをやるとthreadが終了しなくなるので
            //    一つ目のRendering Contextだけ解放しないことにする。

            if (theFirstHRc != IntPtr.Zero)
            {
                Opengl32.wglShareLists(theFirstHRc, this.hRC);
            }
            else
            {
                theFirstHRc = this.hRC;
            }

            ReleaseDC(this.hWnd, this.hDC);

            RECT32 rect = new RECT32();

            //	GetWindowRect((IntPtr)this.hWnd, out rect);

            GetClientRect((IntPtr)this.hWnd, out rect);
            Screen.UpdateView(rect.left - rect.right, rect.bottom - rect.top);

            return(YanesdkResult.NoError);
        }