18bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv/*
28bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * Copyright (C) 2016 The Android Open Source Project
38bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv *
48bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * Licensed under the Apache License, Version 2.0 (the "License");
58bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * you may not use this file except in compliance with the License.
68bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * You may obtain a copy of the License at
78bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv *
88bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv *      http://www.apache.org/licenses/LICENSE-2.0
98bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv *
108bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * Unless required by applicable law or agreed to in writing, software
118bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * distributed under the License is distributed on an "AS IS" BASIS,
128bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * See the License for the specific language governing permissions and
148bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv * limitations under the License.
158bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv */
168bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv
178bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv#pragma once
188bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv
198bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv#include "GlesDriver.h"
208bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv
218bd5edf804d5995fe266f3f612b70ee0ee104130sergeyvnamespace android {
228bd5edf804d5995fe266f3f612b70ee0ee104130sergeyvnamespace uirenderer {
238bd5edf804d5995fe266f3f612b70ee0ee104130sergeyvnamespace debug {
248bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv
258bd5edf804d5995fe266f3f612b70ee0ee104130sergeyvtemplate <typename Driver>
268bd5edf804d5995fe266f3f612b70ee0ee104130sergeyvclass ScopedReplaceDriver {
278bd5edf804d5995fe266f3f612b70ee0ee104130sergeyvpublic:
288bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv    ScopedReplaceDriver() {
298bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv        std::unique_ptr<Driver> glDriver = std::make_unique<Driver>();
308bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv        mCurrentDriver = glDriver.get();
318bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv        mOldDriver = GlesDriver::replace(std::move(glDriver));
328bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv    }
338bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv
348bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv    Driver& get() { return *mCurrentDriver; }
358bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv
368bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv    ~ScopedReplaceDriver() {
378bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv        GlesDriver::replace(std::move(mOldDriver));
388bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv    }
398bd5edf804d5995fe266f3f612b70ee0ee104130sergeyvprivate:
408bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv    std::unique_ptr<GlesDriver> mOldDriver;
418bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv    Driver* mCurrentDriver;
428bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv};
438bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv
448bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv} // namespace debug
458bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv} // namespace uirenderer
468bd5edf804d5995fe266f3f612b70ee0ee104130sergeyv} // namespace android
47