13b20251a355c88193c439f928a84ae69483fb488John Reck/* 23b20251a355c88193c439f928a84ae69483fb488John Reck * Copyright (C) 2014 The Android Open Source Project 33b20251a355c88193c439f928a84ae69483fb488John Reck * 43b20251a355c88193c439f928a84ae69483fb488John Reck * Licensed under the Apache License, Version 2.0 (the "License"); 53b20251a355c88193c439f928a84ae69483fb488John Reck * you may not use this file except in compliance with the License. 63b20251a355c88193c439f928a84ae69483fb488John Reck * You may obtain a copy of the License at 73b20251a355c88193c439f928a84ae69483fb488John Reck * 83b20251a355c88193c439f928a84ae69483fb488John Reck * http://www.apache.org/licenses/LICENSE-2.0 93b20251a355c88193c439f928a84ae69483fb488John Reck * 103b20251a355c88193c439f928a84ae69483fb488John Reck * Unless required by applicable law or agreed to in writing, software 113b20251a355c88193c439f928a84ae69483fb488John Reck * distributed under the License is distributed on an "AS IS" BASIS, 123b20251a355c88193c439f928a84ae69483fb488John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133b20251a355c88193c439f928a84ae69483fb488John Reck * See the License for the specific language governing permissions and 143b20251a355c88193c439f928a84ae69483fb488John Reck * limitations under the License. 153b20251a355c88193c439f928a84ae69483fb488John Reck */ 163b20251a355c88193c439f928a84ae69483fb488John Reck#ifndef RENDERSTATE_H 173b20251a355c88193c439f928a84ae69483fb488John Reck#define RENDERSTATE_H 183b20251a355c88193c439f928a84ae69483fb488John Reck 191d4774233304c484673e2af2c1de2ab41021c979Chris Craik#include <set> 203b20251a355c88193c439f928a84ae69483fb488John Reck#include <GLES2/gl2.h> 213b20251a355c88193c439f928a84ae69483fb488John Reck#include <GLES2/gl2ext.h> 22599e254ea33231b1809466ae765dbee53dc4685cChris Craik#include <utils/Mutex.h> 233b20251a355c88193c439f928a84ae69483fb488John Reck 243b20251a355c88193c439f928a84ae69483fb488John Reck#include <private/hwui/DrawGlInfo.h> 253b20251a355c88193c439f928a84ae69483fb488John Reck 263b20251a355c88193c439f928a84ae69483fb488John Reck#include "Caches.h" 273b20251a355c88193c439f928a84ae69483fb488John Reck#include "utils/Macros.h" 283b20251a355c88193c439f928a84ae69483fb488John Reck 293b20251a355c88193c439f928a84ae69483fb488John Recknamespace android { 303b20251a355c88193c439f928a84ae69483fb488John Recknamespace uirenderer { 313b20251a355c88193c439f928a84ae69483fb488John Reck 323b20251a355c88193c439f928a84ae69483fb488John Recknamespace renderthread { 33443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reckclass CanvasContext; 343b20251a355c88193c439f928a84ae69483fb488John Reckclass RenderThread; 353b20251a355c88193c439f928a84ae69483fb488John Reck} 363b20251a355c88193c439f928a84ae69483fb488John Reck 373b20251a355c88193c439f928a84ae69483fb488John Reck// TODO: Replace Cache's GL state tracking with this. For now it's more a thin 383b20251a355c88193c439f928a84ae69483fb488John Reck// wrapper of Caches for users to migrate to. 393b20251a355c88193c439f928a84ae69483fb488John Reckclass RenderState { 403b20251a355c88193c439f928a84ae69483fb488John Reck PREVENT_COPY_AND_ASSIGN(RenderState); 413b20251a355c88193c439f928a84ae69483fb488John Reckpublic: 423b20251a355c88193c439f928a84ae69483fb488John Reck void onGLContextCreated(); 431d4774233304c484673e2af2c1de2ab41021c979Chris Craik void onGLContextDestroyed(); 443b20251a355c88193c439f928a84ae69483fb488John Reck 453b20251a355c88193c439f928a84ae69483fb488John Reck void setViewport(GLsizei width, GLsizei height); 463b20251a355c88193c439f928a84ae69483fb488John Reck void getViewport(GLsizei* outWidth, GLsizei* outHeight); 473b20251a355c88193c439f928a84ae69483fb488John Reck 483b20251a355c88193c439f928a84ae69483fb488John Reck void bindFramebuffer(GLuint fbo); 493b20251a355c88193c439f928a84ae69483fb488John Reck GLint getFramebuffer() { return mFramebuffer; } 503b20251a355c88193c439f928a84ae69483fb488John Reck 513b20251a355c88193c439f928a84ae69483fb488John Reck void invokeFunctor(Functor* functor, DrawGlInfo::Mode mode, DrawGlInfo* info); 523b20251a355c88193c439f928a84ae69483fb488John Reck 533b20251a355c88193c439f928a84ae69483fb488John Reck void debugOverdraw(bool enable, bool clear); 543b20251a355c88193c439f928a84ae69483fb488John Reck 551d4774233304c484673e2af2c1de2ab41021c979Chris Craik void registerLayer(const Layer* layer) { 5621029ef131d6a98862ae6faf3305bee2872e9c5fChris Craik /* 57599e254ea33231b1809466ae765dbee53dc4685cChris Craik AutoMutex _lock(mLayerLock); 581d4774233304c484673e2af2c1de2ab41021c979Chris Craik mActiveLayers.insert(layer); 5921029ef131d6a98862ae6faf3305bee2872e9c5fChris Craik */ 601d4774233304c484673e2af2c1de2ab41021c979Chris Craik } 611d4774233304c484673e2af2c1de2ab41021c979Chris Craik void unregisterLayer(const Layer* layer) { 6221029ef131d6a98862ae6faf3305bee2872e9c5fChris Craik /* 63599e254ea33231b1809466ae765dbee53dc4685cChris Craik AutoMutex _lock(mLayerLock); 641d4774233304c484673e2af2c1de2ab41021c979Chris Craik mActiveLayers.erase(layer); 6521029ef131d6a98862ae6faf3305bee2872e9c5fChris Craik */ 661d4774233304c484673e2af2c1de2ab41021c979Chris Craik } 671d4774233304c484673e2af2c1de2ab41021c979Chris Craik 68443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck void registerCanvasContext(renderthread::CanvasContext* context) { 69443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck mRegisteredContexts.insert(context); 70443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck } 71443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck 72443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck void unregisterCanvasContext(renderthread::CanvasContext* context) { 73443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck mRegisteredContexts.erase(context); 74443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck } 75443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck 763b20251a355c88193c439f928a84ae69483fb488John Reckprivate: 773b20251a355c88193c439f928a84ae69483fb488John Reck friend class renderthread::RenderThread; 7817035b0211a3c9d45ea46a99217a6acbe76e8fbeJohn Reck friend class Caches; 793b20251a355c88193c439f928a84ae69483fb488John Reck 803b20251a355c88193c439f928a84ae69483fb488John Reck void interruptForFunctorInvoke(); 813b20251a355c88193c439f928a84ae69483fb488John Reck void resumeFromFunctorInvoke(); 823b20251a355c88193c439f928a84ae69483fb488John Reck 833b20251a355c88193c439f928a84ae69483fb488John Reck RenderState(); 843b20251a355c88193c439f928a84ae69483fb488John Reck ~RenderState(); 853b20251a355c88193c439f928a84ae69483fb488John Reck 863b20251a355c88193c439f928a84ae69483fb488John Reck Caches* mCaches; 871d4774233304c484673e2af2c1de2ab41021c979Chris Craik std::set<const Layer*> mActiveLayers; 88443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44John Reck std::set<renderthread::CanvasContext*> mRegisteredContexts; 893b20251a355c88193c439f928a84ae69483fb488John Reck 903b20251a355c88193c439f928a84ae69483fb488John Reck GLsizei mViewportWidth; 913b20251a355c88193c439f928a84ae69483fb488John Reck GLsizei mViewportHeight; 923b20251a355c88193c439f928a84ae69483fb488John Reck GLuint mFramebuffer; 93599e254ea33231b1809466ae765dbee53dc4685cChris Craik Mutex mLayerLock; 943b20251a355c88193c439f928a84ae69483fb488John Reck}; 953b20251a355c88193c439f928a84ae69483fb488John Reck 963b20251a355c88193c439f928a84ae69483fb488John Reck} /* namespace uirenderer */ 973b20251a355c88193c439f928a84ae69483fb488John Reck} /* namespace android */ 983b20251a355c88193c439f928a84ae69483fb488John Reck 993b20251a355c88193c439f928a84ae69483fb488John Reck#endif /* RENDERSTATE_H */ 100