Re: [Gegl-developer] Path to the GIMP

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dave Neary wrote:



Calvin Williamson wrote:

On 21/01/04, Daniel Rogers wrote:

I don't see what this gets us. What features does it enable us to add to the gimp? The most highly requested "big features" like high bit depth support, CMYK and color management require us to change all the pixel access stuff first. The only thing I can see this as getting us is a simplification of procedural layers.


Its just a way of doing things that is more gradual, its just
the difference between refactoring towards something and
re-writing it completely. Both are candidates you might choose.
Seems both approaches have drawbacks and advantages.


For what it's worth, the softly-softly approach is the one I would advocate. Perhaps Sven, yosh and mitch have other ideas, but since it's been over 3 years since 1.2, I would like to have more regular releases. And that means keeping the GIMP CVS more or less usable more or less all the time.

See, the thing is, I don't think Calvin's plan is the "softly-softly" approach. Nor do I think it is more gradual.

Some of the work for the migration (setting things up so that integrating gegl ops can be factored in easily, for example) can be done in the 2.2 release, but I think it's best not to anticipate too much for that release.

Afterwards, a 2.4 or 3.0 could include, say, nodes doing layer compositing, and perhaps layer groups and adjustment layers (which would be pretty straightforward if we use gegl for rendering), and then swapping over from TileManagers to GeglTileCaches or whatever could be done after that release.

That's the Calvin plan, and I have to admit it has its charm.

Well, except you are glossing over huge details.

The alternative is to take at least 6 months (and that's probably ambitious) to convert the image and data structures completely to gegl in the core, do the UI for CMYK and extra bitdepths, and have a 3.0 over a year after a 2.2 release. Then migrating the layer system and projection code to GeglNodes would be a smaller job, and would be done for a 3.2 release in a couple of years.

No, I don't think that is my plan. In fact, CMYK came much much later in my plan (acording to the roadmap I wrote up). And it can be broken into small, managable, stable, goal focused steps.

For one thing, the actual data layout doesn't need to change at the begining. That was part of my goals of my gegl-image design. First you convert TileManager to GeglImage but use the same data layout as is currently used. Then the conversion in the gui is a refactoring of the api (and some rearranging of some assumptions) and the conversion in the compositing code simply changes the call to get the pointer to raw data.

As this point, the assumptions of the imaging code get cleaned up, no new features are added, and more or less the exact same files are touched (and they are _easier_ to change) as in calvins plan. Basically, calvin is suggesting we change the gui to use gegl ops, and change the ops to use tile managers and gimp compositing code, while I am suggesting we touch (less) gui to make it use gegl images, and touch the compositing code (in minor ways) to get its data from a gegl image.

Further more, we are taking a step _backwards_ to make gegl ops use gimp compositing code and tile managers, because we need to redo it, or keep gegl ops seperate entirly to keep gegl's goal of being an efficient, general image processing system. There is no step backward with my plan.

Next, where are we left after the initial integration? What is the next step for Calvin's plan? It isn't clear to me. We can't go to layer effects or adjustment layers. At least not in a general way, because that requires redisgning the plugins. We could integrate GeglImage, but now, but that is almost exactly the same as my first step, I do'nt see how integrating gegl image has gotten any easier because we did this. We are not ready to go to high bit depth. We are not ready for color management. We could go for layer groups. Anything else?

However, going for GeglImage first means that we have reviewed the pixel code for assumptions about color spaces and bit depths, and further, we have a pixel access system that understands color management and high bit depths. Further the gimp compositing system already does its work in doubles, so changing to high bit depth has just gotten much easier. Color Management is much closer to being achieved because of GeglColorSpace (and its reliance on ICC profiles). Futher, we haven't taken a step backwards on gegl ops, so we can now do calvins first step and integrate gegl ops, only we can integrate the real gegl ops instead of hacked up gegl ops, and still hit the same changes in the gui. My point is not that we must do all these things, but that integrating GeglImage gets us ready to do any of these next steps, and they can even proceed a good bit in parallel.



This also has some things going for it - at some stage we're going to have to take the hit converting the core. And this gives us the big features in the next stable release. But it means having a fairly unstable core for some periods, I think.

I think calvin's plan takes a bigger hit to the core. And no, it won't necessaraly (though it could) give the big features in the next release, and it certainly puts us closer to them.

my point is the gimp gets ported to GeglImage while gegl gets its ops working and then, when gimp is finished is ready, move in GeglOps. Moving the other way means that while Gegl is tuning its op stuff for its new image model, gimp is grafting the ops into its old image model. These cross-purposes sound like they are oging to cause collisiosns.


So just to be clear, are you saying first fork a developer branch on gimp, introduce a GeglImage into gimp and make it so that it can first display these kinds of images, and then port all the ops to GeglOps, meanwhile merging back and forth changes from a main branch where any UI or other work is being done.
So a ground up re-write, yes?


Unfortunately, this sounds that way to me too. I see (perhaps I'm mistaken) the graph subsystem and the image subsystem of gegl to be more or less distinct - while graphs will apply to image data, it is more or less arbitrary how this image data is represented (sure, GeglNodes will need some changes when dealing with GeglImage data instead of tiles and buffers as they are now, but those changes will have little or no effect on the code which is using the node system at that point).

Yes, but how is Calvin's plan any different? How will you avoid forking a developer branch on gimp, introduce GeglOp, and make it so that it can first display images with these ops. It is the same procedure.

However, replacing app/base by gegl's image data structures will require fairly extensive changes everywhere else in app - and that's without exposing any extra stuff in the pdb and more or less not touching plug-ins (the question of how useful the GIMP will be if all plug-ins work on 8 bit data while we're 16 bit or 32 bit float internally is another issue), which sounds to me like a pretty big job.

No it won't. Certainly not everywhere. In GimpLayer, in GimpImage, and in the compositing functions, we are replacing the base image type with another base image type. They do more or less the same thing (keep track of and identify tiles). How does integrating GeglOps not do the same thing. GeglOps are pretty substantially different, and even in my plan, it is the integration of GeglOps that is see as the difficult part. Like I said we don't have to hit the plugins for high bit depth right away, though it must be done eventually. Also, the plugins should really bedesigned around gegl-ops, and the plugin setup needs a redesign anyway (which I am also working on somewhere), and the redesign I have in mind, that I have discussed with yosh and Sven focuses around gegl ops anyway.

Personally, I prefer the path which allows us to integrate gegl with the shortest periods of instability possible in GIMP CVS. I would prefer to avoid a situation where we have a devel branch where we do devel releases, and a gegl integration branch which is mostly unusable for long periods. That means that the change to GeglImage will inevitably impact on gimp development, and it would be nice if it weren't this year, given how long we've been in a devel cycle.

Right. I strongly believe that the shortest path is my path. I have spent months (literally) of planning trying to decided how the gimp code works and it would be best to change it to efficiently integrate gegl. My entire focus in gegl is based on those observations. The reason I was getting so frustrated with this thread is that Calvin has half admitted that he hasn't looked at gimp code, yet is arguing with me anyway (which I feel has been a pretty ignorant way to argue).

I am terribly concerned that the people reading this thread will like Calvin's point because he leaves out some of the more gritty details of his "plan" (which I can only imagine is because he doen't know them), and that they will reject mine because I talk about more specific work (and thus it _sounds_ like more work).

At the very least please don't argue another plan until you have taken at least _some_ time to understand gimps compositing, tile management, swapping, and display code. Of which there is no reference and AFAIK, I am the person with something approaching a good understanding of gimps current system.

--
Dan


[Index of Archives]     [Yosemite News]     [Yosemite Photos]     [gtk]     [GIMP Users]     [KDE]     [Gimp's Home]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux