注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[ogl] 关于 GL extension  

2009-04-25 10:21:50|  分类: 3d |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Preface
关于 GL extension 的详细介绍
http://www.opengl.org/resources/features/OGLextensions/

GL extension 的列表
http://www.opengl.org/registry/

:-) 想跟进 GL 的发展状况么,可以上这个 public bugzilla
所有 Khronos 管理的标准都在这里
http://www.khronos.org/bugzilla

GL extension 介绍
ARB   – Extensions officially approved by the OpenGL Architecture Review Board
EXT   – Extensions agreed upon by multiple OpenGL vendors
HP    – Hewlett-Packard
IBM   – International Business Machines
KTX   – Kinetix, maker of 3D Studio Max
INTEL – Intel
NV    – NVIDIA Corporation
MESA  – Brian Paul’s freeware portable OpenGL implementation
SGI   – Silicon Graphics
SGIS  – Silicon Graphics
SGIX  – Silicon Graphics (experimental)
SUN   – Sun Microsystems
WIN   – Microsoft

比如:point_parameters 这个 extension 最开始只是由 SGI 提出支持,则名字为 SGIS_point_parameters,之后 nVidia 确认要支持此 extension,则 EXT_point_parameters 会替代 SGIS_point_parameters 实现起功能。最后,EXT/ARB 中的内容,会最终合并到 GL 标准中,作为正式标准。

通过 glString(GL_EXTENSIONS) 我们可以得到 name string。如:
GL_ARB_depth_texture, GL_ARB_draw_buffers, ...
GLX_ARB_get_proc_address, GLX_ARB_multisample, ...
其中 GL_ 表示与窗体无关的 extension,而 GLX, WGL, CGL, AGL 则是不同平台与窗体系统相关的 extersion。
GLX - X window
WGL - MS windows
CGL - Quartz
AGL - Apple

对于某个 extension,可能需要以来其他的某些 entension 才能正常工作,所以此 extension spec 中会有一节 dependencies 详细描述了其要求。

检查当前的 driver 是否支持某个 extension
include <GL/gl.h>
#include <string.h>

int
isExtensionSupported(const char *extension)
{
  const GLubyte *extensions = NULL;
  const GLubyte *start;
  GLubyte *where, *terminator;

  /* Extension names should not have spaces. */
  where = (GLubyte *) strchr(extension, ' ');
  if (where || *extension == '\0')
    return 0;
  extensions = glGetString(GL_EXTENSIONS);
  /* It takes a bit of care to be fool-proof about parsing the
     OpenGL extensions string. Don't be fooled by sub-strings,
     etc. */
  start = extensions;
  for (;;) {
    where = (GLubyte *) strstr((const char *) start, extension);
    if (!where)
      break;
    terminator = where + strlen(extension);
    if (where == start || *(where - 1) == ' ')
      if (*terminator == ' ' || *terminator == '\0')
        return 1;
    start = terminator;
  }
  return 0;
}
----------
/* At context initialization. */
int hasBGRA = isExtensionSupported("GL_EXT_bgra");

/* When trying to use EXT_bgra extension. */
#ifdef GL_EXT_bgra
if (hasBGRA) {
  glDrawPixels(width, height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixels);
} else
#endif
{
  /* No EXT_bgra so bail (or implement software workaround). */
  fprintf(stderr, "Needs EXT_bgra extension!\n");
  exit(1);
}


win32 下使用某个 extension
#ifdef _WIN32
typedef void (APIENTRY * PFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param);
typedef void (APIENTRY * PFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat *params);
#endif

#ifdef _WIN32
PFNGLPOINTPARAMETERFEXTPROC glPointParameterfEXT;
PFNGLPOINTPARAMETERFVEXTPROC glPointParameterfvEXT;
#endif

int hasPointParams = isExtensionSupported("GL_EXT_point_parameters");

#ifdef _WIN32
if (hasPointParams) {
  glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC)
  wglGetProcAddress("glPointParameterfEXT");
  glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC)
  wglGetProcAddress("glPointParameterfvEXT");
}
#endif

if (hasPointParams) {
  static GLfloat quadratic[3] = { 0.25, 0.0, 1/60.0 };
  glPointParameterfvEXT(GL_DISTANCE_ATTENUATION_EXT, quadratic);
  glPointParameterfEXT(GL_POINT_FADE_THRESHOLD_SIZE_EXT, 1.0);
}

  评论这张
 
阅读(1246)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017