Stencil.h revision 0baaac5e9adf3ee280ae1239e2e58754a9d2b099
10baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy/* 20baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Copyright (C) 2012 The Android Open Source Project 30baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * 40baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 50baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * you may not use this file except in compliance with the License. 60baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * You may obtain a copy of the License at 70baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * 80baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 90baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * 100baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Unless required by applicable law or agreed to in writing, software 110baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 120baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * See the License for the specific language governing permissions and 140baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * limitations under the License. 150baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy */ 160baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 170baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#ifndef ANDROID_HWUI_STENCIL_H 180baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#define ANDROID_HWUI_STENCIL_H 190baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 200baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#ifndef LOG_TAG 210baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy #define LOG_TAG "OpenGLRenderer" 220baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#endif 230baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 240baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#include <cutils/compiler.h> 250baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 260baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guynamespace android { 270baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guynamespace uirenderer { 280baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 290baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy/////////////////////////////////////////////////////////////////////////////// 300baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy// Stencil buffer management 310baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy/////////////////////////////////////////////////////////////////////////////// 320baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 330baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guyclass ANDROID_API Stencil { 340baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guypublic: 350baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy Stencil(); 360baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 370baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy /** 380baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Returns the desired size for the stencil buffer. If the returned value 390baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * is 0, then no stencil buffer is required. 400baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy */ 410baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy ANDROID_API static uint32_t getStencilSize(); 420baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 430baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy /** 440baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Clears the stencil buffer. 450baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy */ 460baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy void clear(); 470baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 480baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy /** 490baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Enables stencil test. When the stencil test is enabled the stencil 500baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * buffer is not written into. 510baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy */ 520baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy void enableTest(); 530baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 540baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy /** 550baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Enables stencil write. When stencil write is enabled, the stencil 560baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * test always succeeds and the value 0x1 is written in the stencil 570baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * buffer for each fragment. 580baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy */ 590baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy void enableWrite(); 600baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 610baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy /** 620baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Disables stencil test and write. 630baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy */ 640baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy void disable(); 650baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 660baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy /** 670baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy * Indicates whether either test or write is enabled. 680baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy */ 690baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy bool isEnabled() { 700baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy return mState != kDisabled; 710baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy } 720baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 730baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guyprivate: 740baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy void enable(); 750baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 760baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy enum StencilState { 770baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy kDisabled, 780baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy kTest, 790baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy kWrite 800baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy }; 810baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 820baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy StencilState mState; 830baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 840baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy}; // class Stencil 850baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 860baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy}; // namespace uirenderer 870baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy}; // namespace android 880baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy 890baaac5e9adf3ee280ae1239e2e58754a9d2b099Romain Guy#endif // ANDROID_HWUI_STENCIL_H 90