Home | History | Annotate | Download | only in rs
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ANDROID_RS_MESH_H
     18 #define ANDROID_RS_MESH_H
     19 
     20 
     21 #include "rsObjectBase.h"
     22 
     23 // ---------------------------------------------------------------------------
     24 namespace android {
     25 namespace renderscript {
     26 /*****************************************************************************
     27  * CAUTION
     28  *
     29  * Any layout changes for this class may require a corresponding change to be
     30  * made to frameworks/compile/libbcc/lib/ScriptCRT/rs_core.c, which contains
     31  * a partial copy of the information below.
     32  *
     33  *****************************************************************************/
     34 
     35 // An element is a group of Components that occupies one cell in a structure.
     36 class Mesh : public ObjectBase {
     37 public:
     38     struct Hal {
     39         mutable void *drv;
     40 
     41         struct State {
     42             // Contains vertex data
     43             // Position, normal, texcoord, etc could either be strided in one allocation
     44             // of provided separetely in multiple ones
     45             Allocation **vertexBuffers;
     46             uint32_t vertexBuffersCount;
     47 
     48             // indexBuffers[i] could be nullptr, in which case only primitives[i] is used
     49             Allocation **indexBuffers;
     50             uint32_t indexBuffersCount;
     51             RsPrimitive *primitives;
     52             uint32_t primitivesCount;
     53         };
     54         State state;
     55     };
     56     Hal mHal;
     57 
     58     explicit Mesh(Context *);
     59     Mesh(Context *, uint32_t vertexBuffersCount, uint32_t primitivesCount);
     60     ~Mesh();
     61 
     62     virtual void serialize(Context *rsc, OStream *stream) const;
     63     virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_MESH; }
     64     static Mesh *createFromStream(Context *rsc, IStream *stream);
     65     void init();
     66 
     67     void setVertexBuffer(Allocation *vb, uint32_t index) {
     68         mVertexBuffers[index].set(vb);
     69         mHal.state.vertexBuffers[index] = vb;
     70     }
     71 
     72     void setPrimitive(Allocation *idx, RsPrimitive prim, uint32_t index) {
     73         mIndexBuffers[index].set(idx);
     74         mHal.state.indexBuffers[index] = idx;
     75         mHal.state.primitives[index] = prim;
     76     }
     77 
     78     void render(Context *) const;
     79     void renderPrimitive(Context *, uint32_t primIndex) const;
     80     void renderPrimitiveRange(Context *, uint32_t primIndex, uint32_t start, uint32_t len) const;
     81     void uploadAll(Context *);
     82 
     83     // Bounding volumes
     84     float mBBoxMin[3];
     85     float mBBoxMax[3];
     86     void computeBBox(Context *rsc);
     87 protected:
     88     ObjectBaseRef<Allocation> *mVertexBuffers;
     89     ObjectBaseRef<Allocation> *mIndexBuffers;
     90     bool mInitialized;
     91 };
     92 
     93 class MeshContext {
     94 public:
     95     MeshContext() {
     96     }
     97     ~MeshContext() {
     98     }
     99 };
    100 
    101 } // namespace renderscript
    102 } // namespace android
    103 #endif //ANDROID_RS_MESH_H
    104 
    105 
    106 
    107