--- old/modules/graphics/src/main/java/com/sun/prism/impl/VertexBuffer.java 2015-11-06 20:01:04.000000000 -0800 +++ new/modules/graphics/src/main/java/com/sun/prism/impl/VertexBuffer.java 2015-11-06 20:01:04.000000000 -0800 @@ -50,6 +50,8 @@ protected byte colorArray[]; protected float coordArray[]; + protected BaseContext owner; + public VertexBuffer(int maxQuads) { capacity = maxQuads * VERTS_PER_QUAD; index = 0; @@ -58,6 +60,13 @@ coordArray = new float[capacity * FLOATS_PER_VERT]; } + public void setOwner(BaseContext owner) { + if (this.owner != null) { + throw new InternalError("Only one owner per VertexBuffer allowed"); + } + this.owner = owner; + } + protected void drawQuads(int numVertices) { throw new Error ("flush not implemented for lightweight"); } @@ -101,6 +110,14 @@ * exception. */ public final void flush() { + if (owner == null) { + ownerFlush(); + } else { + owner.flushVertexBuffer(); + } + } + + public final void ownerFlush() { if (index > 0) { drawQuads(index); index = 0; @@ -209,8 +226,7 @@ private void ensureCapacityForQuad() { if (index + VERTS_PER_QUAD > capacity) { - drawQuads(index); - index = 0; + flush(); } } @@ -291,9 +307,8 @@ // ensureCapacityForQuad(); int idx = index; if (idx + VERTS_PER_QUAD > capacity) { -// grow(); - drawQuads(idx); - idx = index = 0; + flush(); + idx = index; } int i = FLOATS_PER_VERT * idx; @@ -337,8 +352,8 @@ // ensureCapacityForQuad(); int idx = index; if (idx + VERTS_PER_QUAD > capacity) { - drawQuads(idx); - idx = index = 0; + flush(); + idx = index; } int i = FLOATS_PER_VERT * idx; @@ -377,8 +392,8 @@ { int idx = index; if (idx + VERTS_PER_QUAD > capacity) { - drawQuads(idx); - idx = index = 0; + flush(); + idx = index; } int i = FLOATS_PER_VERT * idx; @@ -448,8 +463,8 @@ { int idx = index; if (idx + VERTS_PER_QUAD > capacity) { - drawQuads(idx); - idx = index = 0; + flush(); + idx = index; } int i = FLOATS_PER_VERT * idx; @@ -496,8 +511,8 @@ { int idx = index; if (idx + VERTS_PER_QUAD > capacity) { - drawQuads(idx); - idx = index = 0; + flush(); + idx = index; } int i = FLOATS_PER_VERT * idx;