OpenGL在MFC中的使用总结(三)——离屏渲染

原创 2014年08月22日 08:38:57
有些时候直接创建OpenGL窗口不适合,或者根本不允许再创建窗口,就像我现在的这个项目,创建的窗口显示不出来,被主框架限定,而我只能在ActiveX控件的子类里做一些相关工作,那只能用到OpenGL的离屏渲染技术了~即不直接绘制到窗口上,而是绘制到一张位图上,然后再次调用这张位图实现后续的工作。

下面就总结怎么使用所谓的“离屏渲染”。

    const int WIDTH = 500;
    const int HEIGHT = 500;

    // Create a memory DC compatible with the screen
    HDC hdc = CreateCompatibleDC(0);
    if (hdc == 0) cout<<"Could not create memory device context";

    // Create a bitmap compatible with the DC
    // must use CreateDIBSection(), and this means all pixel ops must be synchronised
    // using calls to GdiFlush() (see CreateDIBSection() docs)
    BITMAPINFO bmi = {
        { sizeof(BITMAPINFOHEADER), WIDTH, HEIGHT, 1, 32, BI_RGB, 0, 0, 0, 0, 0 },
        { 0 }
    };
    unsigned char *pbits; // pointer to bitmap bits
    HBITMAP hbm = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, (void **) &pbits,
        0, 0);
    if (hbm == 0) cout<<"Could not create bitmap";

    //HDC hdcScreen = GetDC(0);
    //HBITMAP hbm = CreateCompatibleBitmap(hdcScreen,WIDTH,HEIGHT);

    // Select the bitmap into the DC
    HGDIOBJ r = SelectObject(hdc, hbm);
    if (r == 0) cout<<"Could not select bitmap into DC";

    // Choose the pixel format
    PIXELFORMATDESCRIPTOR pfd = {
        sizeof (PIXELFORMATDESCRIPTOR), // struct size
        1, // Version number
        PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL, // use OpenGL drawing to BM
        PFD_TYPE_RGBA, // RGBA pixel values
        32, // color bits
        0, 0, 0, // RGB bits shift sizes...
        0, 0, 0, // Don't care about them
        0, 0, // No alpha buffer info
        0, 0, 0, 0, 0, // No accumulation buffer
        32, // depth buffer bits
        0, // No stencil buffer
        0, // No auxiliary buffers
        PFD_MAIN_PLANE, // Layer type
        0, // Reserved (must be 0)
        0, // No layer mask
        0, // No visible mask
        0, // No damage mask
    };
    int pfid = ChoosePixelFormat(hdc, &pfd);
    if (pfid == 0) cout<<"Pixel format selection failed";

    // Set the pixel format
    // - must be done *after* the bitmap is selected into DC
    BOOL b = SetPixelFormat(hdc, pfid, &pfd);
    if (!b) cout<<"Pixel format set failed";

    // Create the OpenGL resource context (RC) and make it current to the thread
    HGLRC hglrc = wglCreateContext(hdc);
    if (hglrc == 0) cout<<"OpenGL resource context creation failed";
    wglMakeCurrent(hdc, hglrc);

    // Draw using GL - remember to sync with GdiFlush()
    GdiFlush();
    /*
	具体的绘制函数~~~~~~~~~~~~~~我就不写了
    */
   

    // Clean up
    wglDeleteContext(hglrc); // Delete RC
    SelectObject(hdc, r); // Remove bitmap from DC
    DeleteObject(hbm); // Delete bitmap
    DeleteDC(hdc); // Delete DC


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyh03601/article/details/38750357

osg与opengl混合渲染

1.认识并简单的应用qt,达到可以做一些自己的小例子 2.qt与osg是如何传递消息的,如何进行通信 3.了解三维是如何显示在里
  • 2015年12月16日 15:34

OPENGL离屏渲染简单例子

  • 2009年12月10日 16:43
  • 3KB
  • 下载

opengl使用FBO离屏渲染图片

【原文:http://m.blog.csdn.net/blog/zhouschina/8985593】 #include #include #include #include #pragm...
  • zhazhiqiang2010
  • zhazhiqiang2010
  • 2015-05-22 15:32:27
  • 2245

Windows MFC 两个OpenGL窗口显示与线程RC问题

转自http://www.cnblogs.com/infiniti/p/3494460.html 问题为:背景界面是一个OpenGL窗口(对话框),在其上弹出一个OpenGL窗口(模态对话框)时...
  • code_xbug
  • code_xbug
  • 2015-06-24 21:38:04
  • 943

opengl 教程(2) 在窗口画点

http://www.cnblogs.com/mikewolf2002/archive/2012/10/23/2736195.html  原文地址:http://ogldev.ats...
  • anypkv
  • anypkv
  • 2013-10-22 22:49:23
  • 1187

OpenGL在MFC中的使用总结(一)——基本框架

项目中要画3D显示的模型,于是要用到OpenGL,加上是在MFC中,而且是在MFC中的ActiveX中使用,再而且鉴于他们程序主框架的设定,常规的方法还不一定能实现。所以还是查过不少资料,在此一一总结...
  • lyh03601
  • lyh03601
  • 2014-08-21 16:10:21
  • 4052

离屏渲染

一、概述 OpenGL ES是一套多功能开放标准的用于嵌入系统的C-based的图形库,用于2D和3D数据的可视化。OpenGL被设计用来转换一组图形调用功能到底层图形硬件(GPU),由GPU执...
  • qq_29846663
  • qq_29846663
  • 2017-04-03 15:27:02
  • 3934

opengl 4.X (离屏渲染-后台渲染)off-screen rendering

openGL可以渲染屏幕的framebuffer,自然可以渲染不直接显示的framebuffer,把数据存入非直接显示的framebuffer中以便后续的渲染需求,或者直接存入纹理贴图texture都...
  • zhao_92221
  • zhao_92221
  • 2015-06-24 10:40:24
  • 2699

OpenGL实现离屏渲染(Offscreen Render),

  • 2014年12月30日 11:42
  • 2.34MB
  • 下载

opengl离屏渲染

最近用到了opengl,有部分需要后台渲染并拷贝数据,搜索到部分opengl离屏渲染方法,备记下. https://www.ixdroid.com/index.php?/archives/161-Op...
  • ab7936573
  • ab7936573
  • 2017-01-06 11:42:26
  • 1136
收藏助手
不良信息举报
您举报文章:OpenGL在MFC中的使用总结(三)——离屏渲染
举报原因:
原因补充:

(最多只允许输入30个字)