18e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk/*
28e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project
38e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk *
48e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License");
58e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * you may not use this file except in compliance with the License.
68e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * You may obtain a copy of the License at
78e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk *
88e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk *      http://www.apache.org/licenses/LICENSE-2.0
98e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk *
108e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software
118e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS,
128e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * See the License for the specific language governing permissions and
148e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk * limitations under the License.
158e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk */
168e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
178e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk#ifndef ANDROID_FRAME_BUFFER_OBJECT_CACHE_H
188e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk#define ANDROID_FRAME_BUFFER_OBJECT_CACHE_H
198e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
208e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk#include "rsObjectBase.h"
218e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
228e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk// ---------------------------------------------------------------------------
238e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouknamespace android {
248e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouknamespace renderscript {
258e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
268e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukclass Allocation;
278e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
288e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukclass FBOCache {
298e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchoukpublic:
308e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    FBOCache();
318e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    ~FBOCache();
328e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
332f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk    void init(Context *rsc);
342f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk    void deinit(Context *rsc);
352f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk
368e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    void bindColorTarget(Context *rsc, Allocation *a, uint32_t slot);
378e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    void bindDepthTarget(Context *, Allocation *a);
388e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    void resetAll(Context *);
398e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
40407cae950325682a56fe5373dd218a666da901efAlex Sakhartchouk    void setup(Context *);
4110ed04935d19ff87169499a7c1c7d8256cf13fe0Alex Sakhartchouk    void updateSize() { mDirty = true; }
428e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
432f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk    struct Hal {
442f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk        mutable void *drv;
452f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk
462f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk        struct State {
475ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk            Allocation **colorTargets;
482f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk            uint32_t colorTargetsCount;
495ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk            Allocation *depthTarget;
502f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk        };
512f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk        State state;
522f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk    };
532f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchouk    Hal mHal;
548e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
552f6964fc89bf69c8e37f096d37c8e224d598b8f8Alex Sakhartchoukprotected:
565ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk    ObjectBaseRef<Allocation> *mColorTargets;
575ef2f53a00f64b7e156978d9de2e097394e4036aAlex Sakhartchouk    ObjectBaseRef<Allocation> mDepthTarget;
588e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    bool mDirty;
598e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    void checkError(Context *);
608e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    void setColorAttachment(Context *rsc);
618e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    void setDepthAttachment(Context *rsc);
628e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk    bool renderToFramebuffer();
638e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
648e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk};
658e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
668e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk} // renderscript
678e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk} // android
688e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk
698e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk#endif //ANDROID_FRAME_BUFFER_OBJECT_CACHE_H
70