1a89371c6f144b9049efe7689105feee2c4a38384Jason Sams/* 2a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 3a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * 4a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * you may not use this file except in compliance with the License. 6a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * You may obtain a copy of the License at 7a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * 8a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * 10a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * Unless required by applicable law or agreed to in writing, software 11a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * See the License for the specific language governing permissions and 14a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * limitations under the License. 15a89371c6f144b9049efe7689105feee2c4a38384Jason Sams */ 16a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 17a89371c6f144b9049efe7689105feee2c4a38384Jason Sams#ifndef ANDROID_RS_MESH_H 18a89371c6f144b9049efe7689105feee2c4a38384Jason Sams#define ANDROID_RS_MESH_H 19a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 20a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 21e23d239828a229eb7d4d33c9630070f0a87833e1Alex Sakhartchouk#include "rsObjectBase.h" 22a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 23a89371c6f144b9049efe7689105feee2c4a38384Jason Sams// --------------------------------------------------------------------------- 24a89371c6f144b9049efe7689105feee2c4a38384Jason Samsnamespace android { 25a89371c6f144b9049efe7689105feee2c4a38384Jason Samsnamespace renderscript { 264a43e3ea8a0328c56ace0af1869b4c8c781a7b26Alex Sakhartchouk/***************************************************************************** 274a43e3ea8a0328c56ace0af1869b4c8c781a7b26Alex Sakhartchouk * CAUTION 284a43e3ea8a0328c56ace0af1869b4c8c781a7b26Alex Sakhartchouk * 294a43e3ea8a0328c56ace0af1869b4c8c781a7b26Alex Sakhartchouk * Any layout changes for this class may require a corresponding change to be 304a43e3ea8a0328c56ace0af1869b4c8c781a7b26Alex Sakhartchouk * made to frameworks/compile/libbcc/lib/ScriptCRT/rs_core.c, which contains 314a43e3ea8a0328c56ace0af1869b4c8c781a7b26Alex Sakhartchouk * a partial copy of the information below. 324a43e3ea8a0328c56ace0af1869b4c8c781a7b26Alex Sakhartchouk * 334a43e3ea8a0328c56ace0af1869b4c8c781a7b26Alex Sakhartchouk *****************************************************************************/ 34a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 35a89371c6f144b9049efe7689105feee2c4a38384Jason Sams// An element is a group of Components that occupies one cell in a structure. 36afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass Mesh : public ObjectBase { 37a89371c6f144b9049efe7689105feee2c4a38384Jason Samspublic: 38a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct Hal { 39a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk mutable void *drv; 40a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 41a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk struct State { 42a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk // Contains vertex data 43a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk // Position, normal, texcoord, etc could either be strided in one allocation 44a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk // of provided separetely in multiple ones 45064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk Allocation **vertexBuffers; 46a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk uint32_t vertexBuffersCount; 47a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 4844bef6fba6244292b751387f3d6c31cca96c28adChris Wailes // indexBuffers[i] could be nullptr, in which case only primitives[i] is used 49064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk Allocation **indexBuffers; 50064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk uint32_t indexBuffersCount; 51064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk RsPrimitive *primitives; 52a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk uint32_t primitivesCount; 53a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk }; 54a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk State state; 55a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk }; 56a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk Hal mHal; 57a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 58253325d2a19162c1dd18de59c357e36adf4a760bAlex Sakhartchouk Mesh(Context *); 59253325d2a19162c1dd18de59c357e36adf4a760bAlex Sakhartchouk Mesh(Context *, uint32_t vertexBuffersCount, uint32_t primitivesCount); 60253325d2a19162c1dd18de59c357e36adf4a760bAlex Sakhartchouk ~Mesh(); 61253325d2a19162c1dd18de59c357e36adf4a760bAlex Sakhartchouk 62e3150cfb3edb028407669e4a65e087eae77e718cJason Sams virtual void serialize(Context *rsc, OStream *stream) const; 63253325d2a19162c1dd18de59c357e36adf4a760bAlex Sakhartchouk virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_MESH; } 64253325d2a19162c1dd18de59c357e36adf4a760bAlex Sakhartchouk static Mesh *createFromStream(Context *rsc, IStream *stream); 65253325d2a19162c1dd18de59c357e36adf4a760bAlex Sakhartchouk void init(); 66253325d2a19162c1dd18de59c357e36adf4a760bAlex Sakhartchouk 67a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void setVertexBuffer(Allocation *vb, uint32_t index) { 68064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk mVertexBuffers[index].set(vb); 69064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk mHal.state.vertexBuffers[index] = vb; 70a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } 71a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk 72a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk void setPrimitive(Allocation *idx, RsPrimitive prim, uint32_t index) { 73064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk mIndexBuffers[index].set(idx); 74064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk mHal.state.indexBuffers[index] = idx; 75064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk mHal.state.primitives[index] = prim; 76a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk } 77099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk 784e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void render(Context *) const; 794e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void renderPrimitive(Context *, uint32_t primIndex) const; 804e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void renderPrimitiveRange(Context *, uint32_t primIndex, uint32_t start, uint32_t len) const; 814e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void uploadAll(Context *); 82b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 83ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk // Bounding volumes 84ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float mBBoxMin[3]; 85ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float mBBoxMax[3]; 86e3150cfb3edb028407669e4a65e087eae77e718cJason Sams void computeBBox(Context *rsc); 87a89371c6f144b9049efe7689105feee2c4a38384Jason Samsprotected: 88064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk ObjectBaseRef<Allocation> *mVertexBuffers; 89064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk ObjectBaseRef<Allocation> *mIndexBuffers; 90a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk bool mInitialized; 91a89371c6f144b9049efe7689105feee2c4a38384Jason Sams}; 92a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 93afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass MeshContext { 94a89371c6f144b9049efe7689105feee2c4a38384Jason Samspublic: 95099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk MeshContext() { 96099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk } 97099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk ~MeshContext() { 98099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk } 99a89371c6f144b9049efe7689105feee2c4a38384Jason Sams}; 100a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 101a89371c6f144b9049efe7689105feee2c4a38384Jason Sams} 102a89371c6f144b9049efe7689105feee2c4a38384Jason Sams} 103a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#endif //ANDROID_RS_MESH_H 104a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 105a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 1064e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 107