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. -- [wiki:Community/People/Jean-SebastienGuay 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: [[Image(OpenGL3DeprecationProcess.png, 400)]] * 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 * [http://developer.nvidia.com/object/opengl_3_driver 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 * [http://www.techsoupcorp.com/ 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 == * [http://www.khronos.org/library/detail/2008_siggraph_opengl_bof_slides/ Siggraph 2008 OpenGL BOF slides] * [http://www.khronos.org/news/press/releases/khronos_releases_opengl_30_specifications_to_support_latest_generations_of/ Press release] * [http://www.opengl.org/registry/doc/glspec30.20080811.withchanges.pdf OpenGL 3.0 spec] * [http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.30.08.withchanges.pdf GLSL 1.3 spec] * [http://www.opengl.org/registry/ Registry] * [http://thread.gmane.org/gmane.comp.graphics.openscenegraph.user/32185/focus=32186 ARB chairman talks about Longs Peak and other things]