|
Yeah that's not doable because each mode must be a fundamentally different type. You can't represent mode 1 with a class for mode 2.
If you could, I'd just have a "set mode" method on the driver class, and then use the driver class as the draw target like i do with my single screen mode drivers.
Real programmers use butterflies
|
|
|
|
|
The Witch wrote: I bind using templates, not virtual base classes That's your problem right there.
|
|
|
|
|
It would be impossible to do what I am doing efficiently and by hand in C++ using any other method than what I'm doing.
Generic programming has no real substitute in terms of C++ functionality. You basically *can't* replace it with virtual base classes unless you were using it where you didn't need it in the first place.
Consider this:
I have a pixel. The pixel is user-defined in terms of the number of color channels it has, their names, and what their binary layout, min and max channel values are, etc. This is too involved to compute at run time. It would kill performance
Now, for every draw method, it deals in pixels like this, but because a pixel must be typed to its functionality, literally the only way I could make it polymorphic is to use a vtbl every time i needed a pixel. That's just not acceptable in terms of performance.
Binding using templates is the solution. That way you can inline, or you can otherwise aggressively optimize away those calls.
Real programmers use butterflies
|
|
|
|
|
Wouldn't polymorphic flyweights work?
You've piqued my interest. If one of your recent articles discusses this code, please point me to it.
|
|
|
|
|
I don't have an article that explicitly talks about how the code works, just how to use it.
But..
gfx_demo/gfx_pixel.hpp at master · codewitch-honey-crisis/gfx_demo · GitHub[^]
Consider the convert<>() routine starting at line 690.
It's massive. It's ugly. It would be slow as heck to do at runtime. This will get called width*height times during a call to draw a bitmap when format conversion needs to be done.
If any of the routine did not result in aggressive compile time operations, to where this routine translates to a few shifts and multiply/divides at worst - the thing would slow to a crawl if I had any JMPs in there. There are none despite what it looks like, except sometimes for clamping, which often gets compiled to ifless code anyway.
Real programmers use butterflies
|
|
|
|
|
|
Not even a little.
Real programmers use butterflies
|
|
|
|
|
Time to look at some creational design pattern?
"In testa che avete, Signor di Ceprano?"
-- Rigoletto
|
|
|
|
|
I have no choice but to use the factory pattern for creation.
Real programmers use butterflies
|
|
|
|
|
When you're stuck on a super important issue with significant consequences and you just can't decide which of your options is the best one, use The Grand Query Of Decision Making (TGQODM).
Its MySQL version looks like this:
SELECT IF(RAND() < 0.5, 'Do option 1', 'Do option 2')
|
|
|
|
|
I'm not sure if I even fully understand the problem but it sounds a bit like you could benefit from a design change where you maintain state information for each draw mode. This would allow you to switch between modes without loosing anything since all relevant data would be saved before switching modes.
|
|
|
|
|
I don't have that kind of memory. The e-paper displays essentially require me to keep the frame buffer around in local RAM. So my size in bytes for monochrome black and white displays is width*height/8 and it gets worse when you introduce virtualization of higher bit depths through dithering, such that you can simulate 8-bit grayscale for example, but at that point your frame buffer size becomes simply width*height in bytes. Ouch. That's my state for each mode.
It's not a good idea to hold a frame buffer around when someone is not using it on these devices. The devices I'm targeting with these displays range in RAM anywhere from about 300k to 4.5MB, with the caveat that 4MBs of that is PSRAM over SPI and thus slow.
Real programmers use butterflies
|
|
|
|
|
In the past, I had to solve that kind of problem by using buffer switching. To do that you can save the buffer to the PSRAM and then when you switch back to it you can save the current buffer and then load the next buffer if it was saved.
|
|
|
|
|
I mean yes, but there's a number of problems with that.
For starters, there might not be room in NVS flash to do that.
Second, it's a performance killer
And finally, it doesn't seem that intuitive to hold the screen buffer for multiple simultaneous screen modes around when a screen can only display one at a time. Or at least I should say I can think of as many arguments as to why it's counterintuitive as the opposite.
So given that, it's not a route I'm taking. I've actually finished 80% of this driver now - the last bit being a dithering algorithm i need to work out that takes advantage of 4 color grayscale rather than simply black and white.
Real programmers use butterflies
|
|
|
|
|
US tycoon McAfee found dead in Spanish prison[^]
I suspect he was just trying to uninstall himself ...
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
And yet he managed to avoid the Virus
"Time flies like an arrow. Fruit flies like a banana."
|
|
|
|
|
Another sad story of someone who had it all, did lots of drugs, lost their mind, committed crimes, suicided.
|
|
|
|
|
Indeed - sad though someone killing themselves
"I didn't mention the bats - he'd see them soon enough" - Hunter S Thompson - RIP
|
|
|
|
|
With every spark of genius comes a touch of madness.
The less you need, the more you have.
Why is there a "Highway to Hell" and only a "Stairway to Heaven"? A prediction of the expected traffic load?
JaxCoder.com
|
|
|
|
|
Gosh - I feel like a lightening bolt.
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
His instagram account was still posting after he was found dead.
Real programmers use butterflies
|
|
|
|
|
Not uncommon in social media from what I've read.
A former high school classmate of mine passed away about five years ago. Her kids still post things on her Facebook account occasionally, which seems... odd.
Software Zen: delete this;
|
|
|
|
|
I won't bear comment on what was posted but it was ... yeah... anyone that wants to know can google for more.
Real programmers use butterflies
|
|
|
|
|
yeah, and there is a Tweet that he wrote in OCT 2020 saying that if he died in prison, it was not a suicide. real tweet, apparently. people can google it if interested.
|
|
|
|
|
I'm not ready to ascribe that to anything other than a twist of fate smacking a guy right between the eyes. McAfee was the type of person to say something like that for attention. It doesn't make me think he didn't commit suicide. In fact, if I were the sort, and in his shoes, I might consider the suicide in light of that tweet as an opportunity to make myself more infamous in death.
I'm not putting the latest posthumous post him either though.
But it is curious. All of it.
Real programmers use butterflies
|
|
|
|