mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-27 11:12:44 +01:00
Revert "internal/graphics: change the definition of MaxVerticesCount"
This reverts commit 3047ad202a
.
Reason: Failed to build for 32bit architectures
Updates #2612
This commit is contained in:
parent
3047ad202a
commit
3a632be0c7
6
image.go
6
image.go
@ -438,6 +438,9 @@ func (i *Image) DrawTriangles(vertices []Vertex, indices []uint16, img *Image, o
|
|||||||
if int(idx) >= len(vertices) {
|
if int(idx) >= len(vertices) {
|
||||||
panic(fmt.Sprintf("ebiten: indices[%d] must be less than len(vertices) (%d) but was %d", i, len(vertices), idx))
|
panic(fmt.Sprintf("ebiten: indices[%d] must be less than len(vertices) (%d) but was %d", i, len(vertices), idx))
|
||||||
}
|
}
|
||||||
|
if idx >= MaxVerticesCount {
|
||||||
|
panic(fmt.Sprintf("ebiten: indices[%d] must be less than MaxVerticesCount %d but was %d", i, MaxVerticesCount, idx))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if options == nil {
|
if options == nil {
|
||||||
@ -600,6 +603,9 @@ func (i *Image) DrawTrianglesShader(vertices []Vertex, indices []uint16, shader
|
|||||||
if int(idx) >= len(vertices) {
|
if int(idx) >= len(vertices) {
|
||||||
panic(fmt.Sprintf("ebiten: indices[%d] must be less than len(vertices) (%d) but was %d", i, len(vertices), idx))
|
panic(fmt.Sprintf("ebiten: indices[%d] must be less than len(vertices) (%d) but was %d", i, len(vertices), idx))
|
||||||
}
|
}
|
||||||
|
if idx >= MaxVerticesCount {
|
||||||
|
panic(fmt.Sprintf("ebiten: indices[%d] must be less than MaxVerticesCount %d but was %d", i, MaxVerticesCount, idx))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if options == nil {
|
if options == nil {
|
||||||
|
@ -2805,7 +2805,7 @@ func BenchmarkColorMScale(b *testing.B) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestImageMoreIndicesThanMaxUint16(t *testing.T) {
|
func TestIndicesOverflow(t *testing.T) {
|
||||||
const (
|
const (
|
||||||
w = 16
|
w = 16
|
||||||
h = 16
|
h = 16
|
||||||
@ -2817,10 +2817,10 @@ func TestImageMoreIndicesThanMaxUint16(t *testing.T) {
|
|||||||
|
|
||||||
op := &ebiten.DrawTrianglesOptions{}
|
op := &ebiten.DrawTrianglesOptions{}
|
||||||
vs := make([]ebiten.Vertex, 3)
|
vs := make([]ebiten.Vertex, 3)
|
||||||
is := make([]uint16, 65538)
|
is := make([]uint16, graphics.MaxVerticesCount/3*3)
|
||||||
dst.DrawTriangles(vs, is, src, op)
|
dst.DrawTriangles(vs, is, src, op)
|
||||||
|
|
||||||
// The next draw call should work well (and this is likely batched).
|
// Cause an overflow for indices.
|
||||||
vs = []ebiten.Vertex{
|
vs = []ebiten.Vertex{
|
||||||
{
|
{
|
||||||
DstX: 0,
|
DstX: 0,
|
||||||
@ -2877,7 +2877,7 @@ func TestImageMoreIndicesThanMaxUint16(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestImageMoreVerticesThanMaxUint16(t *testing.T) {
|
func TestVerticesOverflow(t *testing.T) {
|
||||||
const (
|
const (
|
||||||
w = 16
|
w = 16
|
||||||
h = 16
|
h = 16
|
||||||
@ -2888,11 +2888,11 @@ func TestImageMoreVerticesThanMaxUint16(t *testing.T) {
|
|||||||
src.Fill(color.White)
|
src.Fill(color.White)
|
||||||
|
|
||||||
op := &ebiten.DrawTrianglesOptions{}
|
op := &ebiten.DrawTrianglesOptions{}
|
||||||
vs := make([]ebiten.Vertex, math.MaxUint16+1)
|
vs := make([]ebiten.Vertex, graphics.MaxVerticesCount-1)
|
||||||
is := make([]uint16, 3)
|
is := make([]uint16, 3)
|
||||||
dst.DrawTriangles(vs, is, src, op)
|
dst.DrawTriangles(vs, is, src, op)
|
||||||
|
|
||||||
// The next draw call should work well (and this is likely batched).
|
// Cause an overflow for vertices.
|
||||||
vs = []ebiten.Vertex{
|
vs = []ebiten.Vertex{
|
||||||
{
|
{
|
||||||
DstX: 0,
|
DstX: 0,
|
||||||
@ -2949,6 +2949,26 @@ func TestImageMoreVerticesThanMaxUint16(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTooManyVertices(t *testing.T) {
|
||||||
|
const (
|
||||||
|
w = 16
|
||||||
|
h = 16
|
||||||
|
)
|
||||||
|
|
||||||
|
dst := ebiten.NewImage(w, h)
|
||||||
|
src := ebiten.NewImage(w, h)
|
||||||
|
src.Fill(color.White)
|
||||||
|
|
||||||
|
op := &ebiten.DrawTrianglesOptions{}
|
||||||
|
vs := make([]ebiten.Vertex, graphics.MaxVerticesCount+1)
|
||||||
|
is := make([]uint16, 3)
|
||||||
|
dst.DrawTriangles(vs, is, src, op)
|
||||||
|
|
||||||
|
// Force to cause flushing the graphics commands.
|
||||||
|
// Confirm this doesn't freeze.
|
||||||
|
dst.At(0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
func TestImageNewImageFromEbitenImage(t *testing.T) {
|
func TestImageNewImageFromEbitenImage(t *testing.T) {
|
||||||
const (
|
const (
|
||||||
w = 16
|
w = 16
|
||||||
@ -4298,6 +4318,48 @@ func TestImageDrawTrianglesShaderWithGreaterIndexThanVerticesCount(t *testing.T)
|
|||||||
dst.DrawTrianglesShader(vs, is, shader, nil)
|
dst.DrawTrianglesShader(vs, is, shader, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Issue #2611
|
||||||
|
func TestImageDrawTrianglesWithTooBigIndex(t *testing.T) {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r == nil {
|
||||||
|
t.Errorf("DrawTriangles must panic but not")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
const w, h = 16, 16
|
||||||
|
dst := ebiten.NewImage(w, h)
|
||||||
|
src := ebiten.NewImage(w, h)
|
||||||
|
|
||||||
|
vs := make([]ebiten.Vertex, ebiten.MaxVerticesCount+1)
|
||||||
|
is := []uint16{0, 1, 2, 1, 2, ebiten.MaxVerticesCount}
|
||||||
|
dst.DrawTriangles(vs, is, src, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Issue #2611
|
||||||
|
func TestImageDrawTrianglesShaderWithTooBigIndex(t *testing.T) {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r == nil {
|
||||||
|
t.Errorf("DrawTrianglesShader must panic but not")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
const w, h = 16, 16
|
||||||
|
dst := ebiten.NewImage(w, h)
|
||||||
|
|
||||||
|
vs := make([]ebiten.Vertex, ebiten.MaxVerticesCount+1)
|
||||||
|
is := []uint16{0, 1, 2, 1, 2, ebiten.MaxVerticesCount}
|
||||||
|
shader, err := ebiten.NewShader([]byte(`
|
||||||
|
package main
|
||||||
|
func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 {
|
||||||
|
return color
|
||||||
|
}
|
||||||
|
`))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("could not compile shader: %v", err)
|
||||||
|
}
|
||||||
|
dst.DrawTrianglesShader(vs, is, shader, nil)
|
||||||
|
}
|
||||||
|
|
||||||
// Issue #2733
|
// Issue #2733
|
||||||
func TestImageGeoMAfterDraw(t *testing.T) {
|
func TestImageGeoMAfterDraw(t *testing.T) {
|
||||||
src := ebiten.NewImage(1, 1)
|
src := ebiten.NewImage(1, 1)
|
||||||
|
@ -46,10 +46,12 @@ const (
|
|||||||
VertexFloatCount = 8
|
VertexFloatCount = 8
|
||||||
|
|
||||||
// MaxVerticesCount is the maximum number of vertices for one draw call.
|
// MaxVerticesCount is the maximum number of vertices for one draw call.
|
||||||
// This value is 2^32 - 1, as the index type is uint32.
|
// This value is 2^16 - 1 = 65535, as the index type is uint16.
|
||||||
// This value cannot be exactly 2^32 especially with WebGL 2, as 2^32th vertex is not rendered correctly.
|
// This value cannot be exactly 2^16 == 65536 especially with WebGL 2, as 65536th vertex is not rendered correctly.
|
||||||
// See https://registry.khronos.org/webgl/specs/latest/2.0/#5.18 .
|
// See https://registry.khronos.org/webgl/specs/latest/2.0/#5.18 .
|
||||||
MaxVerticesCount = math.MaxUint32
|
//
|
||||||
|
// TODO: Use MaxUint32 and move these values to internal/graphicscommand (#2612)
|
||||||
|
MaxVerticesCount = math.MaxUint16
|
||||||
MaxVertexFloatsCount = MaxVerticesCount * VertexFloatCount
|
MaxVertexFloatsCount = MaxVerticesCount * VertexFloatCount
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -139,7 +139,8 @@ func (i *Image) WritePixels(pix []byte, region image.Rectangle) {
|
|||||||
copy(clr[:], pix)
|
copy(clr[:], pix)
|
||||||
i.dotsBuffer[region.Min] = clr
|
i.dotsBuffer[region.Min] = clr
|
||||||
|
|
||||||
if len(i.dotsBuffer) >= 10000 {
|
// One square requires 6 indices (= 2 triangles).
|
||||||
|
if len(i.dotsBuffer) >= graphics.MaxVerticesCount/6 {
|
||||||
i.flushDotsBufferIfNeeded()
|
i.flushDotsBufferIfNeeded()
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user