// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_OUTPUT_GL_RENDERER_DRAW_CACHE_H_ #define CC_OUTPUT_GL_RENDERER_DRAW_CACHE_H_ #include <vector> #include "base/basictypes.h" #include "third_party/skia/include/core/SkColor.h" namespace cc { // Collects 4 floats at a time for easy upload to GL. struct Float4 { float data[4]; }; // Collects 16 floats at a time for easy upload to GL. struct Float16 { float data[16]; }; // A cache for storing textured quads to be drawn. Stores the minimum required // data to tell if two back to back draws only differ in their transform. Quads // that only differ by transform may be coalesced into a single draw call. struct TexturedQuadDrawCache { TexturedQuadDrawCache(); ~TexturedQuadDrawCache(); // Values tracked to determine if textured quads may be coalesced. int program_id; int resource_id; bool needs_blending; SkColor background_color; // Information about the program binding that is required to draw. int uv_xform_location; int background_color_location; int vertex_opacity_location; int matrix_location; int sampler_location; // A cache for the coalesced quad data. std::vector<Float4> uv_xform_data; std::vector<float> vertex_opacity_data; std::vector<Float16> matrix_data; private: DISALLOW_COPY_AND_ASSIGN(TexturedQuadDrawCache); }; } // namespace cc #endif // CC_OUTPUT_GL_RENDERER_DRAW_CACHE_H_