Cycles: Add fundamentals to test constant folding
[blender.git] / intern / cycles / subd / subd_patch.h
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __SUBD_PATCH_H__
18 #define __SUBD_PATCH_H__
19
20 #include "util_boundbox.h"
21 #include "util_types.h"
22
23 CCL_NAMESPACE_BEGIN
24
25 class Patch {
26 public:
27         virtual ~Patch() {}
28         virtual void eval(float3 *P, float3 *dPdu, float3 *dPdv, float3 *N, float u, float v) = 0;
29         virtual BoundBox bound() = 0;
30         virtual int ptex_face_id() { return -1; }
31
32         int patch_index;
33         int shader;
34 };
35
36 /* Linear Quad Patch */
37
38 class LinearQuadPatch : public Patch {
39 public:
40         float3 hull[4];
41         float3 normals[4];
42
43         void eval(float3 *P, float3 *dPdu, float3 *dPdv, float3 *N, float u, float v);
44         BoundBox bound();
45 };
46
47 /* Bicubic Patch */
48
49 class BicubicPatch : public Patch {
50 public:
51         float3 hull[16];
52
53         void eval(float3 *P, float3 *dPdu, float3 *dPdv, float3 *N, float u, float v);
54         BoundBox bound();
55 };
56
57 CCL_NAMESPACE_END
58
59 #endif /* __SUBD_PATCH_H__ */
60