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