Home | History | Annotate | Download | only in rs
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ANDROID_RS_PROGRAM_VERTEX_H
     18 #define ANDROID_RS_PROGRAM_VERTEX_H
     19 
     20 #include "rsProgram.h"
     21 
     22 // ---------------------------------------------------------------------------
     23 namespace android {
     24 namespace renderscript {
     25 
     26 class ProgramVertexState;
     27 
     28 class ProgramVertex : public Program
     29 {
     30 public:
     31     const static uint32_t MAX_LIGHTS = 8;
     32 
     33     ProgramVertex(Context *,const char * shaderText, uint32_t shaderLength,
     34                   const uint32_t * params, uint32_t paramLength);
     35     ProgramVertex(Context *, bool texMat);
     36     virtual ~ProgramVertex();
     37 
     38     virtual void setupGL(const Context *rsc, ProgramVertexState *state);
     39     virtual void setupGL2(const Context *rsc, ProgramVertexState *state, ShaderCache *sc);
     40 
     41 
     42     void setTextureMatrixEnable(bool e) {mTextureMatrixEnable = e;}
     43     void addLight(const Light *);
     44 
     45     void setProjectionMatrix(const rsc_Matrix *) const;
     46     void setModelviewMatrix(const rsc_Matrix *) const;
     47     void setTextureMatrix(const rsc_Matrix *) const;
     48 
     49     void transformToScreen(const Context *, float *v4out, const float *v3in) const;
     50 
     51     virtual void createShader();
     52     virtual void loadShader(Context *);
     53     virtual void init(Context *);
     54 
     55 
     56 protected:
     57     uint32_t mLightCount;
     58     ObjectBaseRef<const Light> mLights[MAX_LIGHTS];
     59 
     60     // Hacks to create a program for now
     61     bool mTextureMatrixEnable;
     62 
     63 private:
     64     void initAddUserElement(const Element *e, String8 *names, uint32_t *count, const char *prefix);
     65 };
     66 
     67 
     68 class ProgramVertexState
     69 {
     70 public:
     71     ProgramVertexState();
     72     ~ProgramVertexState();
     73 
     74     void init(Context *rsc, int32_t w, int32_t h);
     75     void deinit(Context *rsc);
     76     void updateSize(Context *rsc, int32_t w, int32_t h);
     77 
     78     ObjectBaseRef<ProgramVertex> mDefault;
     79     ObjectBaseRef<ProgramVertex> mLast;
     80     ObjectBaseRef<Allocation> mDefaultAlloc;
     81 
     82     ObjectBaseRef<Type> mAllocType;
     83 
     84 
     85     float color[4];
     86 };
     87 
     88 
     89 }
     90 }
     91 #endif
     92 
     93 
     94