Version 4 (modified by osg, 6 years ago)

Added link to OpenGL BOF slides

These are some notes I took at the Siggraph 2008 OpenGL BOF, where the final specs for OpenGL 3.0 were announced. Note that these notes are of course biased by what I found interesting/useful to note.

I just put these here in the hope some will find it useful. We can always delete/archive this page when OpenGL 3 becomes a part of our everyday lives.

-- Jean-Sebastien Guay

OpenGL 3.0 Summary

  • Deprecation based on profiles, in the hope of streamlining future releases.
  • GLSL 1.3
  • Support for most 2.x ARB extensions in the core of OpenGL 3.0
  • Some features were kept as ARB/EXT extensions for lack of time

More in-depth list of new/updated features

  • Requires programmable hardware
  • Expanded FBO in the core :
    • Multisampling of FBOs
    • Blitting
    • sRGB FBOs
    • Packed formats
    • Depth and stencil in FBOs
  • Enhanced vertex arrays (MapBufferRange to specify what range of a buffer changed and just re-upload that)
  • Capture transformed vertex data in buffer objects (sends result of vertex/geometry shader back to CPU for further processing)
  • Int and float texture formats without clamping
  • Array texture (array of 1D/2D textures)
  • Conditional rendering based on occlusion queries
  • Control over blending
  • New pixel/texel formats
  • GLSL 1.3 (more detail in GLSL 1.3 section below)
  • 3.0 ARB extensions (lack of time):
    • Geometry shader
    • Texture buffer object
    • Draw instanced
    • Create context (to specify a 3.0 context and forward-compatible context)
  • 2.x ARB extensions (backported from 3.0)
    • FBO
    • sRGB Framebuffer
    • Most of the above too, see slides
  • Deprecation model (more detail in Ecosystem section below):
    • 3.0 does not remove features
    • 3.0 marks some features deprecated:
      • Fixed function vertex and fragment pipelines
      • Color index mode
      • Display lists, selection and feedback modes
      • GLSL 1.1 and 1.2

GLSL 1.3

  • #version 1.30
  • 32-bit int and unsigned int
  • Texture array samplers (ex: sampler1DArray, sampler1DShadowArray)
  • Perspective interpolation and smoothing specified per sampler
  • New operators for int types (bitwise &, |, etc.)
  • switch statement
  • Vectors for int, unsigned int
  • Hyperbolic sine, cosine and tangent

Deprecated

  • attribute
  • varying
  • centroid varying

Use instead:

  • varying in vertex shader: out (at global scope)
  • varying in fragment shader: in (at global scope)
  • Built-in attribute, uniform and varying variables are also deprecated
  • ftransform() also deprecated

Missed 1.3

  • #include
  • uniform a = { /*...*/ }
  • row-major qualifier for matrices (just change the order of operations...)

Blizzard

  • Blizzard develops most of their games cross-platform for Windows and Mac OS X (which means they could probably port them to Linux too for minimal effort, don't know why they don't)
    • Past games: Warcraft 3, World of Warcraft
    • Upcoming games: Starcraft 2, Diablo 3
  • In their opinion, 3.0 unifies and integrates what was essentially an extension "forest" in 2.x

Transgaming

  • Explained the new extensions in more detail

Ecosystem

  • Update man pages for 3.0
    • Leverage OpenGL ES 2.0 work
  • Bring the conformance tests into the shader era
    • Use the OpenGL ES 2.0 tests as a starting point

Deprecation model

Terms:

  • core for version X : in a particular version of the OpenGL spec
  • deprecated : reduced support for a given feature
  • profile : ARB-defined subset of the spec. Hopefully there will be as few as possible but as many as necessary.
    • 3.0 : only one profile.
    • Possibilities: entertainment, content creation profiles; desktop versus mobile profiles.

Process:

  • Step 0 : core
  • Step 1 : deprecated (will possibly be removed in the next release)
  • Step 2 : extension (considered for exclusion, query in extension string)
  • Step 3 : removed (maybe still available as a vendor extension if the vendor caters to a specific area)

==> Mirrors extension approval process:

  • Step -3 : vendor-specific extension
  • Step -2 : EXT extension (considered for inclusion, query in extension string)
  • Step -1 : ARB extension (accepted, will possibly be included in the next release)
  • Step 0 : core
  • Step 1 : deprecated (will possibly be removed in the next release)
  • Step 2 : extension (considered for exclusion, query in extension string)
  • Step 3 : removed (maybe still available as a vendor extension if the vendor caters to a specific area)

This image shows the relationship between the deprecation model and the profiles in a visual way:

OpenGL 3 deprecation process

  • GLSL will deprecate in the same way

Contexts:

  • Full context: all features of release and profile
  • Forward-compatible context: only non-deprecated features
  • Create Context:
    • Past: driver gives whatever it wants, most likely a context compatible with the latest release it supports.
    • Now: specify parameters to get what you want.
    • wgl_ARB_CREATE_CONTEXT / xgl_ARB_CREATE_CONTEXT
    • Takes const int* attribList parameter
      • MAJOR_VERSION
      • MINOR_VERSION
      • ATTRIB_FLAGS
    • version <= 2.1 --> current behavior (get what the driver wants to give, most likely the most recent 2.x version it supports)
    • version >= 3.0 --> version you want if the driver supports it, most recent if not.
    • attribList: specify forward-compatible, debug context, profile.
    • To reiterate: the old context creation process will not return a 3.0+ context.
    • Can create a surface-less context for rendering without a window

Vendor support (2008/08/13)

  • AMD / ATI
    • Ramping up support for 3.0 in drivers, starting now
    • Full 3.0 support expected Q1 2009
  • Intel
    • Soon is all they could say.
  • NVIDIA
    • Beta drivers are out now for XP and Vista
    • Please file bug reports
    • OpenGL 3 driver (see page for features it does not support yet)

OpenCL

  • Hybrid computational library to use all computational resources, be they task-parallel (CPUs) or data-parallel (GPUs). Can use X CPUs and Y GPUs transparently.
  • Low-level abstraction
    • Need domain-specific middleware/languages/tools
  • C-based
  • Desktop/mobile profiles
  • Interoperable with OpenGL (data sharing - no need to copy back and forth)
  • Efficient inter-API communication (select whether to compute with OpenGL or OpenCL)
  • Normal Khronos process (same as OpenGL)
  • Draft specification done, fast track schedule, no date announced.
  • Based on initial proposal by Apple
  • Open : vendor-neutral, royalty-free

Language spec

  • C99-based + parallelism
  • IEEE precision
  • Platform API
  • Runtime API

gDebugger

  • OpenGL debugger, profiler
  • OpenGL ES and OpenGL 3.0 supported
  • Linux, Windows
  • Different performance counters:
    • Their OpenGL implementation
    • Windows/Linux kernel counters
    • Vendor-specific counters (NVIDIA, ATI)
  • Find bottlenecks by disabling different pipeline stages, replacing textures by 2x2 textures, etc.

SPECgpc

  • Graphics performance characterization
  • Unbiased benchmarks
  • SPECviewperf 10.1
    • Updated data sets for 3dsMax, Maya, etc.
    • OpenGL 2 shaders
    • VBOs (ex: CATIA - mix of VBOs and display lists)
  • Application performance characterization (updated applications)

TechSoup

  • Training in 3D Computer Graphics
  • OpenGL 3.0 courses in Q4 2008
  • OpenSceneGraph courses
  • OpenGL ES 2.0 courses
  • Paul Martz, Bob Kuehne, Alan Millman
  • Official web site

Documentation

  • Updates for OpenGL 3.0 in the Addison-Wesley OpenGL books
    • Programming Guide
    • Shading Language
    • SuperBible?
    • Academic Series
  • Upcoming electronic books for the above and more.

More information

Attachments