[翻译]opengl扩展教程1

[翻译]opengl扩展教程1

原文地址https://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/extensions.php

  • [翻译]opengl扩展教程1

    • 简介
    • 检测扩展
    • 使用扩展
    • GLEW入门
      • 入门简介
      • 初始化GLEW
      • 检测OpenGL版本
      • 检测扩展
      • 平台特定扩展
      • 练习

简介

OpenGL扩展是为了使用3D图形硬件的新功能。硬件厂商定义新的函数到OpenGL来支持新的或增强已有的特性。

由单个厂商创建的扩展是"vendor-specific"(厂商特定),有多个厂商共同窗口的扩展是"multivendor"(多厂商)。

如果"vendor-specific""multivendor"扩展证明是一个好的增强功能,那么OpenGL Architecture Review Board (ARB是OpenGL管理机构的简称)也许会推进它成为一个"ARB approved"(ABR认可)扩展。

如果这个扩展是非常好的,那么ABR也许会将其整合到OpenGL的"core feature"(核心特征)。一个非常好的例子就是"OpenGL Shading Language"(OpenGL着色器语言)现在已经是OpenGL2.0或更高版本的”core feature”的一部分。

这个理念使得OpenGL变得非常强大,因为源代码保持向后兼容,10年前编写的OpenGL程序,现在还可以工作。

检测扩展

在一个有效的OpenGL上下文环境中,你可以使用glGetString(GL_EXTENSIONS)来获取一个包含所有可用扩展的列表,它返回一个以空格分隔的长字符串。
所有的扩展形式:GL_VENDOR_extension_nameVENDOR(厂商)来自但不限于下表。

VENDOR 描述
ARB ABR认可的扩展
EXT 多厂商扩展
APPLE 苹果计算机公司的扩展
ATI ATI(AMD)科技公司的扩展
HP 惠普公司的扩展
NV NVIDIA的扩展
SGIS Silicon Graphics的扩展

也有一些前缀不是GL的扩展,它们是特定平台的。最著名的就是WGL前缀的,它们是Windows平台特定的扩展。以及GLX前缀的,它们是X-Window平台特定扩展。

使用扩展

在C++代码中使用扩展是-不幸的-是特定于平台。函数 (函数指针) 的地址,必须从OpenGL执行 (例如硬件驱动程序)中检索。在Windows下这可以使用wglGetProcAddress来检索。

本行非原文翻译这里说一下,OpenGL的一些新增函数,往往不是直接使用源代码或者静态库链接到程序中去的,而是在程序运行的时候动态获取函数的指针,来调用函数的。本行非原文翻译

为了节省在多个平台处理所有函数指针和令牌的所有扩展的大量的时间,有一些好开源解决方案可用于简化此过程。其中之一是GLEW,可在http://glew.sourceforge.net。另一个实现是Glee,可在http://elf-stone.com/glee.php。都是好的处理扩展和修改的方法来,它们在BSD许可证下发布。(请务必阅读许可证的详细信息)。

GLEW入门

我要使用GLEW,没有任何理由————Glee是一样好。最新版本的 GLEW 是 1.3.5 并支持 OpenGL 2.1 核心功能和其他一些新的扩展。

入门简介

可以把GLEW编译成静态库或者动态库。如果编译为静态库,请确保顶一个预处理的变量GLEW_STATIC(在Windows下)。另一种方式是直接把glew.cglew.h文件复制到你的代码中(如果在windows下,也必须定义GLEW_STATIC)。这是我首选的方式,因为它使得跨平台编译和管理变得更简单。

你可以在这里下载我的GLEW+FreeGLUT的简单示例工程:
下载:OpenGL_Extensions_Tutorial.zip (GLEW和FreeGLUT以及包含在内)

它是一个Virtual Studio 7.1工程。它可以转换到8.0(速成版或更高)
(如果你创建一个不同平台[或编译器]的工程[或Makefile],请发送到[email protected],我将把它放在这里)

初始化GLEW

GLEW需要初始化。当你进行初始化的时候,必须具有有效可用的OpenGL渲染上下文。(在大多数情况下这意味着一个OpenGL窗口必须存在和激活)。

GLenum err = glewInit();
if (GLEW_OK != err)
{
  // failed to initialize GLEW!
}
std::cout "Using GLEW Version: " glewGetString(GLEW_VERSION);

检测OpenGL版本

GLEW允许检查 如果某些OpenGL版本 (1.1、1.2、1.3、1.5、2.0、2.1)的所有核心扩展是否可用。如果你有安装OpenGL 1.3,那么 OpenGL 1.2和1.1的核心扩展也会检测。

if (GLEW_VERSION_1_5)
{
   std::cout "Core extensions of OpenGL 1.1 to 1.5 are available!\n";
}

检测扩展

有两种方式来检测一个扩展是否支持:使用GLEW宏–一个较慢的方式–使用名称字符串
GLEW宏方式

if (GLEW_ARB_vertex_program)
{
  ...
}

glewIsSupported函数方式

if (glewIsSupported("GL_ARB_vertex_program"))
{
  ...
}

平台特定扩展

此外可以使用GLEW宏检测平台特定的扩展。或使用数wglewIsSupportedglxglewIsSupported)。要使用平台特定扩展,需要在inlcude “glew.h”之后include “wglew.h”或”glxglew.h”。

if (WGLEW_ARB_pbuffer)
{
  ...
}

练习

  1. 编写一个程序,它会检测您的计算机上安装的OpenGL核心版本并打印结果到控制台。(使用GLEWGlee为此!)
  2. 获取glGetString(GL_EXTENSIONS)返回的字符串最大长度?
时间: 2024-08-06 20:16:08

[翻译]opengl扩展教程1的相关文章

OpenGL官方教程——着色器语言概述

OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) 将 Pertransformed Vertices (每一个待转换顶点) 传人 Programmable Vertex Processor (可编程的顶点处理器) 得到 Transformed Vertices (转换的顶点) 将 Transformed Vertices (转换的顶点) 传入 Pr

OpenGL ES教程系列(经典合集)

为了搞透播放器的开发,花了些时间收集这些资料,虽然我已经搞定opengles渲染视频的内容,但是想玩玩opengles,往深里玩,图像处理这块是个好的方向,所以opengles是值得好好学的. OpenGL ES教程原创系列 2011-12-18[iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 2011-12-17[iTyran原创]GLKit 矩阵变换:自转公转 2011-12-02[iTyran原创]Xcode创建的默认iOS OpenGL

QT OpenGL中文教程在QT4版本后的错误代码更改(一)

由于教程中说的已经够可以了,这里就不对代码进行分析了,有兴趣可以自己去看看.这个教程来源于原来的NeHeOpenGL中文教程 (http://www.yakergong.net/nehe/) ,但其有不好的地方,就是我去看的时候,根本就下载不了代码~~~~可能我人品比较差吧.可以作为参考看一下. 所以选择了下面这个教程: 教程地址:QT OpenGL中文教程(http://www.qiliang.net/old/nehe_qt/index.html) 正在学习这个教程,但发现其时间过久: 根据Q

OpenGL版本与OpenGL扩展机制

OpenGL版本与OpenGL扩展机制 1 opengl的版本区别(在opengl官方文档中有详细说明)    针对Opengl不同版本的升级是主要是扩展指令集.    现在版本是4.0啦1.1 opengl1.11995年,SGI推出了更为完善的OpenGL 1.1版本.OpenGL 1.1的性能比1.0版提高甚多.其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置.法线.颜色.色彩指数.纹理坐标.多边形边缘标识的传输速度,引入了新的纹理特性等等.1.

windows下opengl扩展与多重纹理贴图

环境:windows8.1 参考: http://www.cnblogs.com/madfrog/archive/2010/06/25/1765243.html http://blog.csdn.net/xiangyunl/article/details/7933549 如果你在Windows平台下开发OpenGL程序,那么系统中自带的OpenGL库就是1.1的,如果想使用1.2或者更高版本的OpenGL库,那么只能使用OpenGL扩展.由于d3d的关系,windows对于opengl支持不是很

WDCP/wdlinux安装php_zip扩展教程

linux服务器安装wdcp之后,php的路径默认是/www/wdlinux/php,有些网友按照网上的教程安装的时候总出错,原因就是php的路径不对,我们知道了php的路径之后就可以开始安装了> # wget http://pecl.php.net/get/zip-1.10.2.tgz # tar zxvf zip-1.10.2.tgz # cd zip-1.10.2 # /www/wdlinux/php/bin/phpize 执行上面的命令之后就会在zip目录下生成几个文件,其中就有conf

OPENGL入门教程

OpenGL入门学习1:编写第一个OpenGL程序http://www.c3dn.net/forum.php?mo ... d=20&extra=page%3D3OpenGL入门学习2:点.直线和多边形http://www.c3dn.net/forum.php?mo ... id%3D5%26typeid%3D5OpenGL入门学习3:绘制几何图形的细节http://www.c3dn.net/forum.php?mo ... id%3D5%26typeid%3D5OpenGL入门学习4:颜色的选

Mac下PHP7.3安装Swoole4.4扩展教程

Mac系统下 PHP7安装Swoole扩展 教程今天我用的PHP版本是:PHP7.3.5Swoole下载地址:http://pecl.php.net/package/swoole下载后,tar -xzf swoole-4.4.0.tgzcd swoole-4.4.0phpize./configuremakemake testmake install 解释:phpize是用来扩展php扩展模块的通过phpize可以建立php的外挂模块. ./configure 是源代码安装的第一步,作用对即将安装

拓幻图形学工程师教学手册(第一讲)|一字一字敲出OpenGL学习教程

动机首先申明,我是拓幻科技图形处理工程师,自己接触OpenGL,图形图像等方面也有六年多了,很多人其实并不了解这方面,也不了解如何系统地去学,我觉得基于我硕士时期的课程和经验给大家.这些资料和经验也得感谢我的老师,来自普渡大学的终生教授迈克 贝利(Mike Bailey). 以此连载OpenGL学习教程,给大家讲解,一起学习一下,不对之处,欢迎大家指出讨论. 所有渲染工作都离不开OpenGL, 着色器(Shader)这些,如果你和我一样对图形处理比较感兴趣的话,可能你和当初的我有着同样的困惑:如