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 { 47064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk Allocation **colorTargets; 48da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk uint32_t colorTargetsCount; 49064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk Allocation *depthTarget; 50da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk }; 51da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk State state; 52da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk }; 53da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchouk Hal mHal; 547d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 55da6d34a5a6ece8c30d20673b9b6ff07d8c91768bAlex Sakhartchoukprotected: 56064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk ObjectBaseRef<Allocation> *mColorTargets; 57064aa7ed76db9564b041afcd4b75da5b3d12fabaAlex Sakhartchouk ObjectBaseRef<Allocation> mDepthTarget; 587d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk bool mDirty; 597d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk void checkError(Context *); 607d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk void setColorAttachment(Context *rsc); 617d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk void setDepthAttachment(Context *rsc); 627d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk bool renderToFramebuffer(); 637d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 647d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk}; 657d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 667d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk} // renderscript 677d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk} // android 687d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk 697d9c5ffccb7a5e682860f752403e5a03aed587beAlex Sakhartchouk#endif //ANDROID_FRAME_BUFFER_OBJECT_CACHE_H 70