OpenGL扩展的应用技术.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenGL扩展的应用技术.doc

OpenGL扩展的应用技术 方贤勇,张佑生* (合肥工业大学 计算机与信息学院,安徽 合肥,230009) 摘 要:本文着重于OpenGL扩展的应用。在此基础上,详细阐述Ms Windows环境下VC++6.0中实现的OpenGL 扩展的应用技术,并通过实例加以验证。 关键词:OpenGL;OpenGL扩展;应用技术 中图分类号:TP391.71 文献标识码:A 1 引言 OpenGL是SGI公司推出的专业图形加速卡的图形软件应用程序接口(API),它允许程序员对2D和3D几何形体进行描述,并绘制(Rendering)到帧缓存(Frame Buffer)。它的工作方式就如同一个状态机,你可以通过各种状态和模式设置控制绘制过程,达到绘制要求。 OpenGL已经成为首选的2D和3D开发环境。它是低层的API,具有与硬件无关的特征,因而具有很强的可移植性。但是,硬件是不断变化的,OpenGL如何保持可移植性呢?OpenGL扩展(OpenGL Extension)正是为这一目的而设计的。厂商只要提供OpenGL扩展,就可以轻松实现硬件特有的功能。利用OpenGL扩展OpenGL实现者(OpenGL Implementer)也可以添加新的处理算法。 OpenGL扩展功能强大,而实际软件开发过程中却不被注意,下面将详细介绍OpenGL扩展的应用技术。 2 OpenGL扩展简介 OpenGL扩展其实质是硬件的驱动程序的一部分,是针对硬件的特性而新开发的。它是由硬件设计者或OpenGL库设计者按其规格说明书进行设计。不同的OpenGL实现(OpenGL Implementation)支持的扩展可能不一样。只有随着某一扩展的推广与应用以及硬件技术的提高该扩展才会在所有的OpenGL实现中被给予支持,从而最终成为OpenGL标准库的一部分。图1描述了扩展的开发应用过程。 图1 图1的第2和第3阶段表明扩展的规格说明书(Specification)定义了扩展。OpenGL实现不提供扩展的具体用法,使用者只有通过阅读OpenGL扩展规格说明书才能获悉具体用法。扩展的规格说明书必须从SGI那里得到。它是用统一的格式书写以二进制文本文件形式给出。规格说明书中注明扩展的名称,增加的函数与过程,参数(Token),使用方法等等。 3 OpenGL扩展的应用技术 OpenGL实现并不都支持某一扩展,所以必须按照以下步骤进行扩展应用过程。以VC++6.0中的OpenGL为例,并假定该扩展是GL_EXT_sample,它有定义了一个新的函数是glSampleEXT(GLenum sampleenum,GLint sampleint),其中sampleenum可以取参数GL_SAMPLE_EXT,sampleint可取1.0。 1) 检查GL/gl.h头文件是否对扩展作了宏定义。在VC++6.0中是以如下的结果: /*Extensions*/ #define GL_EXT_vertex_array 1 #define GL_EXT_brag 1 #define GL_EXT_paletted_texture 1 #define GL_WIN_swap_hint 1 #define GL_EXT_clip_disable 1 GL_EXT_sample并不一定在这里。因为这些都是较早的VC++版本中保留下来的扩展宣传(Advertisement),关键要在编译时执行检查。 2) 添加在编译时的检查,具体实现是这样的: #ifdef GL_EXT_sample glSampleEXT(GL_SAMPLE_EXT,1.0)。 #endif 这并不能保证运行时就没有问题,因为在具体的操作系统上,对不同的图形硬件的支持是不一样的。如在Win32中OpenGL.ICD驱动程序支持的就依赖于硬件和厂商的ICD驱动程序是如何实现扩展的。所以要执行运行时的检查。 3)在程序中添加运行时检查的功能,用isExtensionSupported函数实现: /*extension代表要检查的扩展*/ int isExtensionSupported(const char *extension) { const GLubyte *extensions=NULL; const GLubyte *start; GLubyte where,*terminator; where=(GLubyte *)strchr(extension,′′); /*如果extension为空,则返回*/ if (where||*extension==′\0′) return 0; extensions=glGetStrings (GL_EXTENSTIONS); /*到返回的系统支持扩展串的头*/

文档评论(0)

docinpfd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档