Re: The ARB announced OpenGL 3.0 and GLSL 1.30 tod

So how is this going to affect OpenCL?

Perhaps I am missing something but isn't CL going to now have to be interfaced to a pretty old API, instead of a bright new shiny one - which could then be integrated at inception, rather than patched to an old system?

Or is the buzz over OpenCL, and it stealing GPU cycles for other stuff, now also causing Khronos to dilute it's attention to the point it breaks both?

Re: The ARB announced OpenGL 3.0 and GLSL 1.30 tod

What happened to Longs Peak?

In January 2008 the ARB decided to change directions. At that point it had become clear that doing Longs Peak, although a great effort, wasn't going to happen. We ran into details that we couldn't resolve cleanly in a timely manner. For example, state objects. The idea there is that of all state is immutable. But when we were deciding where to put some of the sample ops state, we ran into issues. If the alpha test is immutable, is the alpha ref value also? If we do so, what does this mean to a developer? How many (100s?) of objects does a developer need to manage? Should we split sample ops state into more than one object? Those kind of issues were taking a lot of time to decide.

Furthermore, the "opt in" method in Longs Peak to move an existing application forward has its pros and cons. The model of creating another context to write Longs Peak code in is very clean. It'll work great for anyone who doesn't have a large code base that they want to move forward incrementally. I suspect that that is most of the developers that are active in this forum. However, there are a class of developers for which this would have been a, potentially very large, burden. This clearly is a controversial topic, and has its share of proponents and opponents.

While we were discussing this, the clock didn't stop ticking. The OpenGL API *has to* provide access to the latest graphics hardware features. OpenGL wasn't doing that anymore in a timely manner. OpenGL was behind in features. All graphics hardware vendors have been shipping hardware with many more features available than OpenGL was exposing. Yes, vendor specific extensions were and are available to fill the gap, but that is not the same as having a core API including those new features. An API that does not expose hardware capabilities is a dead API.

Thus, prioritization was needed, and we made several decisons.

1) We set a goal of exposing hardware functionality of the latest generations of hardware by this Siggraph. Hence, the OpenGL 3.0 and GLSL 1.30 API you guys all seem to love

2) We decided on a formal mechanism to remove functionality from the API. We fully realize that the existing API has been around for a long time, has cruft and is inconsistent with its treatment of objects (how many object models are in the OpenGL 3.0 spec? You count). In its shortest form, removing functionality is a two-step process. First, functionality will be marked "deprecated" in the specification. A long list of functionality is already marked deprecated in the OpenGL 3.0 spec. Second, a future revision of the core spec will actually remove the deprecated functionality. After that, the ARB has options. It can decide to do a third step, and fold some of the removed functionality into a profile. Profiles are optional to implement (more below) and its functionality might still be very important to a sub-set of the OpenGL market. Note that we also decided that new functionality does not have to, and will likely not work with, deprecated functionality. That will make the spec easier to write, read and understand, and drivers easier to implement.

3) We decided to provide a way to create a forward-compatible context. That is an OpenGL 3.0 context with all deprecated features removed. Giving you, as a developer, a preview of what a next version of OpenGL might look like. Drivers can take advantage of this, and might be able to optimize certain code paths in the forward-compatible context only. This is described in the WGL_ARB_create_context extension spec.

4) We decided to have a formal way of defining profiles. During the Longs Peak design phase, we ran into disagreement over what features to remove from the API. Longs Peak removed quite a lot of features as you might remember. Not coincidentally, most of those features are marked deprecated in OpenGL 3.0. The disagreements happened because of different market needs. For some markets a feature is essential, and removing it will cause issues, whereas for another market it is not. We discovered we couldn't do one API to serve all. A profile encapsulates functionality needed to meet the needs of a particular market. Conformant OpenGL products may implement one or more profiles. A profile is by definition a subset of the whole core specification. The core OpenGL specification will contain all functionality, including what is in a profile, in a coherently designed whole. Profiles simply enable products for certain markets to not ship functionality that is not relevant to those markets in a well defined way. Only the ARB may define profiles, individual vendors may not (this in contrast to extensions).

5) We will keep working on object model issues. Yes, this work has been put on the back burner to get OpenGL 3.0 done, but we have picked that work up again. One of the early results of this is that we will work on folding object model improvements into the core in a more incremental manner.

6) We decided to provide functionality, where possible, as extensions to OpenGL 2.1. Any OpenGL 3.0 feature that does not require OpenGL 3.0 hardware is also available in extension form to OpenGL 2.1. The idea here is that new functionality on older hardware enables software vendors to provide upgrades to their existing users.

7) We decided that OpenGL is not going to evolve into a general GPU compute API. In the last two years or so compute using a GPU and a CPU has taken off, in fact is exploding. Khronos has recognized this and is on a fast track to define and release OpenCL, the open standard for compute programming. OpenGL and OpenCL will be able to share data, like buffer objects, in an efficient manner.

There are many good ideas in Longs Peak. They are not lost. We would be stupid to ignore it. We spent almost two years on it, and a lot of good stuff was designed. There is a desire to work on object model issues in the ARB, and we recently started doing that again. Did you know that you have no guarantee that if you change properties of a texture or render buffer attached to a framebuffer object that the framebuffer object will actually notice? It has to notice it, otherwise your next rendering command will not work. Each vendor's implementation deals with this case a bit differently. If you throw in multiple contexts in the mix, this becomes an even more interesting issue. The ARB wants to do object model improvements right the first time. We can't afford to do it wrong. At the same time, the ARB will work on exposing new hardware functionality in a timely manner.

I want to ask you to take a deep breath, let this all sink in a bit, and then open up the OpenGL 3.0 and GLSL 1.30 specifications we just posted that have all new stuff clearly marked. Hopefully you'll agree with me that there's quite a lot of new stuff to be excited about.

Re: The ARB announced OpenGL 3.0 and GLSL 1.30 today

I prefer to look at things from the bright side: hey, now OpenGL2.1 doesn't look so bad .
/ducks

I can't comprehend why the CAD community would need OpenGL3 in this crippled state, when deprecated API will be butchered soon. I've had my share of porting/upgrading to a newer/another API, and drastic changes were more welcome than subtle unreliable ones. The 2.1 will continue to be maintained, so stay there. Or is it marketing reasoning?

The spec seems to make GL3 look worse than it is. An OpenGL3-only spec is due. Plus info which features really are available in SM2/3 cards - like the varying interpolation type (wasn't it introduced in SM4? ).

Semantics in the shader code, and being able to mix+match are important things that should have been there. Compiler API, too.

Oh well, 2.1 stays, cgc.exe is there with Radeon support, ATi fix things quickly, nVidia don't break too much code with every new driver, we have 5 years of proven working code, users aren't crazy about new gpus - so it's not that bad that ATi don't provide geometry-shaders, Intel's current stuff is unusable for games (thus isn't a target), larawasp will be late and expensive and as common as a physics-card, raytracing takes weeks to prepare the kd-trees of scenes and will be even less common than larabee. And we don't need to hope/wait for improvements in GL anymore!
Those that jump ship for DX10.... good luck with the market, guys. Hope the userbase is ready when you ship a title.

Re: The ARB announced OpenGL 3.0 and GLSL 1.30 today

Is bugzilla going to have OpenGL 3.0 as an option to submit errors for soon?

Yes, it does now.

In Table N.1, the specification lists a couple of name changes:

MAX_CLIP_PLANES to MAX_CLIP_DISTANCES
CLIP_PLANEi to CLIP_DISTANCEi

However, these haven't been changed in the document, and surely these are separate things anyway, and need updated documentation?

They are reusing the same piece of state for a different purpose when running GLSL 1.30 shaders, thus the aliased names. Once the fixed-function pipeline is fully deprecated the old names will go away, until then both names exist.

Also, Appendix O: ARB Extensions doesn't include the new extensions listed in registry.

Yes, it's somewhat out of date. Not on the top of my priority queue TBH, but I'll get to it.