This package exposes several modules to work with GPUs in a stateless and type-safe way. Currently, it uses OpenGL as backend hardware technology but others will be added later on, such as Vulkan.

One very important point is the fact that luminance has nothing to do with 3D engines or scene development kits. Don’t expect to find materials, lights or mesh loaders. It’s just a graphics framework initiated to fix the design choices of OpenGL. It won’t change in any other way. However, as it grows, the plan is to make luminance a good graphics framework following the Haskell philosophy. In the end, it should be used as-is, not as an OpenGL abstraction.

luminance is a small yet powerful graphics API. It was designed so that people can quickly get their feet wet and start having fun with graphics in Haskell. The main idea is to unleash the graphical and visual properties of GPUs in a stateless and type-safe way.

This library doesn’t expose any architectural patterns or designs. It’s up to you to design your program as you want and following your own plans.

In the end, as many people has asked me since the beginning of the development, the OpenGL version – current is 4.5 – will be lowered. You’ll be able to choose the backend to use through compilation flags.

Changes

0.7.2

  • Made UniformInterface visible (type only).

0.7.1

  • Added Graphics.Luminance.Pixel in the export-list of Graphics.Luminance.Texture.

0.7

Breaking changes

  • Shader creation can fail with the UnsupportedStage error, holding the stage (and not a String) as it used to.
  • Fixed cubemap size interface.
  • Shader interface now uses the type StageType and createStage to create new shader stages.

Minor changes

  • Several internal architectural changes.
  • Added gl45-bindless-textures caps.
  • Added gl32 and gl45 backends. The default backend is gl32 and backends can be selected via compilation flags.

Patch changes

  • Simplified and fixed UBO implementation.
  • Added more debug symbols.
  • OpenGL debugging now shows the callstack in a fancy way.
  • Several internal architectural changes.

0.6.0.5

  • semigroups-0.18 support.

0.6.0.4

  • Extensions are now set per module.

0.6.0.3

  • Updated .cabal documentation.
  • Support for semigroups-0.17.

0.6.0.2

  • Fixed typo in the hackage documentation.

0.6.0.1

  • Fixed (:*:) for UniformBlock.
  • Dumped the Storable constraint in the uniBlock function (rank2 function passed to build uniform interfaces to createProgram).
  • Added (:.), (,), (,,) and (,,,) into UniformBlock.

0.6

Breaking changes

  • Added a new function to the createProgram and createProgram_ uniform interface builder argument. That function can now be used to retrieve U (Region rw (UB a)), which is a UBO.
  • The uniform interface creation is not performed in a arbitrary, user-defined monad anymore. A dedicated type was introduced for that very purpose – UniformInterface – constraining the user to only use the uniformize functions to map semantics to U values.

Non-breaking changes

  • Added UB, which can be used along with Buffer to create UBO buffers and pass them to shaders.

0.5.2.1

  • Relaxed lower bound of linear to accept linear-1.19.*. That changes should enable lumimance to be included into stackage.
  • Changed internal representation of Region.

0.5.2

Non-breaking changes

  • Added texture arrays:
    • Texture1DArray
    • Texture2DArray
    • CubemapArray

0.5.1

Non-breaking changes

  • Added several Uniform instances for linear.

Patch changes

  • Fixed the indexed render.
  • Fixed the vertex attributes being ignored.

0.5

Breaking changes

  • Changed the interface of texels transfer and filling. We dropped the Foldable instance and now require a Data.Vector.Storable.Vector for performance purposes.

Non-breaking changes

  • Added MirrorRepeat constructor to Wrap.

Patch changes

  • Fixed prerequisites in README.

0.4.1

  • Fixed the sizeOf implementation of a :. b.
  • Added nubDirect, which can be used to turn direct geometry into indirect geometry.

0.4

Non-breaking changes

  • Added .gitignore.

Breaking changes

  • V2, V3 and V4 replaced by vec2, vec3 and vec4.
  • V is not anymore luminance’s. We use linear’s one, because it already has all the instances we need and is more generic. The interface is then impacted.

0.3.2

  • Added Core.Tuple into the export liste of Luminance for easier uses in client code space.

0.3.1.2

  • Fixed Geometry haddock documentation.

0.3.1.1

  • Fixed haddock escaping issues.

0.3.1

  • Added CubeFace in the interface.

0.3.0.1

  • Enhanced Texture documentation.

0.3

  • All textures can now be used in shaders.
  • Added support for more OpenGL textures – though, framebuffers are not impacted yet.
    • Texture1D
    • Texture2D
    • Texture3D
    • Cubemap
  • Changed the texture interface with type families so that we can add more in an easier way!

0.2

Breaking changes

  • Automatically insert GLSL pragmas in shaders.

Non-breaking changes

  • Added documentation for RenderCmd.
  • Added stdRenderCmd_.
  • Added shaderProgramBatch_.

0.1.1.1

  • Fixed a typo in the Graphics.Luminance documentation.

0.1.1

  • Added a tutoral in Graphics.Luminance.

0.1

  • Initial revision. Do not consider this revision as a stable release. It’s experimental. The first stable release will be 1.0.