19c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis/*
29c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Copyright (C) 2012 The Android Open Source Project
39c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis *
49c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Licensed under the Apache License, Version 2.0 (the "License");
59c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * you may not use this file except in compliance with the License.
69c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * You may obtain a copy of the License at
79c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis *
89c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis *      http://www.apache.org/licenses/LICENSE-2.0
99c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis *
109c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Unless required by applicable law or agreed to in writing, software
119c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * distributed under the License is distributed on an "AS IS" BASIS,
129c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * See the License for the specific language governing permissions and
149c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * limitations under the License.
159c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis */
169c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
179c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <stdint.h>
189c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
199c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <EGL/egl.h>
209c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <GLES2/gl2.h>
219c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
229c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <gui/GLConsumer.h>
239c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
249c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisnamespace android {
259c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
269c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#define NELEMS(x) ((int) (sizeof(x) / sizeof((x)[0])))
279c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
289c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisenum { MAX_NUM_LAYERS = 16 };
299c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisenum { MAX_TEST_RUNS = 16 };
309c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
319c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass Composer;
329c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass Renderer;
339c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass GLHelper;
349c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
359c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisstruct LayerDesc {
369c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    uint32_t flags;
379c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    Renderer* (*rendererFactory)();
389c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    Composer* (*composerFactory)();
399c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    int32_t x;
409c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    int32_t y;
419c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    uint32_t width;
429c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    uint32_t height;
439c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis};
449c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
459c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisvoid resetColorGenerator();
469c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
479c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass Composer {
489c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennispublic:
499c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    virtual ~Composer() {}
509c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    virtual bool setUp(const LayerDesc& desc, GLHelper* helper) = 0;
519c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    virtual void tearDown() = 0;
529c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    virtual bool compose(GLuint texName, const sp<GLConsumer>& glc) = 0;
539c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis};
549c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
559c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisComposer* nocomp();
569c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisComposer* opaque();
579c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisComposer* opaqueShrink();
589c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisComposer* blend();
599c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisComposer* blendShrink();
609c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
619c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass Renderer {
629c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennispublic:
639c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    virtual ~Renderer() {}
649c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    virtual bool setUp(GLHelper* helper) = 0;
659c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    virtual void tearDown() = 0;
669c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis    virtual bool render(EGLSurface surface) = 0;
679c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis};
689c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
699c183f2493222000fa512d927cfde3f4c748eda0Jamie GennisRenderer* staticGradient();
709c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis
719c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis} // namespace android
72