20 months agoRequire import module names to be identifiers
Mikko Rasa [Fri, 21 Jun 2019 10:25:33 +0000 (13:25 +0300)]
Require import module names to be identifiers

20 months agoConsistently use the NodeList and NodeArray types
Mikko Rasa [Fri, 21 Jun 2019 10:24:01 +0000 (13:24 +0300)]
Consistently use the NodeList and NodeArray types

20 months agoAdd an intermediate node type for statements
Mikko Rasa [Fri, 21 Jun 2019 10:19:47 +0000 (13:19 +0300)]
Add an intermediate node type for statements

20 months agoObtain the instance transform location from shader program
Mikko Rasa [Fri, 21 Jun 2019 08:32:46 +0000 (11:32 +0300)]
Obtain the instance transform location from shader program

20 months agoMerge variable declaration layouts
Mikko Rasa [Fri, 21 Jun 2019 08:23:21 +0000 (11:23 +0300)]
Merge variable declaration layouts

20 months agoConsider extensions when checking GLSL features
Mikko Rasa [Fri, 21 Jun 2019 08:22:08 +0000 (11:22 +0300)]
Consider extensions when checking GLSL features

20 months agoStore information about attributes in Program
Mikko Rasa [Thu, 20 Jun 2019 21:50:41 +0000 (00:50 +0300)]
Store information about attributes in Program

20 months agoSplit the interface queries from Program::link into separate functions
Mikko Rasa [Thu, 20 Jun 2019 08:38:11 +0000 (11:38 +0300)]
Split the interface queries from Program::link into separate functions

20 months agoInitial support for instanced rendering
Mikko Rasa [Wed, 19 Jun 2019 23:22:12 +0000 (02:22 +0300)]
Initial support for instanced rendering

This is still a bit rough and does not support things like LoDs or custom
instance attributes.

20 months agoSome refactoring of the draw code path
Mikko Rasa [Wed, 19 Jun 2019 23:01:43 +0000 (02:01 +0300)]
Some refactoring of the draw code path

These changes make it easier to add instanced versions of the draw calls.

20 months agoExpose world-to-eye matrix in Renderer's standard shdata
Mikko Rasa [Wed, 19 Jun 2019 22:55:27 +0000 (01:55 +0300)]
Expose world-to-eye matrix in Renderer's standard shdata

20 months agoAdd vertex setup state to Renderer
Mikko Rasa [Wed, 19 Jun 2019 22:54:57 +0000 (01:54 +0300)]
Add vertex setup state to Renderer

20 months agoUse direct state access for updating VertexSetup
Mikko Rasa [Tue, 18 Jun 2019 10:34:01 +0000 (13:34 +0300)]
Use direct state access for updating VertexSetup

20 months agoOnly update the changed parts of VertexSetup
Mikko Rasa [Tue, 18 Jun 2019 10:28:04 +0000 (13:28 +0300)]
Only update the changed parts of VertexSetup

Besides being a minor optimization, this fixes a crash if update gets
called before both vertex array and index buffer are set.

20 months agoMove vertex array object management out of Mesh
Mikko Rasa [Tue, 18 Jun 2019 08:42:22 +0000 (11:42 +0300)]
Move vertex array object management out of Mesh

It's called VertexSetup because VertexArray was already in use.  On the
other hand I don't want to tie VAOs with the VertexArray class because
instanced rendering will need two VertexArrays in a single VAO.

20 months agoChange the return type of Renderable::get_instance_key to IntPtr
Mikko Rasa [Mon, 17 Jun 2019 22:12:35 +0000 (01:12 +0300)]
Change the return type of Renderable::get_instance_key to IntPtr

20 months agoMake a const pointer to a Bufferable's buffer publicly accessible
Mikko Rasa [Mon, 17 Jun 2019 20:29:59 +0000 (23:29 +0300)]
Make a const pointer to a Bufferable's buffer publicly accessible

20 months agoUse linear filtering when rendering bloom
Mikko Rasa [Mon, 17 Jun 2019 20:25:49 +0000 (23:25 +0300)]
Use linear filtering when rendering bloom

This postprocessor is often rendered at a reduced resolution, and nearest
filtering causes the output to appear blocky.

20 months agoBetter checking of the existence of image filepath
Mikko Rasa [Sun, 16 Jun 2019 10:15:32 +0000 (13:15 +0300)]
Better checking of the existence of image filepath

Apparently packed images can get funny filepaths like "//../../../../"
in autosaves.  Best to check only the basename so there won't be empty
filenames in datafiles.

20 months agoCheck the result of open_raw
Mikko Rasa [Sun, 16 Jun 2019 10:14:55 +0000 (13:14 +0300)]
Check the result of open_raw

20 months agoAdd simple ligature support to Font
Mikko Rasa [Sun, 16 Jun 2019 08:54:18 +0000 (11:54 +0300)]
Add simple ligature support to Font

Currently only two-character ligatures are supported.

20 months agoAdd looping detection to animation exporter
Mikko Rasa [Sun, 16 Jun 2019 08:52:27 +0000 (11:52 +0300)]
Add looping detection to animation exporter

Since Blender's actions do not have a looping property, detect looping by
comparing the first and last keyframes of each curve.

20 months agoSet both min and mag filters when exporting textures
Mikko Rasa [Sun, 16 Jun 2019 08:48:52 +0000 (11:48 +0300)]
Set both min and mag filters when exporting textures

20 months agoImport fixes for exporter
Mikko Rasa [Sun, 16 Jun 2019 08:48:32 +0000 (11:48 +0300)]
Import fixes for exporter

20 months agoMake ambient occlusion edge detection threshold adjustable
Mikko Rasa [Sat, 15 Jun 2019 12:23:02 +0000 (15:23 +0300)]
Make ambient occlusion edge detection threshold adjustable

This may be necessary to avoid artifacts when running the postprocessor
at a reduced resolution.

20 months agoUse RED format for ambient occlusion render target
Mikko Rasa [Sat, 15 Jun 2019 12:20:44 +0000 (15:20 +0300)]
Use RED format for ambient occlusion render target

20 months agoImprove ambient occlusion edge detection
Mikko Rasa [Sat, 15 Jun 2019 12:18:09 +0000 (15:18 +0300)]
Improve ambient occlusion edge detection

The depth thresholds are now based on the distance of the sample from the
center, which works better in the presence of sloped flat surfaces.

20 months agoUse mspdatatool to generate the builtin resources file
Mikko Rasa [Wed, 12 Jun 2019 17:08:38 +0000 (20:08 +0300)]
Use mspdatatool to generate the builtin resources file

20 months agoUse a type registry to manage postprocessor types for pipeline templates
Mikko Rasa [Wed, 12 Jun 2019 17:07:00 +0000 (20:07 +0300)]
Use a type registry to manage postprocessor types for pipeline templates

20 months agoAdd overloads of keyframe uniform statements without size suffixes
Mikko Rasa [Tue, 11 Jun 2019 21:19:10 +0000 (00:19 +0300)]
Add overloads of keyframe uniform statements without size suffixes

20 months agoFix a data corruption issue in mesh exporter
Mikko Rasa [Tue, 11 Jun 2019 21:07:38 +0000 (00:07 +0300)]
Fix a data corruption issue in mesh exporter

Apparently mathutils.Vector can refer to external data, in this case the
mesh's UV coordinates, which gets deleted with the mesh.  Copy the values
to make sure they are retained.

20 months agoRemove an incorrect and unnecessary check in scene exporter
Mikko Rasa [Tue, 11 Jun 2019 21:06:28 +0000 (00:06 +0300)]
Remove an incorrect and unnecessary check in scene exporter

Technique was moved from Object to Material.

20 months agoAdd an option to export all animations for all selected objects
Mikko Rasa [Tue, 11 Jun 2019 16:50:14 +0000 (19:50 +0300)]
Add an option to export all animations for all selected objects

20 months agoAdjust exported animation keyframes to start from zero time
Mikko Rasa [Tue, 11 Jun 2019 16:49:01 +0000 (19:49 +0300)]
Adjust exported animation keyframes to start from zero time

20 months agoAdd exporter for animations
Mikko Rasa [Tue, 11 Jun 2019 08:31:44 +0000 (11:31 +0300)]
Add exporter for animations

20 months agoAnimate only those components which are present in Transforms
Mikko Rasa [Tue, 11 Jun 2019 08:15:09 +0000 (11:15 +0300)]
Animate only those components which are present in Transforms

This allows different components to have different keyframes, matching
the functionality of various animation software packages.

20 months agoKeep track of which components have been set in Transform
Mikko Rasa [Tue, 11 Jun 2019 08:03:24 +0000 (11:03 +0300)]
Keep track of which components have been set in Transform

Also allow individual vector elements to be specified in datafiles.

20 months agoFix a copypaste error in AnimationPlayer uniform setting code
Mikko Rasa [Sat, 8 Jun 2019 18:08:00 +0000 (21:08 +0300)]
Fix a copypaste error in AnimationPlayer uniform setting code

20 months agoFix the keyword of the uniform scaling statement in Transform loader
Mikko Rasa [Sat, 8 Jun 2019 11:26:52 +0000 (14:26 +0300)]
Fix the keyword of the uniform scaling statement in Transform loader

20 months agoAdd getter for Animation::looping
Mikko Rasa [Sat, 8 Jun 2019 07:16:27 +0000 (10:16 +0300)]
Add getter for Animation::looping

20 months agoMerge branch 'animation-rework'
Mikko Rasa [Sat, 8 Jun 2019 06:50:02 +0000 (09:50 +0300)]
Merge branch 'animation-rework'

20 months agoAdd compatibility support for slope-based animation interpolation
Mikko Rasa [Sat, 8 Jun 2019 06:47:24 +0000 (09:47 +0300)]
Add compatibility support for slope-based animation interpolation

20 months agoAdd a setter for KeyFrame uniforms
Mikko Rasa [Sat, 8 Jun 2019 06:47:00 +0000 (09:47 +0300)]
Add a setter for KeyFrame uniforms

20 months agoRefactor KeyFrame ownership management in Animation
Mikko Rasa [Sat, 8 Jun 2019 06:17:51 +0000 (09:17 +0300)]
Refactor KeyFrame ownership management in Animation

The public add_keyframe functions no longer provide a convenient single
place to set the RefPtr keep flag, so move it into the private function.

20 months agoUse bezier splines in Animation
Mikko Rasa [Fri, 7 Jun 2019 23:17:43 +0000 (02:17 +0300)]
Use bezier splines in Animation

Control keyframes can now be added to affect the shape of curves.  Zero,
one or two control keyframes can be present between any two regular
keyframes, resulting in a linear, quadratic or cubic segment.

20 months agoMake animation curve creation more generic
Mikko Rasa [Fri, 7 Jun 2019 22:30:11 +0000 (01:30 +0300)]
Make animation curve creation more generic

20 months agoDo not clear previous assignments on assignment to array subscript
Mikko Rasa [Fri, 7 Jun 2019 19:18:05 +0000 (22:18 +0300)]
Do not clear previous assignments on assignment to array subscript

It makes manual array impossible if the previous elements are thrown

20 months agoVisit the rest of an iteration statement in NodeRemover
Mikko Rasa [Fri, 7 Jun 2019 17:27:57 +0000 (20:27 +0300)]
Visit the rest of an iteration statement in NodeRemover

20 months agoAvoid some brain damage from Windows headers
Mikko Rasa [Thu, 6 Jun 2019 12:57:11 +0000 (15:57 +0300)]
Avoid some brain damage from Windows headers

20 months agoReimplement Animation using splines
Mikko Rasa [Wed, 5 Jun 2019 22:02:41 +0000 (01:02 +0300)]
Reimplement Animation using splines

Transform interpolation is now performed on individual components rather
than entire matrices.  This produces more accurate rotations and later
will allow animations to only affect some components of the transform.

Currently linear splines are used and the slope parameters are ignored.
Pose matrices are also disabled for now because I don't have any suitable
data for testing them.  The old implementation was broken in various ways

20 months agoCheck for armature mismatches in Animation
Mikko Rasa [Tue, 4 Jun 2019 22:42:49 +0000 (01:42 +0300)]
Check for armature mismatches in Animation

Also set the armature if a keyframe with a pose is added and there is no
armature yet.

20 months agoStore a Transform in keyframes instead of a Matrix
Mikko Rasa [Tue, 4 Jun 2019 14:13:59 +0000 (17:13 +0300)]
Store a Transform in keyframes instead of a Matrix

This is the first step towards curve-based animations and finer control
over which values are animated.

20 months agoAdd more public methods to Transform
Mikko Rasa [Tue, 4 Jun 2019 11:11:45 +0000 (14:11 +0300)]
Add more public methods to Transform

20 months agoExport world transforms for scene objects
Mikko Rasa [Tue, 4 Jun 2019 10:39:27 +0000 (13:39 +0300)]
Export world transforms for scene objects

The location, rotation and scale properties contain transform components
relative to the somewhat arbitrary basis matrix.  Obtain the values from
the world matrix instead.  A drawback is that nonuniform or negative
scaling can produce inconsistent results.

20 months agoUse transform blocks to specify object transforms in exported scenes
Mikko Rasa [Tue, 4 Jun 2019 10:00:07 +0000 (13:00 +0300)]
Use transform blocks to specify object transforms in exported scenes

20 months agoMove transform loading to ObjectInstance
Mikko Rasa [Tue, 4 Jun 2019 09:26:54 +0000 (12:26 +0300)]
Move transform loading to ObjectInstance

20 months agoAdd a class to unify loading coordinate transforms
Mikko Rasa [Tue, 4 Jun 2019 07:39:17 +0000 (10:39 +0300)]
Add a class to unify loading coordinate transforms

It will also be useful for animations.  Euler angles are not the ideal
way of storing rotations but they are relatively easy to understand and
work with.  Other rotation types will be added in the future.

20 months agoDo not use the srgb flag for textures that explicitly define storage
Mikko Rasa [Tue, 4 Jun 2019 07:23:39 +0000 (10:23 +0300)]
Do not use the srgb flag for textures that explicitly define storage

Presumably the texture author knows which colorspace the texture uses.
In particular this made it impossible to load non-color textures such
as normal maps which require a linear colorspace if the srgb flag was
set in the containing resource collection.

20 months agoUpdate deprecated things
Mikko Rasa [Mon, 3 Jun 2019 16:43:41 +0000 (19:43 +0300)]
Update deprecated things

20 months agoBetter naming algorithm for objects in scene export
Mikko Rasa [Sat, 1 Jun 2019 12:55:28 +0000 (15:55 +0300)]
Better naming algorithm for objects in scene export

Arbitrary prefixes can cut words or numbers in silly places.  Only allow
truncating at common separator characters.

20 months agoAdd getters for RenderTarget width and height
Mikko Rasa [Fri, 31 May 2019 19:30:20 +0000 (22:30 +0300)]
Add getters for RenderTarget width and height

20 months agoFix a texture data indexing bug in AmbientOcclusion
Mikko Rasa [Thu, 30 May 2019 10:54:42 +0000 (13:54 +0300)]
Fix a texture data indexing bug in AmbientOcclusion

20 months agoRecognize displacement map textures when exporting
Mikko Rasa [Wed, 29 May 2019 17:19:41 +0000 (20:19 +0300)]
Recognize displacement map textures when exporting

20 months agoAlways export texture data inline if there's no image file
Mikko Rasa [Wed, 29 May 2019 17:17:56 +0000 (20:17 +0300)]
Always export texture data inline if there's no image file

This allows exporting packed or baked textures.

21 months agoInline functions in variable initialization expressions
Mikko Rasa [Tue, 28 May 2019 08:59:45 +0000 (11:59 +0300)]
Inline functions in variable initialization expressions

If the entire expression was a function call, it didn't get inlined
because VariableDeclaration wasn't being handled separately.

21 months agoAdd an exporter for Blender cameras
Mikko Rasa [Sun, 26 May 2019 18:18:01 +0000 (21:18 +0300)]
Add an exporter for Blender cameras

21 months agoMark datafile tokens as such
Mikko Rasa [Sun, 26 May 2019 18:17:42 +0000 (21:17 +0300)]
Mark datafile tokens as such

21 months agoSupport while loops in GLSL
Mikko Rasa [Sat, 25 May 2019 21:58:17 +0000 (00:58 +0300)]
Support while loops in GLSL

Loops with only a condition expression present are now emitted as while
loops, even if they were originally for loops.

21 months agoImprove formatting of an empty loop body
Mikko Rasa [Sat, 25 May 2019 21:55:10 +0000 (00:55 +0300)]
Improve formatting of an empty loop body

21 months agoAllow removing the initialization statement of a for loop
Mikko Rasa [Sat, 25 May 2019 21:53:05 +0000 (00:53 +0300)]
Allow removing the initialization statement of a for loop

Previously the compiler would recognize it as unused but couldn't remove
it, leading it to repeat the optimizer endlessly.

21 months agoMake all components of a for loop optional
Mikko Rasa [Sat, 25 May 2019 21:52:33 +0000 (00:52 +0300)]
Make all components of a for loop optional

21 months agoRemove an XXX because I no longer remember how to reproduce the issue
Mikko Rasa [Sat, 25 May 2019 21:25:34 +0000 (00:25 +0300)]
Remove an XXX because I no longer remember how to reproduce the issue

Next time I should include a test case.

21 months agoFix various issues with constant condition elimination
Mikko Rasa [Sat, 25 May 2019 21:00:54 +0000 (00:00 +0300)]
Fix various issues with constant condition elimination

It used to optimize based on the initial values of variables, ignoring
the fact that they may change between loop iterations.  A stop-gap fix
was implemented in 8e14c29, but it prevented optimizations of some
conditionals that could safely have been removed.  It also caused the
optimizer to ignore any assignments made to any variables after
declaration when evaluating the loop condition, potentially causing
entire loops to be erroneously removed.  Finally, unary expressions were
not being handled so ++ and -- operators did not mark the variable as

21 months agoProcess MemberAccess nodes in FunctionInliner
Mikko Rasa [Fri, 24 May 2019 22:32:17 +0000 (01:32 +0300)]
Process MemberAccess nodes in FunctionInliner

21 months agoCorrectly parse consecutive *s in a comment
Mikko Rasa [Fri, 24 May 2019 22:07:03 +0000 (01:07 +0300)]
Correctly parse consecutive *s in a comment

Parsing state must not be reset at ** because there may be a / after.

21 months agoDon't try to access a nonexistent return expression
Mikko Rasa [Fri, 24 May 2019 22:04:44 +0000 (01:04 +0300)]
Don't try to access a nonexistent return expression

21 months agoRemove useless using declarations
Mikko Rasa [Fri, 24 May 2019 19:26:34 +0000 (22:26 +0300)]
Remove useless using declarations

Scene no longer has any other overloads of render().

21 months agoDon't attempt to create a copy of null ProgramData
Mikko Rasa [Fri, 24 May 2019 19:26:10 +0000 (22:26 +0300)]
Don't attempt to create a copy of null ProgramData

21 months agoCopy the material slot of RenderPass
Mikko Rasa [Fri, 24 May 2019 19:25:57 +0000 (22:25 +0300)]
Copy the material slot of RenderPass

21 months agoRemember the camera given to Renderer constructor
Mikko Rasa [Fri, 24 May 2019 19:24:43 +0000 (22:24 +0300)]
Remember the camera given to Renderer constructor

And reapply it in end().  It may be necessary to call end() during
setup_frame in order to render nested content, but the camera must

21 months agoAdd OffscreenView class
Mikko Rasa [Fri, 24 May 2019 17:49:41 +0000 (20:49 +0300)]
Add OffscreenView class

This is a fairly thin wrapper around RenderTarget, mostly useful as an

21 months agoSome cleanup for View and WindowView
Mikko Rasa [Fri, 24 May 2019 17:49:07 +0000 (20:49 +0300)]
Some cleanup for View and WindowView

21 months agoAdd numberless versions of vertex array statements
Mikko Rasa [Fri, 24 May 2019 16:39:03 +0000 (19:39 +0300)]
Add numberless versions of vertex array statements

This should have accompanied 6ee541f, which changed the exporter to use
those keywords.

21 months agoAllow tagging objects in a scene file for retrieval after loading
Mikko Rasa [Fri, 24 May 2019 15:43:19 +0000 (18:43 +0300)]
Allow tagging objects in a scene file for retrieval after loading

21 months agoTry to simplify object names when exporting a scene
Mikko Rasa [Fri, 24 May 2019 15:27:50 +0000 (18:27 +0300)]
Try to simplify object names when exporting a scene

The exporter now tries to find the longest common prefix for objects
sharing the same prototype and exports the prototype using that name.
This avoids having randomly numbered object names.

21 months agoFixes and improvements to exporting materials
Mikko Rasa [Thu, 23 May 2019 21:20:26 +0000 (00:20 +0300)]
Fixes and improvements to exporting materials

21 months agoAdd a missing file
Mikko Rasa [Thu, 23 May 2019 21:06:05 +0000 (00:06 +0300)]
Add a missing file

It was supposed to be in bde3ec8.

21 months agoSet texture format according to sRGB colorspace setting
Mikko Rasa [Sun, 19 May 2019 23:20:06 +0000 (02:20 +0300)]
Set texture format according to sRGB colorspace setting

21 months agoImplement material maps for exporting objects with multiple materials
Mikko Rasa [Sun, 19 May 2019 23:03:41 +0000 (02:03 +0300)]
Implement material maps for exporting objects with multiple materials

This replaces the material texture feature which was removed earlier.  The
principle is similar (store material color values in a texture) but the
maps are global, making it possible for multiple objects to use the same

21 months agoImprove texture unit assignment when exporting meshes
Mikko Rasa [Sat, 18 May 2019 14:55:16 +0000 (17:55 +0300)]
Improve texture unit assignment when exporting meshes

21 months agoSome bugfixes to texture exporting
Mikko Rasa [Sat, 18 May 2019 07:54:44 +0000 (10:54 +0300)]
Some bugfixes to texture exporting

21 months agoSimplify the resource separation options
Mikko Rasa [Sat, 18 May 2019 07:45:23 +0000 (10:45 +0300)]
Simplify the resource separation options

Having different options for each resource type was getting unmanageable.
I don't see much value in such fine-grained control either.

21 months agoUse filtering options from Blender texture
Mikko Rasa [Thu, 16 May 2019 21:46:21 +0000 (00:46 +0300)]
Use filtering options from Blender texture

A new property has been added on textures to reference the original image
only and use default options at load time.

21 months agoRefactor texture handling in the material exporter
Mikko Rasa [Thu, 16 May 2019 19:56:37 +0000 (22:56 +0300)]
Refactor texture handling in the material exporter

21 months agoMove material and texture export to their own classes
Mikko Rasa [Thu, 16 May 2019 15:58:55 +0000 (18:58 +0300)]
Move material and texture export to their own classes

Also move technique properties from Object to Material.

21 months agoMake resource handling in the Blender exporter more flexible
Mikko Rasa [Thu, 16 May 2019 11:38:27 +0000 (14:38 +0300)]
Make resource handling in the Blender exporter more flexible

All resources are now collected into a dict and referenced or inlined as
necessary.  This makes it possible for SceneExporter to see the resources
used by objects and export them to the resource collection as separate

21 months agoRedesign file writing in the Blender exporter
Mikko Rasa [Wed, 15 May 2019 21:42:03 +0000 (00:42 +0300)]
Redesign file writing in the Blender exporter

Instead of writing statements directly to the file as string fragments,
construct an in-memory representation of the exported data first.  This
allows it to be manipulated and combined easier.

21 months agoCombine shared_mesh and shared_tech into a single option
Mikko Rasa [Wed, 15 May 2019 21:38:02 +0000 (00:38 +0300)]
Combine shared_mesh and shared_tech into a single option

21 months agoTemporarily remove the material texture feature from Blender exporter
Mikko Rasa [Wed, 15 May 2019 21:33:00 +0000 (00:33 +0300)]
Temporarily remove the material texture feature from Blender exporter

It gets in the way of other improvements and will be replaced by a
similar yet different feature later.

21 months agoOnly use texunit zero in exporter-generated techniques
Mikko Rasa [Sun, 12 May 2019 06:59:53 +0000 (09:59 +0300)]
Only use texunit zero in exporter-generated techniques

It does not make much sense to use anything else without shaders, and
accessing the mesh to find out unit numbers is getting in the way of
some other changes.