rsFBOCache.h revision a544b6368d7ddae47985da92d6bcf86798b376c6
17d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk/*
27d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project
37d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk *
47d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License");
57d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * you may not use this file except in compliance with the License.
67d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * You may obtain a copy of the License at
77d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk *
87d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk *      http://www.apache.org/licenses/LICENSE-2.0
97d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk *
107d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * Unless required by applicable law or agreed to in writing, software
117d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS,
127d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * See the License for the specific language governing permissions and
147d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk * limitations under the License.
157d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk */
167d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
177d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk#ifndef ANDROID_FRAME_BUFFER_OBJECT_CACHE_H
187d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk#define ANDROID_FRAME_BUFFER_OBJECT_CACHE_H
197d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
207d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk#include "rsObjectBase.h"
217d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
227d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk// ---------------------------------------------------------------------------
237d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouknamespace android {
247d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouknamespace renderscript {
257d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
267d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukclass Allocation;
277d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
287d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukclass FBOCache {
297d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchoukpublic:
307d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    FBOCache();
317d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    ~FBOCache();
327d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
33da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    void init(Context *rsc);
34da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    void deinit(Context *rsc);
35da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk
367d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    void bindColorTarget(Context *rsc, Allocation *a, uint32_t slot);
377d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    void bindDepthTarget(Context *, Allocation *a);
387d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    void resetAll(Context *);
397d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
40c19ff0177a7a0dadfc01b1990f822354fdc95991Alex Sakhartchouk    void setup(Context *);
41a544b6368d7ddae47985da92d6bcf86798b376c6Alex Sakhartchouk    void updateSize() { mDirty = true; }
427d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
43da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    struct Hal {
44da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        mutable void *drv;
45da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk
46da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        struct State {
47da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk            ObjectBaseRef<Allocation> *colorTargets;
48da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk            uint32_t colorTargetsCount;
49da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk            ObjectBaseRef<Allocation> depthTarget;
50da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        };
51da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk        State state;
52da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    };
53da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk    Hal mHal;
547d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
55da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchoukprotected:
567d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    bool mDirty;
577d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    void checkError(Context *);
587d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    void setColorAttachment(Context *rsc);
597d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    void setDepthAttachment(Context *rsc);
607d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk    bool renderToFramebuffer();
617d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
627d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk};
637d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
647d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk} // renderscript
657d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk} // android
667d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk
677d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk#endif //ANDROID_FRAME_BUFFER_OBJECT_CACHE_H
68