19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2007, The Android Open Source Project
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License.
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**     http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project**
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS,
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* Based on the public domain code:
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Generic Convex Polygon Scan Conversion and Clipping
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by Paul Heckbert
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from "Graphics Gems", Academic Press, 1990
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef POLY_HDR
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define POLY_HDR
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define POLY_NMAX 10		/* max #sides to a polygon; change if needed */
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* note that poly_clip, given an n-gon as input, might output an (n+6)gon */
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* POLY_NMAX=10 is thus appropriate if input polygons are triangles or quads */
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct {		/* A POLYGON VERTEX */
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    float sx, sy, sz, sw;	/* screen space position (sometimes homo.) */
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} Poly_vert;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct {		/* A POLYGON */
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int n;			/* number of sides */
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Poly_vert vert[POLY_NMAX];	/* vertices */
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} Poly;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define POLY_CLIP_OUT 0		/* polygon entirely outside box */
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define POLY_CLIP_PARTIAL 1	/* polygon partially inside */
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define POLY_CLIP_IN 2		/* polygon entirely inside box */
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint	poly_clip_to_frustum(Poly *p1);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} // namespace android
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
52