1 /* 2 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #ifndef COMMON_H 27 #define COMMON_H 28 29 #include <simd/SIMD.h> 30 31 #define PGRAM_VERTEX_COUNT 6 32 #define QUAD_VERTEX_COUNT 4 33 34 enum VertexAttributes { 35 VertexAttributePosition = 0, 36 VertexAttributeTexPos = 1 37 }; 38 39 enum BufferIndex { 40 MeshVertexBuffer = 0, 41 FrameUniformBuffer = 1, 42 MatrixBuffer = 2 43 }; 44 45 struct FrameUniforms { 46 vector_float4 color; 47 }; 48 49 struct TransformMatrix { 50 matrix_float4x4 transformMatrix; 51 }; 52 53 struct GradFrameUniforms { 54 vector_float3 params; 55 vector_float4 color1; 56 vector_float4 color2; 57 }; 58 59 struct Vertex { 60 float position[2]; 61 }; 62 63 struct TxtVertex { 64 float position[2]; 65 float txtpos[2]; 66 }; 67 68 #define INTERPOLATION_NEAREST_NEIGHBOR 0 69 #define INTERPOLATION_BILINEAR 1 70 // NOTE: Metal samplers doesn't supports bicubic interpolation 71 // see table 2.7 from https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf 72 // (probably we need to implement separate fragment shader with bicubic interpolation) 73 74 struct TxtFrameUniforms { 75 vector_float4 color; 76 int mode; // NOTE: consider to use bit fields 77 int isSrcOpaque; 78 int isDstOpaque; 79 float extraAlpha; 80 }; 81 82 struct AnchorData 83 { 84 vector_float3 xParams; 85 vector_float3 yParams; 86 }; 87 88 struct LCDFrameUniforms { 89 vector_float3 src_adj; 90 vector_float3 gamma; 91 vector_float3 invgamma; 92 }; 93 #endif