OpenGLRenderer.h revision bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4
1e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy/* 2e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Copyright (C) 2010 The Android Open Source Project 3e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 4e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * you may not use this file except in compliance with the License. 6e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * You may obtain a copy of the License at 7e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 8e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * 10e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * Unless required by applicable law or agreed to in writing, software 11e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * See the License for the specific language governing permissions and 14e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy * limitations under the License. 15e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy */ 16e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 1785bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy#ifndef ANDROID_OPENGL_RENDERER_H 1885bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy#define ANDROID_OPENGL_RENDERER_H 1985bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy 2085bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy#include <SkXfermode.h> 21e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 22bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy#include <utils/RefBase.h> 23bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 24bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy#include "Rect.h" 25bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 26e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guynamespace android { 27e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 28bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guyclass Snapshot: public LightRefBase<Snapshot> { 29bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guypublic: 30bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy Snapshot() { } 31bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 32bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy Snapshot(const sp<Snapshot> s): clipRect(s->clipRect), flags(0), previous(s) { } 33bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 34bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy enum Flags { 35bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy kFlagClipSet = 0x1, 36bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy }; 37bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 38bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy // Clipping rectangle at the time of this snapshot 39bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy Rect clipRect; 40bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 41bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy // Dirty flags 42bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy int flags; 43bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 44bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy // Previous snapshot in the frames stack 45bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy sp<Snapshot> previous; 46bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy}; // struct Snapshot 47bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 4885bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guyclass OpenGLRenderer { 49e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guypublic: 5085bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy OpenGLRenderer(); 5185bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy ~OpenGLRenderer(); 52e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 53e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy void setViewport(int width, int height); 54e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy void prepare(); 5508ae317c21ec3086b5017672bba87420cc38a407Romain Guy 56bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy int getSaveCount() const; 57bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy int save(int flags); 58bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy void restore(); 59bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy void restoreToCount(int saveCount); 60bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 61bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy bool clipRect(float left, float top, float right, float bottom); 62bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 6385bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy void drawColor(int color, SkXfermode::Mode mode); 6485bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy 6508ae317c21ec3086b5017672bba87420cc38a407Romain Guyprivate: 66bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy int saveSnapshot(); 67bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy bool restoreSnapshot(); 68bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 69bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy void setScissorFromClip(); 70bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 71bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy // Dimensions of the drawing surface 72bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy int mWidth, mHeight; 73bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 7485bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy // Matrix used for ortho projection in shaders 7508ae317c21ec3086b5017672bba87420cc38a407Romain Guy float mOrthoMatrix[16]; 76bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 77bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy // Number of saved states 78bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy int mSaveCount; 79bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy // Current state 80bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy sp<Snapshot> mSnapshot; 81bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy}; // class OpenGLRenderer 82e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 83e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy}; // namespace android 84e4d011201cea40d46cb2b2eef401db8fddc5c9c6Romain Guy 8585bf02fc16784d935fb9eebfa9cb20fe46ff7951Romain Guy#endif // ANDROID_OPENGL_RENDERER_H 86