~ppsspp/ppsspp/ppsspp_1.3.0

« back to all changes in this revision

Viewing changes to GPU/Common/SplineCommon.h

  • Committer: Sérgio Benjamim
  • Date: 2017-01-02 00:12:05 UTC
  • Revision ID: sergio_br2@yahoo.com.br-20170102001205-cxbta9za203nmjwm
1.3.0 source (from ppsspp_1.3.0-r160.p5.l1762.a165.t83~56~ubuntu16.04.1.tar.xz).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (c) 2013- PPSSPP Project.
 
2
 
 
3
// This program is free software: you can redistribute it and/or modify
 
4
// it under the terms of the GNU General Public License as published by
 
5
// the Free Software Foundation, version 2.0 or later versions.
 
6
 
 
7
// This program is distributed in the hope that it will be useful,
 
8
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
9
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
10
// GNU General Public License 2.0 for more details.
 
11
 
 
12
// A copy of the GPL 2.0 should have been included with the program.
 
13
// If not, see http://www.gnu.org/licenses/
 
14
 
 
15
// Official git repository and contact information can be found at
 
16
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
 
17
 
 
18
#pragma once
 
19
 
 
20
#include "Common/CommonTypes.h"
 
21
#include "GPU/Math3D.h"
 
22
#include "GPU/ge_constants.h"
 
23
 
 
24
// PSP compatible format so we can use the end of the pipeline in beziers etc
 
25
struct SimpleVertex {
 
26
        float uv[2];
 
27
        union {
 
28
                u8 color[4];
 
29
                u32_le color_32;
 
30
        };
 
31
        Vec3Packedf nrm;
 
32
        Vec3Packedf pos;
 
33
};
 
34
 
 
35
// We decode all vertices into a common format for easy interpolation and stuff.
 
36
// Not fast but can be optimized later.
 
37
struct BezierPatch {
 
38
        SimpleVertex *points[16];
 
39
 
 
40
        // These are used to generate UVs.
 
41
        int u_index, v_index;
 
42
 
 
43
        int index;
 
44
        GEPatchPrimType primType;
 
45
        bool computeNormals;
 
46
        bool patchFacing;
 
47
};
 
48
 
 
49
struct SplinePatchLocal {
 
50
        SimpleVertex **points;
 
51
        int tess_u;
 
52
        int tess_v;
 
53
        int count_u;
 
54
        int count_v;
 
55
        int type_u;
 
56
        int type_v;
 
57
        bool computeNormals;
 
58
        bool patchFacing;
 
59
        GEPatchPrimType primType;
 
60
};
 
61
 
 
62
enum SplineQuality {
 
63
        LOW_QUALITY = 0,
 
64
        MEDIUM_QUALITY = 1,
 
65
        HIGH_QUALITY = 2,
 
66
};
 
67
 
 
68
void TesselateSplinePatch(u8 *&dest, u16 *indices, int &count, const SplinePatchLocal &spatch, u32 origVertType, int maxVertices);
 
69
void TesselateBezierPatch(u8 *&dest, u16 *&indices, int &count, int tess_u, int tess_v, const BezierPatch &patch, u32 origVertType, int maxVertices);