1c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams/*
2a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project
3c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams *
4c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * you may not use this file except in compliance with the License.
6c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * You may obtain a copy of the License at
7c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams *
8c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams *
10c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * Unless required by applicable law or agreed to in writing, software
11c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * See the License for the specific language governing permissions and
14c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams * limitations under the License.
15c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams */
16c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
17a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#ifndef ANDROID_RSD_VERTEX_ARRAY_H
18a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#define ANDROID_RSD_VERTEX_ARRAY_H
19c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
200b575de8ed0b628d84d256f5846500b0385979bdTim Murray#include "rsUtils.h"
210b575de8ed0b628d84d256f5846500b0385979bdTim Murray
2282e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang#include <string>
2382e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang
24c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samsnamespace android {
25c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samsnamespace renderscript {
26c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
27a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass Context;
28a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
297974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace renderscript
307974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace android
31a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk
32c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams// An element is a group of Components that occupies one cell in a structure.
33a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RsdVertexArray {
34c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samspublic:
35433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams    class Attrib {
36433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams    public:
37c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t buffer;
38760f1f7335ad0c5aee59ca829a40bbf6e3328a1bJason Sams        const uint8_t * ptr;
39e195a3f57ace3b66d313a6ee88c6e93d5c9d87f4Tim Murray        size_t offset;
40c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t type;
41c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t size;
42c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        uint32_t stride;
43c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams        bool normalized;
4482e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang        std::string name;
45433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams
46433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams        Attrib();
47433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams        void clear();
48e195a3f57ace3b66d313a6ee88c6e93d5c9d87f4Tim Murray        void set(uint32_t type, uint32_t size, uint32_t stride, bool normalized, size_t offset, const char *name);
49433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams    };
50c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
51a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    RsdVertexArray(const Attrib *attribs, uint32_t numAttribs);
52a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    virtual ~RsdVertexArray();
53c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
54c19ff0177a7a0dadfc01b1990f822354fdc95991Alex Sakhartchouk    void setup(const android::renderscript::Context *rsc) const;
55433eca30b2efe0cf84bbda33f2dfdfd6dcafaf59Jason Sams    void logAttrib(uint32_t idx, uint32_t slot) const;
56c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
57c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samsprotected:
58be504f2d0c5db4485e6db5b406e9e8b8c390dea9Jason Sams    void clear(uint32_t index);
59c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams    uint32_t mActiveBuffer;
60760f1f7335ad0c5aee59ca829a40bbf6e3328a1bJason Sams    const uint8_t * mActivePointer;
61be504f2d0c5db4485e6db5b406e9e8b8c390dea9Jason Sams    uint32_t mCount;
62be504f2d0c5db4485e6db5b406e9e8b8c390dea9Jason Sams
6354929cce0bf44090424b1f91b676529a2422378fAlex Sakhartchouk    const Attrib *mAttribs;
64c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams};
65c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
66c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
67a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchoukclass RsdVertexArrayState {
68c460e55d78cbe8bee95c5c947dfe541218142a5bJason Samspublic:
69a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    RsdVertexArrayState();
70a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    ~RsdVertexArrayState();
71a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk    void init(uint32_t maxAttrs);
72c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
732d791976a2b937017423519d9f9a4928fc31dae2Alex Sakhartchouk    bool *mAttrsEnabled;
742d791976a2b937017423519d9f9a4928fc31dae2Alex Sakhartchouk    uint32_t mAttrsEnabledSize;
75c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams};
76c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
77c460e55d78cbe8bee95c5c947dfe541218142a5bJason Sams
78a04e30dbb5ab11592b03666bb3d102070759c58eAlex Sakhartchouk#endif //ANDROID_RSD_VERTEX_ARRAY_H
79b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
80b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
81b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
82