effect: strict version checking, is it really needed ?


in ReadHeader method, there is these checks:

if (header.Version < MGFXHeader.MGFXVersion)
                throw new Exception("This MGFX effect is for an older release of MonoGame and needs to be rebuilt.");
if (header.Version > MGFXHeader.MGFXVersion)
                throw new Exception("This MGFX effect seems to be for a newer release of MonoGame.");

Is is really mandatory to have such a strict check between versions ?
Can a backward compatibility be possible ?

The main concern here is this simple scenario:
I have a project P, using a library L which is close-source and/or commercial (ie: content cannot be build as I wish).
The project P is very tied to it and cannot be made without L and then, one day as it all happened for engines made with XNA, company/authors behind L stop working on it, source not released, so no way to change anything in it.
BUT, project P is still alive and some kind of issue like this one or this one which need to use an updated MG version that’s not stay in sync with library L’s MG version, especially, and only, for the effect :(.

In such case, the project has no choice but to be stopped for good, unless creating a quite ugly fork of MG, using older MGFX header with newer code elsewhere (not sure it worth it and it would work anyway).

My actual case was when working with BEPU debug drawer, I first made one using MG 3.5.1, but creating a new project using BEPU + newer MG (dev) version rise the exception described above from ReadHeader method.
Here I was able to made another version (of BEPU + its debug drawer) which use dev version of MG, but in the other case, what could be done (knowing using an older MG release is not possible) ?


I think the header version is only updated when a breaking change is made, so no more than necessary. If you check the actual version number you’ll see it’s only at 8 or 9 IIRC on develop.

(It’s 8 on current dev branch)

@Tom , @KonajuGames ? What do you think ?