1221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams/*
269cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams * Copyright (C) 2012 The Android Open Source Project
3221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
4221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * you may not use this file except in compliance with the License.
6221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * You may obtain a copy of the License at
7221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
8221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams *
10221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * Unless required by applicable law or agreed to in writing, software
11221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * See the License for the specific language governing permissions and
14221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams * limitations under the License.
15221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams */
16221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
17221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#ifndef __ANDROID_TYPE_H__
18221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#define __ANDROID_TYPE_H__
19221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
20221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include <rs.h>
21221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#include "RenderScript.h"
22b2e3dc51dcbbe52b5e72d9c6a16de7000de70edfJason Sams#include "Element.h"
23221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
2469cccdf0659a193d6a75420ec745421fb5c436e6Jason Samsnamespace android {
2569cccdf0659a193d6a75420ec745421fb5c436e6Jason Samsnamespace renderscriptCpp {
2669cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams
27221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsclass Type : public BaseObj {
28221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samsprotected:
29221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    friend class Allocation;
30221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
31221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mDimX;
32221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mDimY;
33221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t mDimZ;
34221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool mDimMipmaps;
35221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool mDimFaces;
36221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    size_t mElementCount;
3769cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    sp<const Element> mElement;
38221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
39221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    void calcElementCount();
40221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    virtual void updateFromNative();
41221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
42221a4b17cda03916a0599628fcbb5f48605a0e5aJason Samspublic:
43221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
4469cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams    sp<const Element> getElement() const {
45221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mElement;
46221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
47221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
48221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t getX() const {
49221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mDimX;
50221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
51221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
52221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t getY() const {
53221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mDimY;
54221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
55221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
56221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    uint32_t getZ() const {
57221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mDimZ;
58221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
59221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
60221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool hasMipmaps() const {
61221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mDimMipmaps;
62221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
63221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
64221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    bool hasFaces() const {
65221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mDimFaces;
66221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
67221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
68221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    size_t getCount() const {
69221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mElementCount;
70221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
71221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
72221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    size_t getSizeBytes() const {
73221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        return mElementCount * mElement->getSizeBytes();
74221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    }
75221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
76221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
77221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    Type(void *id, RenderScript *rs);
78221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
79221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
80221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    class Builder {
81221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    protected:
82221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        RenderScript *mRS;
83221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        uint32_t mDimX;
84221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        uint32_t mDimY;
85221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        uint32_t mDimZ;
86221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        bool mDimMipmaps;
87221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        bool mDimFaces;
8869cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams        sp<const Element> mElement;
89221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
90221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    public:
9169cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams        Builder(RenderScript *rs, sp<const Element> e);
92221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
93221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        void setX(uint32_t value);
94221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        void setY(int value);
95221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        void setMipmaps(bool value);
96221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams        void setFaces(bool value);
9769cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams        sp<const Type> create();
98221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams    };
99221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
100221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams};
101221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams
10269cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams}
10369cccdf0659a193d6a75420ec745421fb5c436e6Jason Sams}
104221a4b17cda03916a0599628fcbb5f48605a0e5aJason Sams#endif
105