1a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk/*
2a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * Copyright (C) 2011 The Android Open Source Project
3a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk *
4a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License");
5a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * you may not use this file except in compliance with the License.
6a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * You may obtain a copy of the License at
7a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk *
8a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk *      http://www.apache.org/licenses/LICENSE-2.0
9a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk *
10a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software
11a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS,
12a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * See the License for the specific language governing permissions and
14a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk * limitations under the License.
15a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk */
16a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
17a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk#ifndef _RSD_FRAMEBUFFER_OBJ_H_
18a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk#define _RSD_FRAMEBUFFER_OBJ_H_
19a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
20a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk#include <rsContext.h>
21a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
221cd84930b25bf12e094b416a0ea4ae5fe839f537Stephen Hinesstruct DrvAllocation;
23a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
24a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchoukclass RsdFrameBufferObj {
25a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchoukpublic:
26a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    RsdFrameBufferObj();
27a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    ~RsdFrameBufferObj();
28a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
29a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    void setActive(const android::renderscript::Context *rsc);
30a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    void setColorTarget(DrvAllocation *color, uint32_t index) {
31a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk        mColorTargets[index] = color;
32a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk        mDirty = true;
33a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    }
34a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    void setDepthTarget(DrvAllocation *depth) {
35a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk        mDepthTarget = depth;
36a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk        mDirty = true;
37a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    }
38a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    void setDimensions(uint32_t width, uint32_t height) {
39a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk        mWidth = width;
40a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk        mHeight = height;
41a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    }
42a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchoukprotected:
43a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    uint32_t mFBOId;
44a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    DrvAllocation **mColorTargets;
45a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    uint32_t mColorTargetsCount;
46a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    DrvAllocation *mDepthTarget;
47a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
48a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    uint32_t mWidth;
49a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    uint32_t mHeight;
50a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
51a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    bool mDirty;
52a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
53a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    bool renderToFramebuffer();
54a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    void checkError(const android::renderscript::Context *rsc);
55a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    void setColorAttachment();
56a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk    void setDepthAttachment();
57a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk};
58a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk
59a94952436aeb251f587c1bccdf94c7f75285dfe2Alex Sakhartchouk#endif //_RSD_FRAMEBUFFER_STATE_H_
60