Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
436 lines (262 sloc) 16.5 KB
* 2.1.0 (Not Released) *
* Consolidated noise algorithm to use a single texture buffer instead of 3 separate
buffers with no loss in performance, special thanks to Stefan Gustavson.
* Resolved #52: Made it possible to invoke `rails g jax:install` with just `jax install`
* Resolved #42: Deprecated WebGL wrapper methods, since they're no longer helpful
* Previous versions of Jax used a temporary WebGL context during initialization; this
has now been removed in favor of lazily loading the relevant data.
* Removed Jax.render_speed and corrected some small render bugs
* Fixed framerate calculation
* 2.0.8 *
* Resolved issue #55: bin/jax should not fail within spaced paths
* 2.0.7 *
* Resolved issue #48: Unable to reliably pick any object not explicitly added to World
* Resolved issue #54: Default views can't be overridden
* 2.0.6 *
* Resolved issue #30: `Jax.Framebuffer#getTexture(context, index)` now returns texture
with index 0 if index was not given.
* Resolved issue #43: Plugin models appear after app models in load order.
* Minor improvements to `Jax.Framebuffer`
* `Jax.Texture` data type can now be specified, for example, in apps which make use of
the OES_texture_float extension
* Resolved issue #38: `Jax.RouteSet` now underscores CamelCase routes.
* `Jax.World#addLightSource()` now returns the light source that was added, just like
`Jax.World#addObject()` returns the object that was added.
* Resolved issue #46: Render errors when shadows are disabled, but shadowmapping is not
* Resolved issue #47: Removing an object from the scene causes infinite recursion in light
* 2.0.5 *
* Setting `shadowcaster` to `false` for a light source now has the expected result: it
disables all shadow mapping for that light, resulting in a significant performance boost.
* Updated gl-matrix to the latest version (v1.1), and updated Jax to take advantage of
it, resulting in a moderate performance boost.
* Light sources no longer generate shadow maps for, nor cast shadows upon, objects that
are beyond their range. This is based on the light's intensity (its ambient,
specular and diffuse color components), and its attenuation coefficients.
* Fixed `Jax.Camera#unproject` -- it had some stupid errors that kept it from working
at all. This method had also somehow crept into Jax without any tests; it is now
appropriately tested, of course.
* 2.0.4 *
* Jax was not differentiating between development mode and production mode, resulting
in production apps that took performance hits incurred by logging debug information.
* `Jax.VERSION` now works properly, by embedding the rubygem version as intended
* 2.0.3 *
* Resolved a 1280 GL_INVALID_OPERATION error for most Jax applications running under Safari.
* 2.0.2 *
* Fixed the shader generator, which was generating deprecated (and not working) code.
* 2.0.1 *
* Implemented missing `Jax.Geometry.Line#contains` method.
* Fixed line intersection test, when `vec3` is used as a receiver for point of intersection.
* Built-in resources have been moved to their respective `.resource` files. Same with
shaders. This should make overriding them work more reliably, and remove redundant
requests for built-in shaders and resources.
* 2.0.0 *
* Integrates cleanly with Ruby on Rails applications. Add `jax` to the bundle, then run:
jax g install
* Internal development server is now a Rails engine, so that it can run stand-alone (for
non-Rails apps) as well as be mounted into Rails apps directly.
* Generators now inherit from `Rails::Generators::Base`
* CoffeeScript is now supported, and CS files will be generated by default if the CS gem
is present.
* Files are now created in `app/assets/jax/` instead of just `app/` in order to gain the
benefits of the Rails asset pipeline.
* The `jax package` command has been deprecated in favor of `rake assets:precompile`.
* Packager will now minify all JavaScript code, if possible.
* The `public/javascripts/jax.js` file has been deprecated. Jax source files are now served
directly from within the rubygem.
* The `rake jax:update` task has been removed. It is no longer needed.
* Removed `config/routes.rb` from non-Rails apps. Instead, controllers map themselves
automatically on the JS side when defined, and their actions are looked up dynamically.
* Controller generator now generates an `index` action by default.
* Helper files are no longer generated by the controller generator since they usually weren't
tightly coupled to their corresponding controllers. A helper generator has been added,
* Added a material viewer to the dev suite, so that materials can be previewed in isolation
* Removed a runtime dependency on Minitar. `Gem::Package` is now used for tar and untar
operations instead.
* 1.1.1 *
* Mouse events are scaled in relation to the real canvas size, regardless of CSS styling.
This means you can always deal with mouse position in terms of the canvas +width+ and
+height+ attributes, without worrying about the actual pixel size on the client machine.
* Resolved an issue which caused picking to fail due to using string values for shader
names instead of instances of Jax.Shader.
* If Jax.Camera#fixedYawAxis is enabled, the Jax.Camera#setDirection method will now honor
that, and maintain the fixed yaw axis as expected.
* Added Jax.Geometry.Line, which is used in intersection tests.
* Significantly improved Jax.Geometry.Plane, and added 6 new intersection tests:
* Jax.Geometry.Line
* intersectLineSegment
* Jax.Geometry.Plane
* intersectRay
* intersectPlane
* intersectTriangle
* intersectLineSegment
* Jax.Geometry.Triangle
* intersectTriangle with an optional argument to capture the point of intersection
* Further optimized Jax.Geometry.Triangle and friends
* Jax now renders meshes consisting of GL_POINTS properly.
* Light manager now reverts the blend mode back to alpha blending, instead of leaving it
set to additive blending.
* Reordered render passes so that unlit objects are rendered _after_ lit objects.
* 1.1.0 *
* If a mesh #init method does not specify any vertex normals for the mesh, and
Jax.Mesh#getNormalBuffer() is called, Jax.Mesh will automatically calculate
vertex normals for the mesh. This is a relatively expensive operation (though
only for the first frame or so), so you should still strive to give your own set
of normals when possible.
* Jax.Mesh#setColor now accepts the color as a single RGBA array or as 4 separate R, G, B, A
* Added Jax.Geometry.Triangle, and exposed Jax.Mesh#getTriangles(). This class comes
complete with triangle/triangle, triangle/ray, triangle/sphere, and triangle/point
intersection tests! See API documentation. Jax.Geometry.Triangle can also return
its face normal.
* Added Jax.DataRegion, Jax.DataSegment, and Jax.DataBuffer, all of which are now used
internally by Jax.Mesh to manage its mesh data. This has cut memory usage for any
given Jax.Mesh in half, makes the additional memory footprint of Jax.Geometry.Triangle
negligible, and even nets a minor performance gain. Moreover, altering vertex data
in the Jax.Mesh is now immediately reflected in Jax.Geometry.Triangle and
Jax.Geometry.Plane, since they are sharing the same region of memory.
* Made most instance methods of Jax.Geometry.Plane faster and more memory efficient. Also
altered Jax.Geometry.Plane to take advantage of Jax.DataSegment for further memory gains.
* Exposed Jax.Mesh#validate(), which makes sure the mesh has been built and builds it
immediately if it hasn't, or if it is out of date.
* Thoroughly documented all Jax-specific extensions to the glMatrix library.
* Exposed and improved Jax.Mesh#getBounds() to calculate an axis-aligned bounding box
(AABB) in object space, and to handle meshes with no vertices (in which case all values
are set to zero).
* Added lib/**/*.js to the generated jasmine.yml file. (New applications only.)
* Exposed Jax.Camera#frustum to the API. Improved Jax.Frustum and thoroughly documented
its use.
* Vastly simplified usage of built-in Perlin noise. Replace all previous code with:
Jax.noise.bind(context, uniforms);
Previous code is still compatible, but should be considered deprecated.
* Helpers can optionally be defined as arrays, rather than as functions which return
arrays. For example, the following two lines are equivalent to one another:
helpers: [ UserInputHelper ]
helpers: function() { return [ UserInputHelper]; }
This addition is purely to reduce typing. Use the old, function-based approach to defer
execution until runtime; use the array-based approach if you don't care.
* Jax.Camera now uses quaternions instead of calculating the transform matrix directly.
This nets some potential performance improvements, but since the matrix still has to
eventually be calculated, it's more for internal efficiency and code maintenence than
anything. Using quaternions does significantly reduce the Jax.Camera memory footprint,
* Jax.Camera now uses a fixed yaw axis by default. Use Jax.Camera#setFixedYawAxis(false)
to disable. The new default represents the standard camera orientation, as in first-person
and third-person demos. Disabling fixed yaw axis will result in a more "flight simulator"
type of camera.
* Some minor movement-related bugfixes for Jax.Camera.
* Renamed Jax.IDENTITY_MATRIX to mat4.IDENTITY for clarity and consistency.
* Temporarily disabled calls to Jax.Context#checkForRenderErrors() in development under
Chrome, because the calls have proven far too detrimental to performance. When the
issue is fixed in Chrome, I'll re-enable this. In the meantime, do performance testing
in Chrome, but expect an overall more robust development cycle using Firefox.
* App generator: added a default but customizable stylesheet and index.html used when
packaging apps. Affects new applications only.
* Jax JavaScript library is no longer minified; this is left for developers to do after
packaging an application for production. This change makes it much simpler to track
errors in the field. May consider auto-minifying the entire package when
`rake package` is executed, but I'm not ready to do that yet.
* New error handling API lets developers hook directly into (and recover gracefully
from) otherwise catastrophic errors
* Developers can hook into "webgl not supported" errors to customize the framework's
response. By default, Jax redirects to an error page as per v1.0.0.
* Added Rails as a dependency; Jax now internally takes advantage of Railtie
to implement a highly modular application structure; Jax::Plugin and
Jax::Application both inherit from Railtie. This is not to be confused with
support for or integration with Ruby on Rails.
* Controller generator now accepts the `--root` option to automatically make it the
root controller
* Improved the light source API so that developers can replace this:"sun"));
* Jax now supports both Ruby 1.9.2 and Ruby 1.8.7.
* Added a benchmark script. Internal use only, but it also demonstrates a bare-bones,
JavaScript-only [no Ruby counterpart] Jax application. Check it out:
* Tons of documentation for the JavaScript API
* Plugin generator to create new plugins
* Plugin manager to search for, install, publish and remove plugins
* Plugin Repository (
* Plugin Guide (
* Jax.Context now Unregisters event handlers upon disposal
* If a Jax.Context has been disposed, it will no longer render or update.
* 1.0.1 *
* If a render error is encountered while generating shadow maps, the corresponding
light source has its +shadowcaster+ attribute set to false. This disables all
shadow maps (both their generation and usage) for the offending light source. The
same sequence also logs a message to the error console, but does not result in
a fatal error. Note that this condition is only triggered by a hard error during
shadowmap generation; soft errors like drastically low framerates are not handled.
* Driver bug workaround: avoid early returning from void functions. Apparently some
drivers crash when void functions encounter a `return` statement. See issue #20:
* 1.0.0 *
* First major-version release, baby!
* `rake build` with Jax rakefile now minifies jax.js before packaging so that
apps generated with `jax new appname` use minified jax.
* Jax.Mesh.Plane now includes texture coordinates. The range is [0..1] regardless
of size of plane or number of segments, so use texture scaling like you would for
any other mesh if a wider range is required.
* Lighting shader now takes options to override the defaults. This makes it easier
to extend with other shaders -- useful for shaders that alter or replace the
lighting model, or for shaders that just rely on the same uniforms.
* *
* Excluded worthless files from gemsec and reduced size of gem from 9mb to 100k!
* *
* Minor bugfixes for Jax.Util.colorize() and Jax.Util.Vectorize(). Specifically,
fixes involved correctly processing 3D colors and 2D vectors.
* Switch shader test generator to use SPEC_CONTEXT, which is now defined in the
spec_layout and helper files for new applicats. This isn't *immediately*
app-breaking but you should regenerate these files anyways or the next time you
generate a shader will cause a bad day.
* List enum name next to error number for clarity when render errors occur.
* Abstract test suite setup into a separate helper file
* Add a global SPEC_CONTEXT so users don't have to manually create a new context for
each spec
* Specs run on a completely separate context so that they don't cause issues with
the visual tests
* *
* Added +Jax.Shaders.max_vertex_textures+ which tracks the value of
GL_MAX_VERTEX_TEXTURE_UNITS so you can design shaders that Just Work.
* Exposed +shader_type+ to the EJS template so you can determine whether a shader's
source is for a vertex or fragment shader. (It's a string equal to either 'vertex'
or 'fragment'.) Useful for 'common' code, even more useful for reusable function
libraries. ;)
* Modified Jax built-in noise functions to utilize the above in order to quietly
fall back to the no-texture-lookup noise implementation by Ian McEwan: . This implementation is considerably slower
than the VTL one (my FPS on Mac drops from ~100 to ~60 for the 'blob' demo), so
it is better used as a secondary noise than as a primary.
* Renamed the VTL 'noise' function to 'cnoise' to avoid ambiguity in programs. Use
'cnoise' or 'snoise'.
* *
* Fixed a bug which could cause applications to fail in production (after running
`rake jax:package`). It was due to the packager adding helper files in the wrong
* *
* Introduced Jax.uptime, a running total of number of seconds since the Jax subsystem
was _loaded_ (not necessarily instantiated). This is now used in place of various
timers in Jax, e.g. for calculating the +timechange+ argument to #update methods.
* Added 'picking' support via Jax.World#pick(x,y); Jax.World#pickIndex(x,y);
Jax.World#pickRegion(x1,y1, x2,y2); Jax.World#pickRegionalIndices(x1,y1, x2,y2).
This is the last milestone prior to v1.0 release.
* Lots of new JavaScript API documentation
* Renamed Jax.Camera#getModelViewMatrix() to Jax.Camera#getTransformationMatrix().
The latter is more accurate. THIS WILL BREAK EXISTING APPS but since Jax is still
considered pre-release I'm not taking the extra step to deprecate it.
* Added Jax version number and framerate counter to spec layouts
* Added perlin noise example to /spec/example_app
* Added aliases for Math.radToDeg / Math.rad2deg and Math.degToRad / Math.deg2rad
* *
* Jax now checks JS version against gem version and reports on mismatches
* Perlin noise functions added -- just do this in your shader:
//= require "functions/noise"
* Split 'paraboloid-depthmap' shader into 2 separate shaders: 'paraboloid' and 'depthmap'
This makes it possible to reuse paraboloids for environment mapping.
* Shader dependencies are now loaded via Jax.shader_load_paths, which can be multiple
different directories (e.g. Jax builtin + app/shaders) This makes functions used by
Jax available for reuse in custom shaders.
* Added CHANGELOG. :)
Something went wrong with that request. Please try again.