D GUI Framework (responsive grid teaser)

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Thu May 23 06:05:06 UTC 2019


On Thursday, 23 May 2019 at 00:23:50 UTC, Manu wrote:
> it's really just a style
> of software design that lends to efficiency.
> Our servers don't draw anything!

Then it isn't specific to games, or particularly relevant to 
rendering. Might as well talk about people writing search engines 
or machine learning code.

> Minimising wasted calculation is always relevant. If you don't 
> change part of an image, then you'd better have the tech to 
> skip rendering it (or skip transmitting it in this scenario), 
> otherwise you're wasting resources like a boss ;)

Well, it all depends on your priorities. The core difference is 
that (at least for the desktop) a game rendering engine can focus 
on 0% overhead for the most demanding scenes, while 40% overhead 
on light scenes has no impact on the game experience. Granted for 
mobile engines then battery life might change that equation, 
though I am not sure if gamers would notice a 20% difference in 
battery life...

For a desktop application you might instead decide to favour 50% 
GPU overhead across the board as a trade off for a more flexible 
API that saves application programmer hours and freeing up CPU 
time to processing application data. (If your application only 
uses 10% of the GPU, then going to 15% is a low price to pay.)


> I don't think you know what you're talking about.

Let's avoid the ad hominems… I know what I am talking about, but 
perhaps I don't know what you are talking about? I thought you 
were talking about the rendering engines used in games, not 
software engineering as a discipline.


> I don't think we 'cut corners' (I'm not sure what that even 
> means)...

What is means is that in a game you have a negotiation between 
the application design requirements and the technology 
requirements. You can change the game design to take advantage of 
the technology and change the technology to accommodate the game 
design. Visual quality only matters as seen from the particular 
vantage points that the gamer will take in that particular game 
or type of game.

When creating a generic GUI API you cannot really assume too 
much. Let's say you added ray-traced widgets. It would make 
little sense to say that you can only have 10 ray-traced widgets 
on display at the same time for a GUI API. In a game that is 
completely acceptable. You'd rather have the ability to put some 
extra impressive visuals on screen in a limited fashion where it 
matters the most.

So the priorities is more like in film production. You can pay a 
price in terms of technological special casing to create a more 
intense emotional experience. You can limit your focus to what 
the user is supposed to do (both end user and application 
programmer) and give priority to "emotional impact". And you also 
have the ability to train a limited set of workers (programmers) 
to make good use of the novelty of your technology.

When dealing with unknown application programmers writing unknown 
applications you have to be more conservative.


> patterns. You won't tend to have OO hierarchies and sparsely 
> allocated
> graphs, and you will naturally tend to arrange data in tables 
> destined
> for batch processing. These are key to software efficiency in 
> general.

If you are talking about something that isn't available to the 
application programmer then that is fine. For a GUI framework the 
most important thing after providing a decent UI experience is to 
make the application programmers life easier and more intuitive. 
Basically, your goal is to save programmer hours and make it easy 
to change direction due to changing requirements.  If OO 
hierarchies is more intuitive to the typical application 
programmers, then that is what you should use at the API level.

If your write your own internal GUI framework then you have a 
different trade-off, you might put more of a burden on the 
application developer in order to make better overall use of your 
workforce. Or you might limit the scope of the GUI framework to 
getter better end-user results.


> 'Object hierarchy' is precisely where it tends to go wrong. 
> There are a million ways to approach this problem space; some 
> are naturally much more efficient, some rather follow design 
> pattern books and propagate ideas taught in university to kids.

You presume that efficiency is a problem. That's not necessarily 
the case. If your framework is for embedded LCDs then you are 
perhaps limited to under 500 objects on screen anyway.

I also know that Open Inventor (from SGI) and VRML made people 
more productive. It allowed people to create experiences that 
they otherwise would not have been able to, both in industrial 
prototypes and artistic works.

Overhead isn't necessarily bad. A design with some overhead might 
cut the costs enough for the application developer to make a 
project feasible. Or even make it accessible for tinkering. You 
see the same thing with the Processing language.


> Sure, maybe that's a reasonable design. Maybe you can go a step 
> further and transform your arrangement a 'hierarchy'? Data 
> structures are everything.

In the early stages it is most important to have freedom to 
change things, but with an idea of where you could insert spatial 
data-structures. Having a plan for where you can place 
accelerating data-structures and algorithms do matter, of course.

But you don't need to start there. So I think he is doing well by 
keeping rendering simple in the first iterations.


> Right. I only advocate good software engineering!
> But when I look around, the only field I can see that's doing a 
> really good job at scale is gamedev. Some libs here and there 
> enclose some tight worker code, but nothing much at the 
> systemic level.

It is a bit problematic for generic libraries to use worker code 
(I assume you mean actors running on separate threads) as you put 
some serious requirements on the architecture of the application. 
More actor-oriented languages and run-times could make it 
pleasant though, so maybe an infrastructure issue where 
programming languages need to evolve. But you could for a GUI 
framework, sure.

Although I think the rendering structure used in browser 
graphical backends is closer to what people would want for an UI 
than a  typical game rendering engine. Especially the styling 
engine.



More information about the Digitalmars-d-announce mailing list