1d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams/*
2d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Copyright (C) 2009 The Android Open Source Project
3d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
4d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * you may not use this file except in compliance with the License.
6d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * You may obtain a copy of the License at
7d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
8d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams *
10d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * Unless required by applicable law or agreed to in writing, software
11d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * See the License for the specific language governing permissions and
14d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams * limitations under the License.
15d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams */
16d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
17d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#ifndef ANDROID_RS_PROGRAM_FRAGMENT_H
18d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#define ANDROID_RS_PROGRAM_FRAGMENT_H
19d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
20d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#include "rsProgram.h"
21d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
22d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams// ---------------------------------------------------------------------------
23d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace android {
24d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsnamespace renderscript {
25d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
269bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Samsclass ProgramFragmentState;
27d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
28ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchoukclass ProgramFragment : public Program {
29d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
307e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams    ProgramFragment(Context *rsc, const char * shaderText,
317e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams                             uint32_t shaderLength, const uint32_t * params,
327e5ab3b177b10fee304d011b3a4b9ee03e2b18b5Jason Sams                             uint32_t paramLength);
33d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    virtual ~ProgramFragment();
34d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
35407cae950325682a56fe5373dd218a666da901efAlex Sakhartchouk    virtual void setup(Context *, ProgramFragmentState *);
36d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
37aa7d2884cb563f87294003981e03e37a1abeb961Alex Sakhartchouk    virtual void serialize(OStream *stream) const;
38aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk    virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_PROGRAM_FRAGMENT; }
39aa7d2884cb563f87294003981e03e37a1abeb961Alex Sakhartchouk    static ProgramFragment *createFromStream(Context *rsc, IStream *stream);
40d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
41b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    void setConstantColor(Context *, float, float, float, float);
42442a647424e6537e94341654e3ae5d52efd84862Jason Sams
43d19f10d43aa400e1183aa21a97099d02074131a2Jason Samsprotected:
44442a647424e6537e94341654e3ae5d52efd84862Jason Sams    float mConstantColor[4];
45caaac0f8271ddc34c1163cb45b4026c014b3ec12Alex Sakhartchouk    int32_t mTextureUniformIndexStart;
46d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
47d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
48ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchoukclass ProgramFragmentState {
49d19f10d43aa400e1183aa21a97099d02074131a2Jason Samspublic:
50d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ProgramFragmentState();
51d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ~ProgramFragmentState();
52d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
53d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams    ProgramFragment *mPF;
54f603d212552485c634e25f3556f847dc2b022bd5Jason Sams    void init(Context *rsc);
5561f08d6fa7c7657e9fbcd17e9a1c5b9114bb3844Jason Sams    void deinit(Context *rsc);
56d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
579c54bdbf458e3c9433d237ae71cf47c4ec47d852Jason Sams    ObjectBaseRef<ProgramFragment> mDefault;
583eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams    Vector<ProgramFragment *> mPrograms;
599bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Sams
609bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Sams    ObjectBaseRef<ProgramFragment> mLast;
61d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams};
62d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
63d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
64d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams}
65d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams#endif
66d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
67d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
68d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
69d19f10d43aa400e1183aa21a97099d02074131a2Jason Sams
70