OpenGL于MFC使用汇总(三)——离屏渲染
有时直接创建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
版权声明:本文博客原创文章。博客,未经同意,不得转载。
OpenGL于MFC使用汇总(三)——离屏渲染的更多相关文章
- 关于OpenGL Framebuffer Object、glReadPixels与离屏渲染
最近写论文需要用到离屏渲染(主要是因为模型太大普通窗口绘制根本做不了),于是翻阅了红宝书查了下相关api和用法.中文版的红宝书可读性有点差,很多地方翻译地晦涩,但好歹读起来比较快,主要相关章节为第8章 ...
- Android进阶(十九)AndroidAPP开发问题汇总(三)
Android进阶(十九)AndroidAPP开发问题汇总(三) Java解析XML的几种方式: http://inotgaoshou.iteye.com/blog/1012188 从线程返回数据的两 ...
- openGL初学函数解释汇总
openGL初学函数解释汇总 1.GLUT工具包提供的函数 //GLUT工具包所提供的函数 glutInit(&argc, argv);//对GLUT进行初始化,这个函数必须在其它的GLUT使 ...
- opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示
具体过程参考的是这篇BLOG: http://wiki.woodpecker.org.cn/moin/lilin/swig-glBmpContext 这一片BLOG的代码有个 BOOL SaveBmp ...
- IOS 中openGL使用教程4(openGL ES 入门篇 | 离屏渲染)
通常情况下,我们使用openGL将渲染好的图片绘制到屏幕上,但有时候我们不想显示处理结果,这时候就需要使用离屏渲染了. 正常情况下,我们将屏幕,也就是一个CAEAGLLayer对象作为渲染目标,离屏渲 ...
- Android OpenGL ES 离屏渲染(offscreen render)
通常在Android上使用OpenGL ES,都是希望把渲染后的结果显示在屏幕上,例如图片处理.模型显示等.这种情况下,只需要使用Android API中提供的GLSurfaceView类和Rende ...
- 离屏渲染学习笔记 /iOS圆角性能问题
离屏渲染学习笔记 一.概念理解 OpenGL中,GPU屏幕渲染有以下两种方式: On-Screen Rendering 意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行. O ...
- iOS离屏渲染的解释:渲染与cpu、gpu
重开一个环境(内存.资源.上下文)来完成(部分)图片的绘制 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作 意为离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作. ...
- 开始我的GL离屏渲染绑定[转]
地址: http://wiki.woodpecker.org.cn/moin/lilin/swig-glBmpContext 呵呵,有了第一次的经验,我们就要开始我们的GL离屏渲染的绑定了. 关 于O ...
随机推荐
- C 和 C++ 的速度相差多少,你知道吗?
有谁清楚这个事实吗 ? 网络游戏速度至关重要, 是游戏质量的唯一标准, 尤其是即时格斗, 相差几毫秒都会影响用户体验 ! 哪怕就是 5% 的效率损失,也是 差之毫厘,失之千里, 游戏的速度是程序语言天 ...
- cocos2d触摸事件处理机制(2.x和3.x变化)
2.x的触摸事件的版本号 触摸事件处理有2种子.以下单点触摸的样本.(另一种多点触摸屏). 创建cocos2d 该项目. 1. 重写下面虚函数. bool ccTouchBegan(cocos2d:: ...
- JAVA技术交流群
推荐:组[八方扑灭]:http://jq.qq.com/?_wv=1027&k=RFLXu0. QQ: 292352612 集团专注于技术.软件project.JAVA.c\c++.WEB. ...
- Android的ViewAnimator而它的子类ViewSwitcher-android学习之旅(三十三)
ViewAnimator遗传FrameLayout,重合使用多个组件.可以增加部件数量,然后会有时间切换动画. ViewAnimator及其子类的继承关系 ViewAnimator经常使用属性 Vie ...
- iOS:编译错误 linker command failed with exit code 1 (use -v to see invocation)
将project不加入.m要求加入 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzI0MzQ2OQ==/font/5a6L5L2T/fontsi ...
- DFA和trie特里实现敏感词过滤(python和c语言)
今天的项目是与完成python开展,需要使用做关键词检查,筛选分类,使用前c语言做这种事情.有了线索,非常高效,内存小了,检查快. 到达python在,第一个想法是pip基于外观的c语言python特 ...
- jQuery整理笔记2----jQuery选择整理
一个.基本的选择 1.ID选择器 JavaScript提供了原生方法实如今DOM中选择指定ID值得元素. 使用方法例如以下: var element=document.getElementById(& ...
- HDU 4778 内存搜索&如压力
鉴于G宝石,B包.和S.S当代表凑齐每种颜色的宝石S我们可以成为哲学家的石头 每个软件包包含N宝石.分别c1,c2....... 然后他们轮流拿包.每个包可以得到一次.宝石出包放在地上. 假设你可以成 ...
- Windows 8实例教程系列 - 开篇
原文:Windows 8实例教程系列 - 开篇 2012年10月26日,微软发布Windows 8操作系统以及自主品牌平板电脑Surface,Windows作为世界上最流行的操作系统,发布一周内,下载 ...
- CSS3制作精美的iphone电话图标,不使用图片
<!DOCTYPE HTML> <html lang=zh-cn> <head> <meta charset=utf-8> <title>C ...