/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_HWUI_VERTEX_H #define ANDROID_HWUI_VERTEX_H #include "Vector.h" #include "utils/Macros.h" namespace android { namespace uirenderer { /** * Simple structure to describe a vertex with a position and a texture. */ struct Vertex { /** * Fudge-factor used to disambiguate geometry pixel positioning. * * Used to offset lines and points to avoid ambiguous intersection with pixel centers (see * Program::set()), and used to make geometry damage rect calculation conservative (see * Rect::snapGeometryToPixelBoundaries()) */ static float GeometryFudgeFactor() { return 0.0656f; } float x, y; static inline void set(Vertex* vertex, float x, float y) { vertex->x = x; vertex->y = y; } static inline void set(Vertex* vertex, Vector2 val) { set(vertex, val.x, val.y); } static inline void copyWithOffset(Vertex* vertex, const Vertex& src, float x, float y) { set(vertex, src.x + x, src.y + y); } }; // struct Vertex REQUIRE_COMPATIBLE_LAYOUT(Vertex); /** * Simple structure to describe a vertex with a position and texture UV. */ struct TextureVertex { float x, y; float u, v; static inline void set(TextureVertex* vertex, float x, float y, float u, float v) { *vertex = { x, y, u, v }; } static inline void setUV(TextureVertex* vertex, float u, float v) { vertex[0].u = u; vertex[0].v = v; } }; // struct TextureVertex REQUIRE_COMPATIBLE_LAYOUT(TextureVertex); /** * Simple structure to describe a vertex with a position, texture UV and ARGB color. */ struct ColorTextureVertex { float x, y; float u, v; float r, g, b, a; static inline void set(ColorTextureVertex* vertex, float x, float y, float u, float v, int color) { float a = ((color >> 24) & 0xff) / 255.0f; float r = a * ((color >> 16) & 0xff) / 255.0f; float g = a * ((color >> 8) & 0xff) / 255.0f; float b = a * ((color) & 0xff) / 255.0f; *vertex = { x, y, u, v, r, g, b, a }; } }; // struct ColorTextureVertex REQUIRE_COMPATIBLE_LAYOUT(ColorTextureVertex); /** * Simple structure to describe a vertex with a position and an alpha value. */ struct AlphaVertex { float x, y; float alpha; static inline void set(AlphaVertex* vertex, float x, float y, float alpha) { *vertex = { x, y, alpha }; } static inline void copyWithOffset(AlphaVertex* vertex, const AlphaVertex& src, float x, float y) { AlphaVertex::set(vertex, src.x + x, src.y + y, src.alpha); } static inline void setColor(AlphaVertex* vertex, float alpha) { vertex[0].alpha = alpha; } }; // struct AlphaVertex REQUIRE_COMPATIBLE_LAYOUT(AlphaVertex); }; // namespace uirenderer }; // namespace android #endif // ANDROID_HWUI_VERTEX_H