Quick update on Riven X

I realize it’s been a little while since I communicated the status of Riven X, so here’s where things are at right now:

  • The game is fully implemented. Every puzzle works as does the inventory, all the endings are done, the i’s are dotted, the t’s crossed.
  • There is one missing feature from the original game: the flies special effect, seen in many cards on the village island. This will take at least 2 to 3 weeks to implement.
  • Many improvements have been made to the engine which should address some of the currently open bugs.

Once the flies special effect is done, Riven X 0.9 will go out and I will enter the 1.0 development cycle, which will aim at truly polishing the program, fixing as many bugs as possible, testing with a wider audience and preparing the release. I expect this process to take about a month.

So thank you all for your support, it won’t be too long now until you can get your hands on Riven X 1.0.

Tags:

The spec is available at http://www.opengl.org/registry/ for both profiles as well as the new GLSL 1.5 spec.

Some of the highlights:

  • OpenGL 3.2 comes in 2 “flavors” called profiles. The core profile contains the streamlined, modern OpenGL API, while the compatibility profile contains all of core plus all of the old-world APIs. An implementation of OpenGL 3.2 is required to support core, while compatibility is optional. This profile mechanism replaces the ARB_compatibility extension mechanism for providing deprecated functionality.
  • GLSL 1.5, which has numerous improvements (listed below).
  • Geometry shaders (ARB_geometry_shader4). I think we all know what this does :)
  • Multisampled textures and texture samplers (allows access to specific multi-sampling samples) (ARB_texture_multisample). This is useful for a wide range of applications, including efficient depth peeling, K-buffer emulation and multi-sampled deferred shading.
  • Fragment depth clamping (ARB_depth_clamp). Useful for a number of algorithms, such as shadow volumes.
  • Fence objects (ARB_sync or APPLE_fence). Allows finer-grained pipeline synchronization and non-blocking “are you done” queries.
  • Seamless cube map filtering (ARB_seamless_cube_map). This functionality allows the GPU to sample from adjacent faces for a given cube map sampling operation in order to compute a seamless filtered sample. Without this functionality, any samples falling outside of the selected cube map face are subject to the normal texture wrapping mode (e.g. CLAMP_TO_EDGE, etc.), which leads to seams appearing between the cube map faces.

There are also a number of new features that are designed specifically to make it easier to port Direct3D code or to re-use assets designed for Direct3D. Some of those include:

  • BGRA vertex component ordering (ARB_vertex_array_bgra). This is basically the standard Direct3D ordering.
  • Modification of the base vertex index (ARB_draw_elements_base_vertex). This adds a variant DrawElements function which allows to specify an offset that is to be added to every index. This in turn allows to have “relocatable” indexed meshes: a particular indexed mesh, for which you have the index array, can be relocated anywhere inside any number of vertex arrays. All you need to know is the new base offset of the mesh inside the vertex array that is to be used by a particular draw call. This is a direct equivalent of BaseVertexIndex in Direct3D 9 and BaseVertexLocation in Direct3D 10.
  • Configurable fragment center coordinates (ARB_fragment_coord_conventions). This basically lets you configure the fragment center and origin for fragment processing (e.g. fragment shaders). With this extension, you can adopt the Direct3D 9 conventions (pixel center at <0.0, 0.0> and origin at upper-left corner of window) or the Direct3D 10 conventions (pixel center at <0.5, 0.5> and origin at upper-left corner of window). This does not affect rasterization or transformation (which you can modify using existing OpenGL state).
  • Provoking vertex control (ARB_provoking_vertex). Quoting the extension, “[t]he provoking vertex of a primitive is the vertex that determines the constant primary and secondary colors when flat shading is enabled”. In OpenGL, the last vertex is the provoking vertex (with the exception of polygon primitives), whereas it is the first vertex in Direct3D. This lets you instruct OpenGL to use the first vertex.

As for GLSL 1.5, some of the highlights include:

  • Geometry shader support. This was previously provided by extensions, now it’s in the core spec.
  • New gl_PrimitiveID as an input to fragment shaders (relevant when using geometry shading or instancing).
  • New determinant built-in function.
  • Vertex shader inputs (e.g. vertex attributes) can now be arrays.
  • Vertex shader outputs, geometry shader inputs and outputs as well as fragment shader inputs can now be structures.
  • The “interface blocks” mechanism introduced in GLSL 1.4 to support uniform buffer objects has been expanded to include in and out interfaces as well (e.g. vertex attributes and varyings).
  • New origin_upper_left and pixel_center_integer qualifiers for gl_FragCoord, to match the configurable fragment center coordinates functionality.
  • New sampler types for multi-sampled texture sampling.

Perhaps the most dramatic change to the language are interface blocks, which is an extension of the uniform block functionality introduced in GLSL 1.4 to support uniform buffer objects. Right now, it is illegal to have an input block in a vertex shader or an output block in a fragment shader, so they are mainly used to define coarse granularity backing of interface data (e.g. varyings) between vertex, geometry and fragment shaders. Uniform blocks are shared across all shader types and can be backed by buffer objects, which is how OpenGL expresses Direct3D 10 constant buffers.

Update: More information about the release and some new extensions at http://www.g-truc.net/#news0170.

Tags: , ,

Riven X on Twitter

I’ve created a developer diary for Riven X on Twitter at http://twitter.com/rivenx. I’ll be posting there much more frequently than on this blog I think, mostly because I appreciate the short status updates style of communication Twitter excels at.

I am also looking at integrating this blog a little bit better with Twitter. For those of you who want to follow me, check out http://twitter.com/jfroy.

Tags: ,

Riven X 0.8

Update: Riven X 0.8.3 is now available.

Riven X 0.8 is a massive release, with nearly every puzzle in the game implemented and a long list of improvements and bug fixes to the engine. See the release notes for all the details. I know it’s been a long time coming, but I think you will find it to be the strongest, most polished release yet. I’m also hoping it will resolve a number of graphics issues some people have been seeing on older hardware as well as on Intel graphics hardware.

I now turn my attention to a short list of remaining puzzles and core game features to essentially complete the game. This work will be released as Riven X 0.9, which aims to be a completely playable from start to finish version of the game. I expect this work to take around a month and a half. Once Riven X 0.9 is out, I will advertise the beta a little bit more to gather as much feedback as possible to make sure Riven X works great on as many configurations as possible. The 1.0 release cycle will thus focus on polish, bug fixing, interface and installation improvements, packages, and all the things one must do for a final release.

Finally, thank you to all of those who have tested Riven X so far and contributed feedback or bugs. Your help and support is greatly appreciated.

Now go on and give Riven X 0.8 a try!

Download Riven X 0.8.3 (4.0 MiB).

Tags: ,

I thought I should congratulate Cyan Worlds on a really good port of the original MYST to the iPhone. That they managed to accomplish this at all is pretty amazing, but they went beyond getting the game on there and really tried to adapt the control interface for the touch screen.

And according to numbers on the App Store, they are doing quite well, at number 10 overall in the US. Considering the game is a massive 727 MB, that’s quite an achievement.

And before you ask, no, I don’t have Riven X working on the phone… yet. There are a number of technical challenges standing in the way, most notably the sheer amount of assets in Riven and background movies (the phone may not be able to handle those at all). In any case, I am focused on finishing the desktop version first.

Speaking of which, I should have the first development release of the 0.8 series out shortly.

Tags: , , ,

NVidia releases beta OpenGL 3.1 drivers

Get the from http://developer.nvidia.com/object/opengl_3_driver.html. I’m sure AMD will follow suite in short order. IHV support is incredibly important to the ongoing success of the OpenGL standard, so a big thank you to them.

Tags: ,

OpenGL 3.1 officially released

The spec is available at http://www.opengl.org/registry/doc/glspec31.20090324.pdf

Some of the highlights:

  • ARB_draw_instanced is now core (instanced draw in vertex shaders with an instance ID built-in)
  • EXT_copy_buffer is now core (data copies between buffer objects without round-tripping to SRAM)
  • ARB_texture_buffer_object is now core (using buffer objects as the backing store for texture images)
  • ARB_texture_rectangle is now core (non-power of two textures with non-normalized texture coordinates and additional restrictions)
  • ARB_uniform_buffer_object is now core (using buffer objects as the backing store for many uniforms)
  • New signed normalized texture format
  • Modified NV_primitive_restart is now core (server-side primitive rasterization restart)
  • All of the OpenGL 3.0 features marked deprecated in Section E of the OpenGL 3.0 specification are gone from the OpenGL 3.1 specification, with the exception of line widths greater than one.

In addition, GLSL 1.4 has been released in tandem with OpenGL 3.1. The spec is available at http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.40.05.pdf. Some of the highlights include support for uniform buffers, rectangular textures, texture buffers and instanced drawing. In addition, all OpenGL “fixed function” built-in variables, namely built-in vertex shader inputs, built-in state uniforms (with the exception of depth range parameters) and all built-in varyings have been removed.

Of course, in both cases, the removed functionality has been moved to ARB extensions (ARB_compatibility), as was described in detail in the deprecation model section of the OpenGL 3.0 specification.

Tags: ,

Khronos to reveal details about OpenGL 3.1 at GDC

From http://www.khronos.org/news/events/detail/gdc_san_francisco_2009 and Khronos announces highlights from the News Conference and Developers Sessions at GDC 2009:

Streamlined OpenGL 3.1 Specification Released
Just nine months after OpenGL 3.0; Adds cutting-edge GPU functionality

The press release also mentions that OpenCL 1.0 implementations are close to shipping, which is extremely impressive considering that the specification was not released too long ago. In any case, this is going to be an interesting week for the OpenGL and OpenCL communities.

Tags: , ,

A note about the end of a journey aboard a Battlestar

I wanted to commemorate, after watching the finale of what has undeniably been one of the most successful and powerful television show in the past 5 years, the end of Battlestar Galactica. On the finale itself, all I have to say is Bravo. It was a masterpiece of storytelling and it dared our imagination. As a whole, Battlestar Galactica took millions of us through a 5 year long journey amongst the stars and the lives of incredibly real yet larger than life characters.

It will be remembered. The lives that have touched ours, despite having been created by the talent and dedication of writers, composers, actors, artists and so many others, will be remembered.

So say we all.

Tags:

Riven X 0.7.3 released

Riven X 0.7.3 is now available. It fixes an issue on Tiger where saved games would not be selectable in the open saved game dialog.

Download Riven X 0.7.3 (5.1 MB).

Tags:

« Older entries