Thank you for the quick response and helpful information.
I followed your recommendation and the layer transparency is working for me now. I am a bit confused though, as by my recollection this is exactly one of the permutations that I had tried (with the exception of leaving the enabled property selected, which doesn't appear to make a difference). I already had the clear scheme and had tried it with alpha blending for the panel widget both ON and OFF and using different alpha values. Perhaps I thought I was using my clear scheme but wasn't or maybe it wasn't getting assigned somehow? I have no idea but it works now.
bill.liWe will also look to publish some guidelines about GPU usage, avoiding collisions with GLCD and overall traffic management with the DDR bus bandwidth.
That would be extremely helpful. I am doing a lot of custom drawing and have implemented MSAA, rotatable primitives with subpixel resolution, etc. Up to now I have been determining what works well and what doesn't largely through experimentation. This has slowly given me an understanding of best practices with this architecture but having this knowledge upfront would save a lot of time.
Can you list the bugs you have fixed in the renderer? We can look to roll them into the next release.
Sure. This is what I have at the moment:legato_renderer.c
I think there are several problems in postFrame().line 751
When this line is executed, _rendererState.layerIdx will be equal to LE_LAYER_COUNT. This will cause an out-of-bounds access as layerStates is of length LE_LAYER_COUNT. Was this line intended to be called for each active layer?lines 766, 768, 772
Each has the same issue as line 751.line 786:
if(_rendererState.layerStates[_rendererState.layerIdx].pendingDamageRects.size > MAX_RECTARRAYS_SZ)
I think this should be:
if(_rendererState.layerStates[itr].pendingDamageRects.size > MAX_RECTARRAYS_SZ)
_rendererState.drawCount is only incremented but never reset to 0. How would the first condition on line 764 ever be tripped more than once?
- Is the purpose of prevDamageRects to help sync the double buffer to the changes made in the last draw of the active buffer? If so, isn't this redundant on the PIC32MZ/DA since the syncing is already done in DRV_GLCD_Update() (drv_gfx_glcd.c) with the help of the syncRect's stored in its local drvLayer?legato_widget_list.cappendItem()
item->icon is not assigned and could have any value since LE_MALLOC is used to create 'item'. After line 404, I added this line:
item->icon = NULL;appendItem()
Same issue and fix as appendItem().setItemIcon()
I think that the list area should be invalidated here. This isn't technically a bug but produces the more expected behavior, IMO. After line 949, I added:
Results should be translated to screen space before returning. After line 131 add:
post edited by baugs - 2020/10/16 13:33:23