internal/graphicscommand: use a slice to values instead of pointers

This should reduce heap allocations.
This commit is contained in:
Hajime Hoshi 2023-08-16 23:18:37 +09:00
parent 377b0b8502
commit 842c3cbfcd
7 changed files with 13 additions and 12 deletions

View File

@ -466,7 +466,7 @@ func mightOverlapDstRegions(vertices1, vertices2 []float32) bool {
// writePixelsCommand represents a command to replace pixels of an image.
type writePixelsCommand struct {
dst *Image
args []*graphicsdriver.PixelsArgs
args []graphicsdriver.PixelsArgs
}
func (c *writePixelsCommand) String() string {

View File

@ -43,7 +43,7 @@ type Image struct {
// have its graphicsdriver.Image.
id int
bufferedWP []*graphicsdriver.PixelsArgs
bufferedWritePixelsArgs []graphicsdriver.PixelsArgs
}
var nextID = 1
@ -93,19 +93,20 @@ func NewImage(width, height int, screenFramebuffer bool) *Image {
}
func (i *Image) flushBufferedWritePixels() {
if len(i.bufferedWP) == 0 {
if len(i.bufferedWritePixelsArgs) == 0 {
return
}
c := &writePixelsCommand{
dst: i,
args: i.bufferedWP,
args: i.bufferedWritePixelsArgs,
}
currentCommandQueue().Enqueue(c)
i.bufferedWP = nil
i.bufferedWritePixelsArgs = nil
}
func (i *Image) Dispose() {
i.bufferedWP = nil
i.bufferedWritePixelsArgs = nil
c := &disposeImageCommand{
target: i,
}
@ -178,7 +179,7 @@ func (i *Image) ReadPixels(graphicsDriver graphicsdriver.Graphics, buf []byte, r
}
func (i *Image) WritePixels(pixels []byte, region image.Rectangle) {
i.bufferedWP = append(i.bufferedWP, &graphicsdriver.PixelsArgs{
i.bufferedWritePixelsArgs = append(i.bufferedWritePixelsArgs, graphicsdriver.PixelsArgs{
Pixels: pixels,
Region: region,
})

View File

@ -130,7 +130,7 @@ func (i *image11) ReadPixels(buf []byte, region image.Rectangle) error {
return nil
}
func (i *image11) WritePixels(args []*graphicsdriver.PixelsArgs) error {
func (i *image11) WritePixels(args []graphicsdriver.PixelsArgs) error {
for _, a := range args {
i.graphics.deviceContext.UpdateSubresource(unsafe.Pointer(i.texture), 0, &_D3D11_BOX{
left: uint32(a.Region.Min.X),

View File

@ -149,7 +149,7 @@ func (i *image12) ReadPixels(buf []byte, region image.Rectangle) error {
return nil
}
func (i *image12) WritePixels(args []*graphicsdriver.PixelsArgs) error {
func (i *image12) WritePixels(args []graphicsdriver.PixelsArgs) error {
if i.screen {
return errors.New("directx: WritePixels cannot be called on the screen")
}

View File

@ -68,7 +68,7 @@ type Image interface {
Dispose()
IsInvalidated() bool
ReadPixels(buf []byte, region image.Rectangle) error
WritePixels(args []*PixelsArgs) error
WritePixels(args []PixelsArgs) error
}
type ImageID int

View File

@ -831,7 +831,7 @@ func (i *Image) ReadPixels(buf []byte, region image.Rectangle) error {
return nil
}
func (i *Image) WritePixels(args []*graphicsdriver.PixelsArgs) error {
func (i *Image) WritePixels(args []graphicsdriver.PixelsArgs) error {
g := i.graphics
g.flushRenderCommandEncoderIfNeeded()

View File

@ -131,7 +131,7 @@ func (i *Image) ensureStencilBuffer() error {
return nil
}
func (i *Image) WritePixels(args []*graphicsdriver.PixelsArgs) error {
func (i *Image) WritePixels(args []graphicsdriver.PixelsArgs) error {
if i.screen {
return errors.New("opengl: WritePixels cannot be called on the screen")
}