17c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams/* 24a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project 37c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * 47c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 57c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * you may not use this file except in compliance with the License. 67c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * You may obtain a copy of the License at 77c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * 87c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * http://www.apache.org/licenses/LICENSE-2.0 97c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * 107c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * Unless required by applicable law or agreed to in writing, software 117c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 127c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * See the License for the specific language governing permissions and 147c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams * limitations under the License. 157c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams */ 167c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 177c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams#ifndef ANDROID_RS_MESH_H 187c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams#define ANDROID_RS_MESH_H 197c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 207c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 217c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams#include "RenderScript.h" 227c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 237c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams// --------------------------------------------------------------------------- 247c878f3a8379daf21dca6de7aa722ff75328afbeJason Samsnamespace android { 257c878f3a8379daf21dca6de7aa722ff75328afbeJason Samsnamespace renderscript { 267c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 277c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 287c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams// An element is a group of Components that occupies one cell in a structure. 29ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchoukclass Mesh : public ObjectBase { 307c878f3a8379daf21dca6de7aa722ff75328afbeJason Samspublic: 31a9e7a05b84470257637c97d65f6562aa832c66efJason Sams Mesh(Context *); 324a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk Mesh(Context *, uint32_t vertexBuffersCount, uint32_t primitivesCount); 337c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams ~Mesh(); 347c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 35a3b5960f6f28a81cd63abd69adcdfb5dcc05aa30Alex Sakhartchouk virtual void serialize(OStream *stream) const; 36a3b5960f6f28a81cd63abd69adcdfb5dcc05aa30Alex Sakhartchouk virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_MESH; } 37a3b5960f6f28a81cd63abd69adcdfb5dcc05aa30Alex Sakhartchouk static Mesh *createFromStream(Context *rsc, IStream *stream); 384a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk void init(); 394a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk 404a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk struct Hal { 414a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk mutable void *drv; 424a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk 434a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk struct State { 444a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk // Contains vertex data 454a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk // Position, normal, texcoord, etc could either be strided in one allocation 464a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk // of provided separetely in multiple ones 475ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk Allocation **vertexBuffers; 484a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk uint32_t vertexBuffersCount; 494a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk 505ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk // indexBuffers[i] could be NULL, in which case only primitives[i] is used 515ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk Allocation **indexBuffers; 525ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk uint32_t indexBuffersCount; 535ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk RsPrimitive *primitives; 544a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk uint32_t primitivesCount; 554a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk }; 564a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk State state; 574a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk }; 584a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk Hal mHal; 594a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk 604a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk void setVertexBuffer(Allocation *vb, uint32_t index) { 615ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk mVertexBuffers[index].set(vb); 625ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk mHal.state.vertexBuffers[index] = vb; 634a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk } 644a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk 654a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk void setPrimitive(Allocation *idx, RsPrimitive prim, uint32_t index) { 665ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk mIndexBuffers[index].set(idx); 675ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk mHal.state.indexBuffers[index] = idx; 685ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk mHal.state.primitives[index] = prim; 694a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk } 70a3b5960f6f28a81cd63abd69adcdfb5dcc05aa30Alex Sakhartchouk 71164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk void render(Context *) const; 72164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk void renderPrimitive(Context *, uint32_t primIndex) const; 73164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk void renderPrimitiveRange(Context *, uint32_t primIndex, uint32_t start, uint32_t len) const; 74164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk void uploadAll(Context *); 75aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 76a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk // Bounding volumes 77a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk float mBBoxMin[3]; 78a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk float mBBoxMax[3]; 79a80145de0014aff9bdafe14601046ca511a2f90cAlex Sakhartchouk void computeBBox(); 807c878f3a8379daf21dca6de7aa722ff75328afbeJason Samsprotected: 815ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk ObjectBaseRef<Allocation> *mVertexBuffers; 825ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk ObjectBaseRef<Allocation> *mIndexBuffers; 834a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk bool mInitialized; 847c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams}; 857c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 86ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchoukclass MeshContext { 877c878f3a8379daf21dca6de7aa722ff75328afbeJason Samspublic: 88a3b5960f6f28a81cd63abd69adcdfb5dcc05aa30Alex Sakhartchouk MeshContext() { 89a3b5960f6f28a81cd63abd69adcdfb5dcc05aa30Alex Sakhartchouk } 90a3b5960f6f28a81cd63abd69adcdfb5dcc05aa30Alex Sakhartchouk ~MeshContext() { 91a3b5960f6f28a81cd63abd69adcdfb5dcc05aa30Alex Sakhartchouk } 927c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams}; 937c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 947c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams} 957c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams} 964a36b45c72b91045db49c54d33fd7a05fc5a7a3dAlex Sakhartchouk#endif //ANDROID_RS_MESH_H 977c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 987c878f3a8379daf21dca6de7aa722ff75328afbeJason Sams 99164aaedf7f24827c3da84acc733325ae985930d6Alex Sakhartchouk 100