Closed prydin closed 3 years ago
Unless I'm misunderstanding your usecase, I think the functionality you want already exists in the glhf
backend that Pixel uses. Specifically looking at glhf.NewTexture()
, which allows you to build a new texture from an array of uint8. Not sure how you would render that as opengl confuses me to no end. Otherwise, you can access the glhf.Texture
of a pixel.Canvas
with the .Texture()
method.
Yeah, I eventually figured that out. There's still a few copies made internally in the code that could you probably avoid, but I'm getting the performance I need out of it now, so I'm closing this.
I'm working on code that dynamically builds a bitmap every frame. I can du this by generating a native Go
image.RGBA
, then usePictureDataFromImage
, turn it into a sprite and draw it to my canvas. Doing that, my pixels are copied at least three times. I could speed it up by building my ownPictureData
without taking the extra step via anImage
. However, my profiling shows that I still spend a considerable amount of time inNewGLPicture
.I could easily build my image as a flat array of
uint8
which could be mapped directly to a Texture.For this, I propose we either introduce a
FlatArrayPicture
type that simply contains a flat array of uint8 thatNewGLPicture
can just map to the texture - or - that we expose the underlyingTexture
object so code that needs to render bitmaps VERY quickly can access them directly.I am willing to make this any of these changes in a PR.