亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

混合語言編程―C#使用原生的Directx和OpenGL繪圖的方法

2020-01-24 03:09:29
字體:
來源:轉載
供稿:網友

由于項目需要做一些圖形展示,所以就想到了使用Directx和OpenGL來繪圖,但項目準備使用C#來開發(大家比較熟悉C#),在網上看了相關的資料,有一些第三方的控件可用,試用了下,一運行就占了幾百M的內存,而且也不知道是否穩定,教程也少,還不如直接使用原生的。在網上看的Directx和OpenGL的教程基本上都是C/C++的,找了很久也就找到相關介紹,只能自己研究下。

我以前做過C#和C++混合語言編程相關的東西,在C++實現一些C#不好實現的功能,C#動態調用DLL文件,所以也想到了用C++的代碼來控制Winform控件的繪畫,這樣就可實現用Direct和OpenGL在Winform的控件上繪畫了。

由于我對Direct和OpenGL都不熟悉,沒有這方面的編程經驗,只能去瞎折騰,下面分別說說最近在Directx和OpenGL怎么試驗的。

Directx:

之前沒學過Directx,拿了同學的代碼來看,也是霧里看花啊,不過有一點啟示了我,在初始化的時候,要傳入一個句柄去創建設備(CreateDevice),通常都是傳入窗口的設備,我想如果傳入一個控件的句柄,那所有的繪畫都將在這個控件上實現,因為控件也是繼承自Window的。而Winform的控件在底層的實現應該和WIN32是一樣的。這樣的話只要把Winform的控件的句柄傳入C++代碼進行初始化,那么繪畫的結果將顯示在這個控件上。結果一試,還真行。關鍵代碼如下:

復制代碼 代碼如下:

extern "C" _declspec(dllexport) HRESULT InitD3D( HWND hWnd );

extern "C" _declspec(dllexport) VOID Render();

在InitD3D傳入控件的句柄進行初始化,C#再調用Render進行繪畫,以下是C#代碼:

復制代碼 代碼如下:

HWND handle = this.button1.Handle;

InitD3D(handle);

private void Draw()

  {

         for (; ; )

            {

                Render();

            }

        }
 


效果圖:

OpenGL:
         查看了OpenGL的相關教程(推薦http://www.yakergong.net/nehe/),OpenGL是通過RC來執行的,創建RC時就必須指定一個DC,還要設置DC的像素格式。每個線程有且只能擁有一個RC。
         如果在初始化OpenGL的繪畫環境時傳入一個Winform的控件句柄,再通過這個句柄取到HDC,就可使用這個HDC來創建RC,這樣OpenGL的繪畫環境就準備好了,并且這個RC關聯到Winform的控件上。
         在給制前,先為當前線程選擇RC(之前通過HDC創建的),再進行繪制,這樣繪制的結果將顯示在這個Winform控件上。
         關鍵代碼如下:
C++:

復制代碼 代碼如下:

extern "C" _declspec(dllexport) void Init( HWND hWnd);
extern "C" _declspec(dllexport) void Render();
void Init(HWND hWnd)
{
   int PixelFormat;
   int bits = 16;
   hDC = GetDC(hWnd);
   static  PIXELFORMATDESCRIPTOR pfd=           // pfd Tells Windows How We Want Things To Be
   {
      sizeof(PIXELFORMATDESCRIPTOR),              // Size Of This Pixel Format Descriptor
      1,                                                            // Version Number
      PFD_DRAW_TO_WINDOW |                        // Format Must Support Window
      PFD_SUPPORT_OPENGL |                          // Format Must Support OpenGL
      PFD_DOUBLEBUFFER,                               // Must Support Double Buffering
      PFD_TYPE_RGBA,                                     // Request An RGBA Format
      bits,                                                        // Select Our Color Depth
      0, 0, 0, 0, 0, 0,                                       // Color Bits Ignored
      0,                                                         // No Alpha Buffer
      0,                                                         // Shift Bit Ignored
      0,                                                        // No Accumulation Buffer
      0, 0, 0, 0,                                           // Accumulation Bits Ignored
      16,                                                    // 16Bit Z-Buffer (Depth Buffer)
      0,                                                     // No Stencil Buffer
      0,                                                     // No Auxiliary Buffer
      PFD_MAIN_PLANE,                         // Main Drawing Layer
      0,                                                  // Reserved
      0, 0, 0                                          // Layer Masks Ignored
   };
   PixelFormat=ChoosePixelFormat(hDC,&pfd);
   SetPixelFormat(hDC,PixelFormat,&pfd);
   hRC=wglCreateContext(hDC);
}
void Render()
{
   wglMakeCurrent(hDC, hRC);
   draw();
   SwapBuffers(hDC);
   wglMakeCurrent(NULL, NULL);
}

C#:
復制代碼 代碼如下:

Init(this.pictureBox1.Handle);
//開始繪制
var timer = new System.Timers.Timer();
timer.Interval = 100;
 timer.Elapsed += (tsender, te) =>
                {
                    Render();
                };
timer.AutoReset = true;
timer.Enabled = true;

效果圖:

WPF:WPF的控件沒有句柄,但是可以換個思路,把繪畫代碼封裝在Winform控件上,在WPF使用自定義的Winform控件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
57pao成人国产永久免费| 欧美激情成人在线视频| 国产成人精品av在线| 欧美自拍视频在线| 亚洲一区二区三区乱码aⅴ| 伊人久久大香线蕉av一区二区| 97av视频在线| 自拍偷拍亚洲一区| 岛国视频午夜一区免费在线观看| 日韩av黄色在线观看| 欧美一级视频免费在线观看| 亚洲精品电影网| 国产精品一区二区三区久久久| 成人免费淫片视频软件| 日本韩国在线不卡| 狠狠躁夜夜躁人人躁婷婷91| 亚洲影院色无极综合| 亚洲精品456在线播放狼人| 成人午夜高潮视频| 中文字幕av一区中文字幕天堂| 中文字幕日韩欧美在线| 91精品国产综合久久香蕉最新版| 成人免费观看49www在线观看| 国产精品丝袜白浆摸在线| 国产成人啪精品视频免费网| 亚洲国产99精品国自产| 国产精品一区二区三区免费视频| 国产一区二区三区视频免费| 国产精品高潮视频| 国产成人在线视频| 亚洲免费伊人电影在线观看av| 一个人看的www欧美| 国产va免费精品高清在线观看| 91久久久亚洲精品| 国产精品美女主播在线观看纯欲| 成人xvideos免费视频| 欧美激情在线狂野欧美精品| 国产亚洲精品成人av久久ww| 久久精品国产一区二区三区| 国产区亚洲区欧美区| 国产免费一区二区三区在线观看| 亚洲高清免费观看高清完整版| 国产99久久精品一区二区 夜夜躁日日躁| 日本中文字幕成人| 欧美成人免费va影院高清| 精品久久久久久久久久久久久久| 日产日韩在线亚洲欧美| 久久久这里只有精品视频| 亚洲自拍偷拍第一页| 一区二区三区www| 亚洲人午夜色婷婷| 中文字幕日韩视频| 北条麻妃久久精品| 国产在线拍揄自揄视频不卡99| 51午夜精品视频| 欧美一级黄色网| 欧美国产日韩一区二区三区| 成人久久18免费网站图片| 欧美另类69精品久久久久9999| 日韩精品免费在线播放| 日韩欧美在线观看视频| 欧美精品在线极品| 国产精品一区二区久久精品| 影音先锋欧美在线资源| 91高清免费视频| 91免费精品国偷自产在线| 国产精品入口免费视| 日韩在线视频免费观看| 国产在线精品成人一区二区三区| 亚洲大尺度美女在线| 国产日本欧美一区二区三区在线| 中文字幕自拍vr一区二区三区| 热re99久久精品国产66热| 日韩成人在线观看| 亚洲国产97在线精品一区| 色先锋资源久久综合5566| 午夜精品99久久免费| 亚洲欧洲国产一区| 91国语精品自产拍在线观看性色| 亚洲已满18点击进入在线看片| 日韩中文字幕在线观看| 欧美激情视频一区| 午夜美女久久久久爽久久| 91国产一区在线| 中文字幕欧美国内| 欧美日韩国产成人在线观看| 日韩av在线看| 欧美特级www| 欧美日韩一区二区精品| 久久韩国免费视频| 在线播放国产一区中文字幕剧情欧美| 亚洲一区亚洲二区| 国产日产久久高清欧美一区| 日韩精品在线免费观看视频| 国产成人精品av在线| 狠狠色噜噜狠狠狠狠97| 精品亚洲国产视频| 日韩在线视频二区| 国产精品欧美风情| 深夜成人在线观看| 一区二区av在线| 国产91在线高潮白浆在线观看| 久久免费观看视频| 96国产粉嫩美女| 中文字幕亚洲一区二区三区五十路| 亚洲国产天堂网精品网站| 欧美大尺度激情区在线播放| 大胆欧美人体视频| 91色精品视频在线| 国产成人一区二区| 久久99精品久久久久久青青91| 成人中文字幕+乱码+中文字幕| 国产成人精品久久久| 九九热99久久久国产盗摄| 久久久久五月天| 国产精品人人做人人爽| 欧美大片欧美激情性色a∨久久| 亚洲人成啪啪网站| 狠狠色狠狠色综合日日五| 96sao精品视频在线观看| 国产精品十八以下禁看| 久久欧美在线电影| 成人a视频在线观看| 国产性色av一区二区| 欧美成在线观看| 久久免费福利视频| 欧美日韩国产限制| 91黄色8090| 国产丝袜精品第一页| 久久久久久亚洲精品| 91夜夜未满十八勿入爽爽影院| 中文字幕视频一区二区在线有码| 国产精品视频白浆免费视频| 91精品国产免费久久久久久| 久久天天躁夜夜躁狠狠躁2022| 欧美激情第三页| 国产精品丝袜视频| 伊人久久久久久久久久久| 在线观看久久av| 九九视频直播综合网| 俺去亚洲欧洲欧美日韩| 久久色在线播放| 成人www视频在线观看| 久久成人亚洲精品| 欧美黑人性视频| 日本19禁啪啪免费观看www| 午夜精品久久久久久久99黑人| 日韩在线视频免费观看高清中文| 亚洲偷熟乱区亚洲香蕉av| 欧美日韩国产综合新一区| 日本久久久久亚洲中字幕| 国产精品三级网站| 国产性猛交xxxx免费看久久| 91国产美女在线观看| 欧美日韩亚洲激情| 国产精品国产三级国产aⅴ9色| 亚洲va男人天堂| 久久久成人的性感天堂| 亚洲精品免费网站| 欧美激情亚洲一区| 亚洲xxx视频| 国产精品嫩草影院久久久| 日韩有码在线电影| 啪一啪鲁一鲁2019在线视频|