mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
Revert "internal/graphicsdriver/metal: bug fix: need to commit replace-pixels commands at DrawTriangles"
This reverts commit ac802cf0d0
.
Reason: This caused flickerings, and didn't solve #2154
Updates #2154
Closes #2174
This commit is contained in:
parent
ac5c48f575
commit
12533c2cce
@ -331,10 +331,9 @@ type Graphics struct {
|
|||||||
src *Image
|
src *Image
|
||||||
dst *Image
|
dst *Image
|
||||||
|
|
||||||
transparent bool
|
transparent bool
|
||||||
maxImageSize int
|
maxImageSize int
|
||||||
tmpTextures []mtl.Texture
|
tmpTextures []mtl.Texture
|
||||||
needCommitReplacePixels bool
|
|
||||||
|
|
||||||
pool unsafe.Pointer
|
pool unsafe.Pointer
|
||||||
}
|
}
|
||||||
@ -879,17 +878,6 @@ func (g *Graphics) draw(rps mtl.RenderPipelineState, dst *Image, dstRegion graph
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *Graphics) DrawTriangles(dstID graphicsdriver.ImageID, srcIDs [graphics.ShaderImageNum]graphicsdriver.ImageID, offsets [graphics.ShaderImageNum - 1][2]float32, shaderID graphicsdriver.ShaderID, indexLen int, indexOffset int, mode graphicsdriver.CompositeMode, colorM graphicsdriver.ColorM, filter graphicsdriver.Filter, address graphicsdriver.Address, dstRegion, srcRegion graphicsdriver.Region, uniforms [][]float32, evenOdd bool) error {
|
func (g *Graphics) DrawTriangles(dstID graphicsdriver.ImageID, srcIDs [graphics.ShaderImageNum]graphicsdriver.ImageID, offsets [graphics.ShaderImageNum - 1][2]float32, shaderID graphicsdriver.ShaderID, indexLen int, indexOffset int, mode graphicsdriver.CompositeMode, colorM graphicsdriver.ColorM, filter graphicsdriver.Filter, address graphicsdriver.Address, dstRegion, srcRegion graphicsdriver.Region, uniforms [][]float32, evenOdd bool) error {
|
||||||
// Resolve all the replace-pixels commands before rendering with vertices (#2154).
|
|
||||||
// TODO: Find a better way to sync a copy-engine and a draw-engine with MTLFence.
|
|
||||||
if g.needCommitReplacePixels {
|
|
||||||
if g.cb != (mtl.CommandBuffer{}) {
|
|
||||||
g.cb.Commit()
|
|
||||||
g.cb.WaitUntilCompleted()
|
|
||||||
g.cb = mtl.CommandBuffer{}
|
|
||||||
}
|
|
||||||
g.needCommitReplacePixels = false
|
|
||||||
}
|
|
||||||
|
|
||||||
dst := g.images[dstID]
|
dst := g.images[dstID]
|
||||||
|
|
||||||
if dst.screen {
|
if dst.screen {
|
||||||
@ -1278,7 +1266,6 @@ func (i *Image) ReplacePixels(args []*graphicsdriver.ReplacePixelsArgs) error {
|
|||||||
bce.CopyFromTexture(t, 0, 0, so, ss, i.texture, 0, 0, do)
|
bce.CopyFromTexture(t, 0, 0, so, ss, i.texture, 0, 0, do)
|
||||||
}
|
}
|
||||||
bce.EndEncoding()
|
bce.EndEncoding()
|
||||||
g.needCommitReplacePixels = true
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
91
internal/processtest/testdata/issue2154.go
vendored
91
internal/processtest/testdata/issue2154.go
vendored
@ -1,91 +0,0 @@
|
|||||||
// Copyright 2022 The Ebitengine Authors
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
//go:build ignore
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"image/color"
|
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
var regularTermination = errors.New("regular termination")
|
|
||||||
|
|
||||||
var src *ebiten.Image
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
const (
|
|
||||||
w = 2
|
|
||||||
h = 2
|
|
||||||
)
|
|
||||||
|
|
||||||
src0 := ebiten.NewImage(w, h)
|
|
||||||
src0.Fill(color.RGBA{0xff, 0xff, 0xff, 0xff})
|
|
||||||
for j := 0; j < h; j++ {
|
|
||||||
for i := 0; i < w; i++ {
|
|
||||||
src0.Set(i, j, color.RGBA{0, 0, 0, 0xff})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
src1 := ebiten.NewImage(w, h)
|
|
||||||
src1.DrawImage(src0, nil)
|
|
||||||
|
|
||||||
src = src1
|
|
||||||
}
|
|
||||||
|
|
||||||
type Game struct {
|
|
||||||
count int
|
|
||||||
dst *ebiten.Image
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Game) Update() error {
|
|
||||||
g.count++
|
|
||||||
if g.count == 16 {
|
|
||||||
return regularTermination
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Game) Draw(screen *ebiten.Image) {
|
|
||||||
screen.Fill(color.RGBA{0xff, 0xff, 0xff, 0xff})
|
|
||||||
screen.DrawImage(src, nil)
|
|
||||||
|
|
||||||
if g.dst == nil {
|
|
||||||
g.dst = ebiten.NewImage(screen.Size())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the pixel at the next frame.
|
|
||||||
g.dst.DrawImage(screen, nil)
|
|
||||||
got := g.dst.At(0, 0)
|
|
||||||
want := color.RGBA{0, 0, 0, 0xff}
|
|
||||||
if got != want {
|
|
||||||
panic(fmt.Sprintf("got: %v, want: %v", got, want))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Game) Layout(width, height int) (int, int) {
|
|
||||||
return width, height
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
if err := ebiten.RunGame(&Game{}); err != nil && err != regularTermination {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user