Opengl RC(Render context,渲染上下文)与像素格式(转)
来源:互联网 发布:淘宝二级页面是什么 编辑:程序博客网 时间:2024/06/06 21:44
原文链接:http://hi.baidu.com/atyuwen/blog/item/420d16ea7fdd36d5d539c9b6.html
1.Windows操作系统对OpenGL的支持
- 获取一个DC
- 选择并且设置DC的像素格式
- 通过API:wglCreateContext(DC)创建一个RC
- 设置当前的RC,通过API:wglMakeCurrent(RC, DC)来设置.
实现释放或者选择其它RC:
- 调用API:wglMakeCurrent(NULL, NULL)使DC不再有RC。
- 调用API:wglMakeCurrent(AnotherRC, DC)选择其他RC为当前RC,一般情况下,我们都是一个RC对应一个DC,当然,在某些场合里面是可以有多个RC。
- 调用API:wglDeleteContent(RC) 直接删除,这个方法比较直截了当。
2.用VC来编写OpenGL程序
经过上面的分析,用VC来调用OpenGL作图的方法就很显然了。步骤如下:
3.一些说明
4.像素格式
像素格式是OpenGL窗口的重要属性,它包括是否使用双缓冲,颜色位数和类型以及深度位数等。像素格式可由Windows系统定义的所谓像素格式描述子结构来定义(PIXELFORMATDESCRIPTOR),该结构定义在windows.h中。
在该结构中包含有26个属性信息,其形式为:
typedef struct tagPIXELFORMATDESCRIPTOR
{
WORD nSize;
WORD nVersion;
DWORD dwFlags;
BYTE iPixelType;
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE iLayerType;
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR;
各变量的含义如下:
nSize:该结构所占内存空间。
nVersion:版本号,当前为1。
dwFlags:指定像素格式属性,可选参量如表1.1所示。
标识符 解释
PFD_DRAW_TO_BITMAP 支持内存中绘制位图
PFD_DRAW_TO_WINDOW 支持屏幕绘图
PFD_DOUBLEBUFFER 支持双缓冲
PFD_CENERIC_FORMAT 指定选择GDI支持的像素格式
PFD_NEED_PALETTE 指定需要逻辑调色板
PFD_NEED_SYSTEM_PALETTE 指定需要硬件调色板
PFD_STEREO NT不支持
PFD_SUPPORT_OPENGL 支持OpenGL
PFD_SUPPORT_GDI 支持GDI,此时不可使用PFD_DOUBLEBUFFER
iPixelType:像素颜色模式,可选项为PFD_TYPE_RGBA或PFD_TYPE_INDEX,分别对应于RGBA模式和颜色索引模式。
cColorBits:指定颜色的位数。
cRedBits:采用RGBA模式时,红色组分占用位数。
cRedShift:采用RGBA模式时,红色组分偏移量。
cGreenBits:采用RGBA模式时,绿色组分占用位数。
cGreenShift:采用RGBA模式时,绿色组分偏移量。
cBlueBits:采用RGBA模式时,蓝色组分占用位数。
cBlueShift: 采用RGBA模式时,蓝色组分偏移量。
cAlphaBits:采用RGBA模式时,Alpha组分占用位数。
cAlphaShift:采用RGBA模式时,Alpha组分偏移量。
cAccumBits:指定累积缓冲区表示一个像素所用位数。
cAccumRedBits:指定累积缓冲区表示红色组分占用位数。
cAccumGreenBits:指定累积缓冲区表示绿色组分占用位数。
cAccumBlueBits:指定累积缓冲区表示蓝色组分占用位数。
cAccumAlphaBits:指定累积缓冲区表示Alpha组分占用位数。
cDepthBits:指定深度缓冲区表示一个像素所用位数。
cStencilBits:指定模板缓冲区表示一个像素所用位数。
cAuxBuffers:指定辅助缓冲区,Windows9x、NT不支持。
iLayerType:Windows9x、NT下只能是PFD_MAIN_PLANE。
bReserved:=0。
dwLayerMask:指定覆盖层的屏蔽,Windows9x、NT不支持。
dwVisibleMask:Windows9x、NT不支持。
dwDamageMask:Windows9x、NT不支持。
Windows提供了四个像素格式管理函数,分别介绍如下:
(1) int ChoosePixelFormat(HDC hdc,
PIXELFORMATDESCRIPTOR *ppdf)
该函数比较传过来的像素格式描述和OpenGL支持的像素格式,返回一个最佳匹配的像素格式索引。该索引值可传给SetPixelFormat为DC设置像素格式。返回值为0表示失败。
在比较像素格式时,匹配优先级顺序为像素格式描述子结构中的下述各域:
dwFlags->cColorBits->cAlphaBits->cAccumBits
->cDepthBits->cStencilBits->cAuxBuffers->iLayerType
硬件支持的像素格式优先。
(2) int DescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes,
LPPIXELFORMATDESCRIPTOR *ppfd)
该函数用格式索引iPixelFormat说明的像素格式来填写由ppfd所指向的像素格式描述子结构,利用该函数可以枚举像素格式。
(3) int GetPixelFormat(HDC hdc)
该函数用于获取hdc的格式索引。
(4) BOOL SetPixelFormat(HDC hdc, int iPixelFormat,
LPPIXELFORMATDESCRIPTOR *ppfd)
该函数用格式索引iPixelFormat来设置hdc的像素格式。在使用该函
数之前应该调用ChoosePixelFormat来获取像素格式索引。另外,OpenGL窗口风格必须包含WS_CLIPCHILDREN和WS_CLIPSIBLINGS类型,否则设置失败。
应该注意的是ChoosePixelFormat函数并不一定返回一个最佳的像素格式值,可以利用DescribePixelFormat来枚举系统所支持的所有像素格式。OpenGL的通常支持24种不同的像素格式,如果系统安装了OpenGL硬件加速器,它可能会支持其它的像素格式。
- Opengl RC(Render context,渲染上下文)与像素格式(转)
- Opengl RC(Render context,渲染下下文)与像素格式(转)
- opengl像素格式和RC管理
- OpenGL—多线程渲染共享上下文(share context)
- OpenGL(2)——像素格式和RC管理
- opengl光照之镜面光逐顶点渲染与逐像素渲染
- opengl卡通渲染之逐顶点渲染与逐像素渲染
- opengl像素格式
- OpenGL像素格式-PIXELFORMATDESCRIPTOR
- 像素格式OpenGL
- OpenGL像素格式
- OpenGL像素格式
- opengl光照之漫反射逐顶点渲染与逐像素渲染
- openGL中创建OpenGL Render Context的步骤
- openGL中创建OpenGL Render Context的步骤 .
- OpenGL像素默认像素存储格式
- MFC和opengl像素格式
- Android OpenGL ES 离屏渲染(offscreen render)
- HashMap,LinkedHashMap,TreeMap对比
- tiny-dnn源码Edge类
- Python图表绘制:matplotlib绘图库入门
- codeforces 454A Little Pony and Crystal Mine
- SpringBoot整合MyBatis
- Opengl RC(Render context,渲染上下文)与像素格式(转)
- Class字节码指令解释执行
- mysql常见面试题汇总
- 进程间通信(三)信号
- 位运算(ctrl c,v的)
- Java容器详解Ⅰ——概述
- 最大和
- iOS 宏定义~ systemOfMacro(系统自带的宏)
- 属性变量和局部变量的区别