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