1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/* 2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project 3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License. 6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at 7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * 10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software 11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and 14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License. 15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */ 16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#ifndef ANDROID_STRUCTURED_ELEMENT_H 18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_STRUCTURED_ELEMENT_H 19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 20718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams#include "rsComponent.h" 210011bcf57ff711a221a3a4c73f2a79125111647dJason Sams#include "rsUtils.h" 220011bcf57ff711a221a3a4c73f2a79125111647dJason Sams#include "rsObjectBase.h" 23d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 24d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// --------------------------------------------------------------------------- 25d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android { 26d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript { 27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 28d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 29d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// An element is a group of Components that occupies one cell in a structure. 30d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsclass Element : public ObjectBase 31d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams{ 32d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ~Element(); 34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 35e2ae85fc5a07591cb27bfae93557f80c55bb259cJason Sams uint32_t getGLType() const; 36e2ae85fc5a07591cb27bfae93557f80c55bb259cJason Sams uint32_t getGLFormat() const; 37d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 38d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams size_t getSizeBits() const; 391bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams size_t getSizeBytes() const { 401bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams return (getSizeBits() + 7) >> 3; 41d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 42d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 430011bcf57ff711a221a3a4c73f2a79125111647dJason Sams size_t getFieldOffsetBits(uint32_t componentNumber) const; 440011bcf57ff711a221a3a4c73f2a79125111647dJason Sams size_t getFieldOffsetBytes(uint32_t componentNumber) const { 450011bcf57ff711a221a3a4c73f2a79125111647dJason Sams return (getFieldOffsetBits(componentNumber) + 7) >> 3; 46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams } 47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 480011bcf57ff711a221a3a4c73f2a79125111647dJason Sams uint32_t getFieldCount() const {return mFieldCount;} 490011bcf57ff711a221a3a4c73f2a79125111647dJason Sams const Element * getField(uint32_t idx) const {return mFields[idx].e.get();} 500011bcf57ff711a221a3a4c73f2a79125111647dJason Sams const char * getFieldName(uint32_t idx) const {return mFields[idx].name.string();} 51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 52718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams const Component & getComponent() const {return mComponent;} 53718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams RsDataType getType() const {return mComponent.getType();} 54718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams RsDataKind getKind() const {return mComponent.getKind();} 550011bcf57ff711a221a3a4c73f2a79125111647dJason Sams uint32_t getBits() const {return mBits;} 563c0dfbab807a459622aeade4940daddf482dec66Jason Sams 57718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String8 getCType(uint32_t indent=0) const; 58718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String8 getCStructBody(uint32_t indent=0) const; 59e17964e150e459bacced5658ae36fe1c56082e37Jason Sams String8 getGLSLType(uint32_t indent=0) const; 603c0dfbab807a459622aeade4940daddf482dec66Jason Sams 61718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams void dumpLOGV(const char *prefix) const; 620011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 63e4c487a75282e8a38a8b3defd49e7799c8670881Jason Sams static const Element * create(Context *rsc, RsDataType dt, RsDataKind dk, 64718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams bool isNorm, uint32_t vecSize); 65e4c487a75282e8a38a8b3defd49e7799c8670881Jason Sams static const Element * create(Context *rsc, size_t count, const Element **, 66718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams const char **, const size_t * lengths); 670011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 68d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprotected: 69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams // deallocate any components that are part of this element. 70d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams void clear(); 71d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 720011bcf57ff711a221a3a4c73f2a79125111647dJason Sams typedef struct { 730011bcf57ff711a221a3a4c73f2a79125111647dJason Sams String8 name; 74718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams ObjectBaseRef<const Element> e; 750011bcf57ff711a221a3a4c73f2a79125111647dJason Sams } ElementField_t; 760011bcf57ff711a221a3a4c73f2a79125111647dJason Sams ElementField_t *mFields; 770011bcf57ff711a221a3a4c73f2a79125111647dJason Sams size_t mFieldCount; 780011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 79d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 80a9e7a05b84470257637c97d65f6562aa832c66efJason Sams Element(Context *); 810011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 82718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Component mComponent; 830011bcf57ff711a221a3a4c73f2a79125111647dJason Sams uint32_t mBits; 84d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 85d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 86d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 87d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsclass ElementState { 88d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic: 89d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ElementState(); 90d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams ~ElementState(); 91d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 92e4c487a75282e8a38a8b3defd49e7799c8670881Jason Sams // Cache of all existing elements. 93e4c487a75282e8a38a8b3defd49e7799c8670881Jason Sams Vector<const Element *> mElements; 94d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}; 95d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 96d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams 97d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 98d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams} 99d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif //ANDROID_STRUCTURED_ELEMENT_H 100