diff options
author | Jason Sams <rjsams@android.com> | 2010-12-20 12:55:28 -0800 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2010-12-20 12:55:28 -0800 |
commit | d19524047fa2d12ecd45ebcf69543836e1b45579 (patch) | |
tree | df06ecaa455d32026980a5915e0f6585c798f602 /graphics/java/android/renderscript/Mesh.java | |
parent | 8903058a4a77ae920502054ba136b1b4539f1ea1 (diff) |
Clean up Allocation buffer object api.
Change-Id: Id3e2391a93a99f4c414a805ee33cfd113242a7e6
Diffstat (limited to 'graphics/java/android/renderscript/Mesh.java')
-rw-r--r-- | graphics/java/android/renderscript/Mesh.java | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/graphics/java/android/renderscript/Mesh.java b/graphics/java/android/renderscript/Mesh.java index b103af418edc..950a91a52efb 100644 --- a/graphics/java/android/renderscript/Mesh.java +++ b/graphics/java/android/renderscript/Mesh.java @@ -93,20 +93,23 @@ public class Mesh extends BaseObj { public static class Builder { RenderScript mRS; + int mUsage; class Entry { Type t; Element e; int size; Primitive prim; + int usage; } int mVertexTypeCount; Entry[] mVertexTypes; Vector mIndexTypes; - public Builder(RenderScript rs) { + public Builder(RenderScript rs, int usage) { mRS = rs; + mUsage = usage; mVertexTypeCount = 0; mVertexTypes = new Entry[16]; mIndexTypes = new Vector(); @@ -190,10 +193,10 @@ public class Mesh extends BaseObj { Allocation alloc = null; Entry entry = (Entry)b.mIndexTypes.elementAt(ct); if (entry.t != null) { - alloc = Allocation.createTyped(rs, entry.t); + alloc = Allocation.createTyped(rs, entry.t, b.mUsage); } else if(entry.e != null) { - alloc = Allocation.createSized(rs, entry.e, entry.size); + alloc = Allocation.createSized(rs, entry.e, entry.size, b.mUsage); } int allocID = (alloc == null) ? 0 : alloc.getID(); rs.nMeshBindIndex(id, allocID, entry.prim.mID, ct); @@ -205,9 +208,9 @@ public class Mesh extends BaseObj { Allocation alloc = null; Entry entry = b.mVertexTypes[ct]; if (entry.t != null) { - alloc = Allocation.createTyped(rs, entry.t); + alloc = Allocation.createTyped(rs, entry.t, b.mUsage); } else if(entry.e != null) { - alloc = Allocation.createSized(rs, entry.e, entry.size); + alloc = Allocation.createSized(rs, entry.e, entry.size, b.mUsage); } rs.nMeshBindVertex(id, alloc.getID(), ct); newMesh.mVertexBuffers[ct] = alloc; @@ -460,7 +463,12 @@ public class Mesh extends BaseObj { } mElement = b.create(); - Builder smb = new Builder(mRS); + int usage = Allocation.USAGE_SCRIPT; + if (uploadToBufferObject) { + usage |= Allocation.USAGE_GRAPHICS_VERTEX; + } + + Builder smb = new Builder(mRS, usage); smb.addVertexType(mElement, mVtxCount / floatCount); smb.addIndexType(Element.U16(mRS), mIndexCount, Primitive.TRIANGLE); @@ -468,11 +476,15 @@ public class Mesh extends BaseObj { sm.getVertexAllocation(0).copyFrom(mVtxData); if(uploadToBufferObject) { - sm.getVertexAllocation(0).uploadToBufferObject(); + if (uploadToBufferObject) { + sm.getVertexAllocation(0).syncAll(Allocation.USAGE_SCRIPT); + } } sm.getIndexAllocation(0).copyFrom(mIndexData); - sm.getIndexAllocation(0).uploadToBufferObject(); + if (uploadToBufferObject) { + sm.getIndexAllocation(0).syncAll(Allocation.USAGE_SCRIPT); + } return sm; } |