rsMesh.h revision 099d7d33e55afeb3399f6e8cf8d665223ca94939
1a89371c6f144b9049efe7689105feee2c4a38384Jason Sams/* 2a89371c6f144b9049efe7689105feee2c4a38384Jason Sams * Copyright (C) 2009 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 21a89371c6f144b9049efe7689105feee2c4a38384Jason Sams#include "RenderScript.h" 22a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 23a89371c6f144b9049efe7689105feee2c4a38384Jason Sams// --------------------------------------------------------------------------- 24a89371c6f144b9049efe7689105feee2c4a38384Jason Samsnamespace android { 25a89371c6f144b9049efe7689105feee2c4a38384Jason Samsnamespace renderscript { 26a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 27a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 28a89371c6f144b9049efe7689105feee2c4a38384Jason Sams// An element is a group of Components that occupies one cell in a structure. 29afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass Mesh : public ObjectBase { 30a89371c6f144b9049efe7689105feee2c4a38384Jason Samspublic: 31e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams Mesh(Context *); 32a89371c6f144b9049efe7689105feee2c4a38384Jason Sams ~Mesh(); 33a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 344e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk // Contains vertex data 354e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk // Position, normal, texcoord, etc could either be strided in one allocation 364e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk // of provided separetely in multiple ones 374e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk ObjectBaseRef<Allocation> *mVertexBuffers; 384e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk uint32_t mVertexBufferCount; 394e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 404e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk // Either mIndexBuffer, mPrimitiveBuffer or both could have a NULL reference 414e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk // If both are null, mPrimitive only would be used to render the mesh 42a89371c6f144b9049efe7689105feee2c4a38384Jason Sams struct Primitive_t 43a89371c6f144b9049efe7689105feee2c4a38384Jason Sams { 444e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk ObjectBaseRef<Allocation> mIndexBuffer; 45b80dfa72dfdd146a9ddee948ad76635dbea3c0cdJason Sams 464e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk RsPrimitive mPrimitive; 474e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk uint32_t mGLPrimitive; 48a89371c6f144b9049efe7689105feee2c4a38384Jason Sams }; 49a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 50a5597fcd411badad50c1345b3eca26453da45bbbJason Sams Primitive_t ** mPrimitives; 51a5597fcd411badad50c1345b3eca26453da45bbbJason Sams uint32_t mPrimitivesCount; 52a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 53099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk virtual void serialize(OStream *stream) const; 54099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_MESH; } 55099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk static Mesh *createFromStream(Context *rsc, IStream *stream); 56099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk 57099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk#ifndef ANDROID_RS_BUILD_FOR_HOST 584e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void render(Context *) const; 594e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void renderPrimitive(Context *, uint32_t primIndex) const; 604e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void renderPrimitiveRange(Context *, uint32_t primIndex, uint32_t start, uint32_t len) const; 614e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void uploadAll(Context *); 624e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk void updateGLPrimitives(); 634e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 64099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk 65b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 66ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk // Bounding volumes 67ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float mBBoxMin[3]; 68ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk float mBBoxMax[3]; 69ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk void computeBBox(); 70ba4aa5c768a498bc3fbb8cb5547b7a9ad6f4b771Alex Sakhartchouk 7154929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk void initVertexAttribs(); 7254929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk 73a89371c6f144b9049efe7689105feee2c4a38384Jason Samsprotected: 7454929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk bool isValidGLComponent(const Element *elem, uint32_t fieldIdx); 7554929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk // Attribues that allow us to map to GL 7654929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk VertexArray::Attrib *mAttribs; 7754929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk // This allows us to figure out which allocation the attribute 7854929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk // belongs to. In the event the allocation is uploaded to GL 7954929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk // buffer, it lets us properly map it 8054929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk uint32_t *mAttribAllocationIndex; 8154929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk uint32_t mAttribCount; 82099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk#endif 83a89371c6f144b9049efe7689105feee2c4a38384Jason Sams}; 84a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 85afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass MeshContext { 86a89371c6f144b9049efe7689105feee2c4a38384Jason Samspublic: 87099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk MeshContext() { 88099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk } 89099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk ~MeshContext() { 90099d7d33e55afeb3399f6e8cf8d665223ca94939Alex Sakhartchouk } 91a89371c6f144b9049efe7689105feee2c4a38384Jason Sams}; 92a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 93a89371c6f144b9049efe7689105feee2c4a38384Jason Sams} 94a89371c6f144b9049efe7689105feee2c4a38384Jason Sams} 95a89371c6f144b9049efe7689105feee2c4a38384Jason Sams#endif //ANDROID_RS_TRIANGLE_MESH_H 96a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 97a89371c6f144b9049efe7689105feee2c4a38384Jason Sams 984e9a7a8ded109e16b163789274899447cef02642Alex Sakhartchouk 99