rsElement.h revision 4815c0d121310cfcd6a8aba4eab77a9910af53ac
1326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams/* 2326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Copyright (C) 2009 The Android Open Source Project 3326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 4326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * you may not use this file except in compliance with the License. 6326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * You may obtain a copy of the License at 7326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 8326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * 10326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * Unless required by applicable law or agreed to in writing, software 11326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * See the License for the specific language governing permissions and 14326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams * limitations under the License. 15326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams */ 16326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 17326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#ifndef ANDROID_STRUCTURED_ELEMENT_H 18326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#define ANDROID_STRUCTURED_ELEMENT_H 19326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 204815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams//#include "rsComponent.h" 214815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams#include "rsUtils.h" 224815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams#include "rsObjectBase.h" 23326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 24326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// --------------------------------------------------------------------------- 25326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace android { 26326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsnamespace renderscript { 27326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 28326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 29326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams// An element is a group of Components that occupies one cell in a structure. 30326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsclass Element : public ObjectBase 31326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams{ 32326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 33326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ~Element(); 34326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 35326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 364815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //void setComponent(uint32_t idx, Component *c); 37326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 38565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams uint32_t getGLType() const; 39565ac36ee479f9d7b83e2030ac9646a09cb886a1Jason Sams uint32_t getGLFormat() const; 40326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 41326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 42326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams size_t getSizeBits() const; 43e5ffb879ae535a899a486285a23bea05e912480fJason Sams size_t getSizeBytes() const { 44e5ffb879ae535a899a486285a23bea05e912480fJason Sams return (getSizeBits() + 7) >> 3; 45326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 46326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 474815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams size_t getFieldOffsetBits(uint32_t componentNumber) const; 484815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams size_t getFieldOffsetBytes(uint32_t componentNumber) const { 494815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams return (getFieldOffsetBits(componentNumber) + 7) >> 3; 50326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams } 51326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 524815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams uint32_t getFieldCount() const {return mFieldCount;} 534815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams const Element * getField(uint32_t idx) const {return mFields[idx].e.get();} 544815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams const char * getFieldName(uint32_t idx) const {return mFields[idx].name.string();} 55326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 564815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams RsDataType getType() const {return mType;} 574815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams bool getIsNormalized() const {return mIsNormalized;} 584815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams RsDataKind getKind() const {return mKind;} 594815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams uint32_t getBits() const {return mBits;} 604815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //uint32_t getGLType() const; 614815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams const char * getCType() const; 62e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 63e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams void dumpLOGV(const char *prefix) const; 64e12c1c591b4219e80f29c6c0e0c62c9578b75450Jason Sams 654815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 664815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams static Element * create(Context *rsc, RsDataKind dk, RsDataType dt, 674815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams bool isNorm, size_t bits); 684815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams static Element * create(Context *rsc, Element **, const char **, 694815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams const size_t * lengths, size_t count); 704815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 71326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsprotected: 72326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams // deallocate any components that are part of this element. 73326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams void clear(); 74326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 754815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams typedef struct { 764815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams String8 name; 774815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams ObjectBaseRef<Element> e; 784815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams } ElementField_t; 794815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams ElementField_t *mFields; 804815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams size_t mFieldCount; 814815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 82326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 83e514b45de8561fbc6ef6770845102ca10b0a69d7Jason Sams Element(Context *); 844815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 854815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams 864815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams RsDataType mType; 874815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams bool mIsNormalized; 884815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams RsDataKind mKind; 894815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams uint32_t mBits; 904815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams //String8 mName; 91326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 92326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 93326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 94326e0ddf89e8df2837752fbfd7a014814b32082cJason Samsclass ElementState { 95326e0ddf89e8df2837752fbfd7a014814b32082cJason Samspublic: 96326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ElementState(); 97326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams ~ElementState(); 98326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 994815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Vector<Element *> mBuildList; 1004815c0d121310cfcd6a8aba4eab77a9910af53acJason Sams Vector<String8> mNames; 101326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams}; 102326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 103326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams 104326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 105326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams} 106326e0ddf89e8df2837752fbfd7a014814b32082cJason Sams#endif //ANDROID_STRUCTURED_ELEMENT_H 107