We need to talk about graphics

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
30 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Re: We need to talk about graphics

Stephen Pope

To put it bluntly: I gave porting old-school MVC to Cuis.

[flame on] Morphic is miserable and really needs to be replaced by MVC, though (IMHO).

Why?

1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring.

2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies. The root view object should not have subviews, the view-composite should. (I know that old-school MVC didn’t do it that way, but new implementations certainly should).

3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables.

4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds?

I could go on… [flame off] 

It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5.

stp


--

                    Stephen Travis Pope   Santa Barbara, California, USA    

On Jul 9, 2020, at 11:12 PM, [hidden email] wrote:


…on a related topic, I’ve started porting old-school MVC* to Cuis with the intention of replacing Morphic with a generic framework that can be back-ended by BitBLT, OpenGL or HTML5.

Anybody want to help?

Stephen

* = starting with traditional MVC classes and system windows, and following that with some version of the “Wrapper” framework as still used in VisualWorks.


--

                    Stephen Travis Pope   Santa Barbara, California, USA    
 <pastedGraphic.tiff>         http://HeavenEverywhere.com        http://FASTLabInc.com

--



On Jun 28, 2020, at 5:53 PM, tim Rowledge <[hidden email]> wrote:

Seriously. We've been sitting around twiddling thumbs about better graphics for decades now.

We had Balloon2D & 3D.
We had 'Pooh graphics' to do vector forms.
We have some excellent stuff being done by the Cuis crew.
We have some amazing ideas from Nile/Gezira.
We have a number of potential 3rd party graphics libraries we might adopt.
We have an advanced JIT that could be used to make on-demand graphics routines either on their own or working with pretty much any of the above.
We probably have other options I've not even heard of.

Maybe we should actually do something? Can we at least talk about it?

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Strange OpCodes: SVE: Skip on Vernal Equinox







Reply | Threaded
Open this post in threaded view
|

Re: We need to talk about graphics

Stéphane Rollandin
> To put it bluntly: I gave porting old-school MVC to Cuis.
>
> [flame on] Morphic is miserable and really needs to be replaced by MVC,
> though (IMHO).

There is no need to replace it: we already have MVC projects alongside
morphic projects, so you can choose the framework you want. In fact the
top project in Squeak 5.3 is a MVC one.

> It would be really nice to have a simple MVC (and display-list graphics)
> framework that could be placed on top of several graphics back-ends
> including BitBLT, OpenGL and HTML5.

I guess now the question is: what features are missing in MVC that you
need?

Stef

Reply | Threaded
Open this post in threaded view
|

Re: We need to talk about graphics

Christoph Thiede
In reply to this post by Stephen Pope

Hi Stephen,


1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring.


Afaik a good equivalent for that separation in Morphic are morph + model. If you are going to develop a sophisticated UI, you can use the ToolBuilder framework, and your tool will be even decoupled from the UI framework.

2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies.

Morphic uses the composite pattern, too, doesn't it? All morphs are nested in each other, beginning at the root morph (the world), and form a big object tree, just like MVC does. Please correct me if I am wrong.

3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables.

And class View has 13 instance variables. :-) I agree with you that abstract class should not have any unnecessary state, but in fact, graphics aren't a completely abstract domain. A minimum of geometry information (bounds) is vital for graphic representation, and some node links (submorphs, owner) are vital, too, for navigating through the Morphic tree. Note that Morph even has a cleaned-up state by extracting all non-crucial fields into the extension object.

4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds?

I'm afraid I don't get your point here. My image does not even know the selector #morphBounds. But #extent, #width, and #height, for example, are derived attributes, which means that an implementor only needs to manipulate the single underlying representation, which is bounds, in order to adjust all specified attributes.
Are you desiring something like an abstract morph interface that does not yet define core and derived attributes? It's true that Morph is not an abstract class (Morph new openInWorld works like a charm), but in which practical example would you need this?

It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5.

That's an interesting thought! As said above, Morphic is a composite framework, too, so couldn't you start by implementing #printHtmlOn: on Morph, next to #drawOn:? But in practice, I guess your desire would be very hard to achieve because HTML5 is a high-level OO framework while OpenGL operates on a quite low level. HTML5 is kind of a competing object tree against Morphic, so you could either try to keep two trees in sync or rebuild one of the trees periodically, which would be performance-extensive. For OpenGL, couldn't something like an OpenGLCanvas be a starting point?

Best,
Christoph


Von: Squeak-dev <[hidden email]> im Auftrag von Stephen Pope <[hidden email]>
Gesendet: Samstag, 11. Juli 2020 20:02:37
An: The general-purpose Squeak developers list; Discussion of Cuis Smalltalk
Betreff: Re: [squeak-dev] We need to talk about graphics
 

To put it bluntly: I gave porting old-school MVC to Cuis.

[flame on] Morphic is miserable and really needs to be replaced by MVC, though (IMHO).

Why?

1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring.

2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies. The root view object should not have subviews, the view-composite should. (I know that old-school MVC didn’t do it that way, but new implementations certainly should).

3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables.

4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds?

I could go on… [flame off] 

It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5.

stp


--

                    Stephen Travis Pope   Santa Barbara, California, USA    

On Jul 9, 2020, at 11:12 PM, [hidden email] wrote:


…on a related topic, I’ve started porting old-school MVC* to Cuis with the intention of replacing Morphic with a generic framework that can be back-ended by BitBLT, OpenGL or HTML5.

Anybody want to help?

Stephen

* = starting with traditional MVC classes and system windows, and following that with some version of the “Wrapper” framework as still used in VisualWorks.


--

                    Stephen Travis Pope   Santa Barbara, California, USA    
 <pastedGraphic.tiff>         http://HeavenEverywhere.com        http://FASTLabInc.com

--



On Jun 28, 2020, at 5:53 PM, tim Rowledge <[hidden email]> wrote:

Seriously. We've been sitting around twiddling thumbs about better graphics for decades now.

We had Balloon2D & 3D.
We had 'Pooh graphics' to do vector forms.
We have some excellent stuff being done by the Cuis crew.
We have some amazing ideas from Nile/Gezira.
We have a number of potential 3rd party graphics libraries we might adopt.
We have an advanced JIT that could be used to make on-demand graphics routines either on their own or working with pretty much any of the above.
We probably have other options I've not even heard of.

Maybe we should actually do something? Can we at least talk about it?

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Strange OpCodes: SVE: Skip on Vernal Equinox








pastedGraphic.tiff (3K) Download Attachment
Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: We need to talk about graphics

timrowledge
In reply to this post by Craig Latta


> On 2020-07-10, at 1:12 AM, Craig Latta <[hidden email]> wrote:
>
>
> Hi Tim--
>
>> Seriously. We've been sitting around twiddling thumbs about better
>> graphics for decades now.
>
>     I'd like to see a concise description of the problem. You used the
> word "better", so I take it you find the current graphics deficient. How?

Well, at least in part the issue is that we collectively have been waffling on about 'making better graphics' for about as long as my email record has existed. So it's not solely about what I want, more as case of 'can we try to get something complete?'.

For myself, I'd like to see better rendered text and non-orthogonal lines. Circles, for example. My example here is the little collection of gauges I have for my weather station display. The round gauges as originally done looked terrible. Bob A offered a better circle drawing algorithm and with some over sampling it is a lot better  - but still ugly.

Our typical fonts are ok but could be a lot better. Not to mention the slightly higher level issue of the font/style & tools. We made a few improvements in that area with the Sophie project, way back.

Not many things *I* want to do are very performance limited, so that isn't something that exercises *me* but I'm sure others have very different perspectives.

I have played a little with a Frank image to see if the Nile/Gezira system as-is does much better. For a circle, for example, it does do somewhat better *if* the stroke alpha is set to ~0.5. I'm way to out of the world of computer graphics to say more than that.

I suspect that somewhat decoupling the graphics from explicit pixel considerations might help with handling super-resolution screens nicely. Vector graphics improvements to draw our tools would probably be nice.

As I said, it's not so much about what I want as a plea to see if we can actually get *something* done. Lots of us have ideas about what 'something' is. Let's hear some of them.

>
>     I'm interested in the topic, and have some time. At the moment, all
> my graphics energy goes into leveraging in SqueakJS what others have
> done for web browsers, which is quite a lot.

Yeah, and your demos are amazing.


tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Useful random insult:- The wheel's spinning but the hamster's dead.



Reply | Threaded
Open this post in threaded view
|

WatchMorph as an example of anti-aliasing going a bit odd (was Re: We need to talk about graphics)

timrowledge
Playing with stuff; tried a WatchMorph to look at circles drawn by Balloon.
Grabbing one via World->new morph->from alphabetical list produces a decently round clockface with a coloured centre section. However, using the debug menu to turn on the anti-aliasing results in a rather ugly lumpiness, as if it were a fruit that has been poked a bit too often to test for ripeness.
Weird. The B2Dplugin appears to be active and I can make it do profiling etc that makes it pretty certain it is being used.
Is this an ARM/Pi issue... nope, looks the same on a Mac system.

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Gotta run, the cat's caught in the printer.




Reply | Threaded
Open this post in threaded view
|

Proposal for new BitBlt rules (was: We need to talk about graphics)

David T. Lewis
In reply to this post by HilaireFernandes
Changing the subject line to focus on a specific proposal by Juan Vuletich
for an enhancement to BitBlt rules.

The idea originated from discussion on the Cuis list, and the proposal
is documented in an opensmalltalk-vm issue here:

  https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505

While I am generally familiar with VM issues, I have no experience with
BitBlt and I am not sure exactly what needs to be done to make this
happen. There are VM (plugin) changes needed, and some image side support
will needed as well (at least for fallback code in the image).

So - who knows how to make this happen, and how do we make it so?

Thanks,
Dave


On Fri, Jul 03, 2020 at 10:32:17PM +0200, Hilaire wrote:

> Le 03/07/2020 ?? 22:21, David T. Lewis a ??crit??:
> >>Juan proposed these primitives to speed up the rendering of
> >>VectorGraphics Widget Morph.
> >I remember a discussion about that, though I don't have a link to it. It
> >sounds like we need to follow up on this and make something happen.
>
> Here it is:
>
> https://github.com/OpenSmalltalk/opensmalltalk-vm/issues/505
>
> --
> Dr. Geo
> http://drgeo.eu
> https://pouet.chapril.org/@hilaire
>

>


Reply | Threaded
Open this post in threaded view
|

Re: We need to talk about graphics

Yoshiki Ohshima-3
In reply to this post by darth-cheney
Hi Eric,

On Mon, Jun 29, 2020 at 4:16 PM Eric Gade <[hidden email]> wrote:
Nile seems like a fascinating option and I've tried to read as much about it as I can. Unfortunately aside from the various posted talks online and the VPRI papers, there's not a lot of information about using it (unless I am missing something -- you can track a github issue about its status here). My guess is that the Gezira part, of which there is even less information, is very closely tied to the specific Frank environment in which it was used -- is that correct? Using plain Squeak how would one even incorporate Nile?

Nile and the graphics engine Gezira written in Nile was quite independent from Squeak. Vanessa made a VM plugin for the C-version of Gezira runtime, and the bindings code issues Gezira requests from Squeak. That part can is reusable. But going through the VM plugin had some overhead, and also Gezira does not on purpose provide optimization for common cases or special cases (such as filling an integer coordinate rectangle with a uniform color, etc.) so performance characteristics was not always a win. 

There was other comments about JITting. It is potentially a great idea but it'd be a quite effort to make sure the multi core execution (or even using GPU) sane and efficient.

--
-- Yoshiki



Reply | Threaded
Open this post in threaded view
|

Re: We need to talk about graphics

Yoshiki Ohshima-3
In reply to this post by timrowledge


On Thu, Jul 9, 2020 at 1:40 PM tim Rowledge <[hidden email]> wrote:
What are we going to actually try to do here? Who has time/interest/skill?

The Nile/Gezira stuff obviously sounds great but there is the question of actually getting it working usefully, let alone finishing it. Will that ever happen? Is what exists good enough and complete enough to be of use?

The current implementation probably is not going to work.  I think the C-runtime does not work on a 64-bit environment, IIRC.

There is a downloadable 'Frank' image that seems to start up ok at http://tinlizzie.org/~ohshima/Frank-170908.zip  It is a Squeak 4.4 image as far as I can tell so you need an older VM of roughly that vintage - pre-Spur anyway.

As long as the VM plugin mechanism has not changed that much, it should be relatively easy to bring it up to date. 

The small examples mostly work ok (see things like GeziraCanvas class>example* & GZKernel class>example*) though one or two take a very long time.

Such an example is using the Squeak-runtime; that is all stream data was processed in the interpreter and each kernel does its job one by one to illustrate that you can have different Nile runtimes and the core idea is very simple.  Performance was not a goal for the Squeak-runtime.
-- 
-- Yoshiki



Reply | Threaded
Open this post in threaded view
|

Re: We need to talk about graphics

Yoshiki Ohshima-3
In reply to this post by timrowledge


On Sat, Jul 11, 2020 at 2:05 PM tim Rowledge <[hidden email]> wrote:


Not many things *I* want to do are very performance limited, so that isn't something that exercises *me* but I'm sure others have very different perspectives.

I have played a little with a Frank image to see if the Nile/Gezira system as-is does much better. For a circle, for example, it does do somewhat better *if* the stroke alpha is set to ~0.5. I'm way to out of the world of computer graphics to say more than that.

Gezira itself is very consistent.  If you see some artifact, it might be because the final step of putting bits generated by Gezira onto the screen has wrong alpha interpretation or such. 
 

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Useful random insult:- The wheel's spinning but the hamster's dead.





--
-- Yoshiki



Reply | Threaded
Open this post in threaded view
|

Re: We need to talk about graphics

marcel.taeumel
In reply to this post by Stephen Pope
Hi Stephen.

Separation of model, view, and maybe controller-like objects is a choice you can still make in your application designed for and written in Morphic.

Try exploring and working with the direct-manipulation concepts Morphic has to offer. Those concepts can speed up the feedback cycle, which can then lead to a better architectural design in your application.

Many of your thoughts on a "good OO framework" omits the fact that software rather grows -- refactoring being a vital part in its lifecycle.

Happy programming! =)

Best,
Marcel

Am 11.07.2020 20:02:55 schrieb Stephen Pope <[hidden email]>:


To put it bluntly: I gave porting old-school MVC to Cuis.

[flame on] Morphic is miserable and really needs to be replaced by MVC, though (IMHO).

Why?

1. There’s a reason views and controllers were initially separated; that reason is reusability and better factoring.

2. The composite design pattern is a good thing (https://en.wikipedia.org/wiki/Composite_pattern) and should be applied to everything where one builds trees, such as view hierarchies. The root view object should not have subviews, the view-composite should. (I know that old-school MVC didn’t do it that way, but new implementations certainly should).

3. In a good OO framework, the more abstract classes generally have the minimum necessary state (or none at all). Class Morph has 7 instance variables.

4. The goal of OO design is to reuse specifications across multiple implementations, so why does class Morph rename the usual geometry methods of bounds, extent, width, height, etc. as (e.g.,) morphBounds?

I could go on… [flame off] 

It would be really nice to have a simple MVC (and display-list graphics) framework that could be placed on top of several graphics back-ends including BitBLT, OpenGL and HTML5.

stp


--

                    Stephen Travis Pope   Santa Barbara, California, USA    

On Jul 9, 2020, at 11:12 PM, [hidden email] wrote:


…on a related topic, I’ve started porting old-school MVC* to Cuis with the intention of replacing Morphic with a generic framework that can be back-ended by BitBLT, OpenGL or HTML5.

Anybody want to help?

Stephen

* = starting with traditional MVC classes and system windows, and following that with some version of the “Wrapper” framework as still used in VisualWorks.


--

                    Stephen Travis Pope   Santa Barbara, California, USA    
 <pastedGraphic.tiff>         http://HeavenEverywhere.com        http://FASTLabInc.com

--



On Jun 28, 2020, at 5:53 PM, tim Rowledge <[hidden email]> wrote:

Seriously. We've been sitting around twiddling thumbs about better graphics for decades now.

We had Balloon2D & 3D.
We had 'Pooh graphics' to do vector forms.
We have some excellent stuff being done by the Cuis crew.
We have some amazing ideas from Nile/Gezira.
We have a number of potential 3rd party graphics libraries we might adopt.
We have an advanced JIT that could be used to make on-demand graphics routines either on their own or working with pretty much any of the above.
We probably have other options I've not even heard of.

Maybe we should actually do something? Can we at least talk about it?

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Strange OpCodes: SVE: Skip on Vernal Equinox







12