【LWJGL2 WIKI】【现代OpenGL篇】版本选择

翻译 2016年01月07日 16:14:25

原文:http://wiki.lwjgl.org/wiki/Version_selection

Introduction 介绍

OpenGL有许多版本可以用。写教程的时候,最新版是4.2,开发期间决定逐渐弃用传统OpenGL(1.X和2.X版),因为它们依赖于固定管线。新版使用的是可编程管线,性能更好,对目前和未来的GPU来说,向前兼容性更好。
如果你刚开始接触OpenGL,最好就学3.X或4.X版本,不用学旧版了。也就是说,开发以特定的“上下文”来开发OpenGL(即在预定义版本/API和规格集下)。我们可以给我们的Display选择一个版本来区分此。

Display.create()

为此,我们提供了两个设置对象在Display.create()方法里:
- PixelFormat: 此对象控制象素配置,比如可以指定每象素由几位组成。
- ContextAttribs: 此对象控制使用的OpenGL版本。
设定版本时,我们也可以设定其他的参数,比如选择一个profile以及是否需要向前向后兼容。兼容性Flag在3.0的API里被引入,一些项目已被标记为“弃用”,之后的版本可能会被移除。所以当使用向前兼容上下文时,一切标记弃用的功能都将被移除。
profile概念在3.2版里被引入,它有两个版本:核心和兼容性。核心是指新标准的API,兼容性则用来重新引入被弃用的功能。设置向前兼容和核心profile将做两次相同的事情,但是如果你想以正常的姿势使用OpenGL,我建议就这样配置。
也可以见:http://www.opengl.org/wiki/Core_And_Compatibility_in_Contexts

Code example 代码范例

现在写代码,首先看看标准OpenGL是怎样的。让Display对象管理上下文的创建,然后看看用下面的代码会得到哪个版本。

System.out.println("OpenGL version: " + GL11.glGetString(GL11.GL_VERSION));

在我的系统里,返回结果是: OpenGL version: 4.2.0
因为我可以访问到4.2,所以我选择了一个低版本3.2。

PixelFormat pixelFormat = new PixelFormat();
ContextAttribs contextAtrributes = new ContextAttribs(3, 2)
    .withForwardCompatible(true)
    .withProfileCore(true);

try {
    Display.setDisplayMode(new DisplayMode(320, 240));
    Display.setTitle("Version selection");
    Display.create(pixelFormat, contextAtrributes);
} catch (LWJGLException e) {
    e.printStackTrace();
    System.exit(-1);
}

检查使用的版本,OpenGL version: 3.2.0

Complete source code 完整源代码

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.ContextAttribs;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.PixelFormat;

public class VersionSelection {
    public static void main(String[] args) {
        new VersionSelection();
    }

    public VersionSelection() {
        boolean select = true;

        if (select) this.specifiedCreate();
        else this.normalCreate();

        System.out.println("OpenGL version: " + GL11.glGetString(GL11.GL_VERSION));

        while (!Display.isCloseRequested()) {
            Display.sync(60);
            Display.update();
        }

        Display.destroy();
    }

    // Let Display manage our OpenGL version
    private void normalCreate() {      
        try {
            Display.setDisplayMode(new DisplayMode(320, 240));
            Display.setTitle("Version selection");
            Display.create();
        } catch (LWJGLException e) {
            e.printStackTrace();
            System.exit(-1);
        }
    }

    // Use a specified version of OpenGL - namely version 3.2
    private void specifiedCreate() {
        PixelFormat pixelFormat = new PixelFormat();
        ContextAttribs contextAtrributes = new ContextAttribs(3, 2)
            .withForwardCompatible(true)
            .withProfileCore(true);

        try {
            Display.setDisplayMode(new DisplayMode(320, 240));
            Display.setTitle("Version selection");
            Display.create(pixelFormat, contextAtrributes);
        } catch (LWJGLException e) {
            e.printStackTrace();
            System.exit(-1);
        }
    }
}

Credit

Mathias Verboven (moci)

【LWJGL2 WIKI】【现代OpenGL篇】用BufferSubData更新VBO方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_updating_a_VBO_with_BufferSubDataIntroduction 介绍VBO一旦设置好,我们可以...

【LWJGL2 WIKI】【现代OpenGL篇】交叉数据画方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_interleavedIntroduction 介绍我们之前把顶点数据分别存在不同的VBO之内。其实也可以交叉或混合保存数...

【LWJGL2 WIKI】【现代OpenGL篇】画颜色方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_coloredIntroduction 介绍本教程介绍颜色。每个方形的角将被分配一个不同的颜色,为此我们必须使用shade...

【LWJGL2 WIKI】【现代OpenGL篇】用纹理画方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_texturedIntroduction 介绍本教程将讲怎样对模型贴纹理,其他方形的部分就和之前教程中讲的差不多。后面可以...

【LWJGL2 WIKI】【现代OpenGL篇】用投影、视图、模型矩阵画方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_with_Projection,_View_and_Model_matricesIntroduction 介绍在OpenG...

【LWJGL2 WIKI】【现代OpenGL篇】用DrawArrays画方形

原文:http://wiki.lwjgl.org/wiki/The_Quad_with_DrawArraysIntroduction 介绍随着3.0发布,“弃用”机制被引入。所有被标记为弃用的函数,在...

【LWJGL2 WIKI】【辅助库篇】Slick-Util库:第一部分-读取图片

原文:http://wiki.lwjgl.org/wiki/Slick-Util_Library_-Part_1-_Loading_Images_for_LWJGLSlick-Util支持png, j...

【LWJGL2 WIKI】【基础篇】基础3:方形

原文:http://wiki.lwjgl.org/wiki/LWJGL_Basics_3_%28The_Quad%29Introduction 介绍本教程教你怎样在LWJGL里使用OpenGL,但是并...

【LWJGL2 WIKI】【辅助库篇】Slick-Util库:介绍

原文:Introduction”>http://wiki.lwjgl.org/wiki/Slick-Util_Library-_Introduction 译注:获取地址和安装方法去原文里找吧,这里只...

【LWJGL2 WIKI】【基础篇】基础1:显示

原文:http://wiki.lwjgl.org/wiki/LWJGL_Basics_1_%28The_Display%29Introduction 介绍LWJGL库使用自带的轻量级本地窗口(即所谓的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【LWJGL2 WIKI】【现代OpenGL篇】版本选择
举报原因:
原因补充:

(最多只允许输入30个字)