1 /*
2 Copyright (C) 2005-2007 Feeling Software Inc.
3 Portions of the code are:
4 Copyright (C) 2005-2007 Sony Computer Entertainment America
5
6 MIT License: http://www.opensource.org/licenses/mit-license.php
7 */
8
9 #include "StdAfx.h"
10 #include "FCDocument/FCDocument.h"
11 #include "FCDocument/FCDEffectPass.h"
12 #include "FCDocument/FCDEffectProfile.h"
13 #include "FCDocument/FCDEffectTechnique.h"
14 #include "FCDocument/FCDEffectParameter.h"
15 #include "FCDocument/FCDEffectParameterSurface.h"
16 #include "FCDocument/FCDEffectParameterSampler.h"
17 #include "FCDocument/FCDImage.h"
18
19 //
20 // FCDEffectParameterSampler
21 //
22
23 ImplementObjectType(FCDEffectParameterSampler);
24 ImplementParameterObjectNoCtr(FCDEffectParameterSampler, FCDEffectParameterSurface, surface);
25
FCDEffectParameterSampler(FCDocument * document)26 FCDEffectParameterSampler::FCDEffectParameterSampler(FCDocument* document)
27 : FCDEffectParameter(document)
28 , InitializeParameter(samplerType, SAMPLER2D)
29 , InitializeParameterNoArg(surface)
30 , InitializeParameter(wrap_s, FUDaeTextureWrapMode::DEFAULT)
31 , InitializeParameter(wrap_t, FUDaeTextureWrapMode::DEFAULT)
32 , InitializeParameter(wrap_p, FUDaeTextureWrapMode::DEFAULT)
33 , InitializeParameter(minFilter, FUDaeTextureFilterFunction::DEFAULT)
34 , InitializeParameter(magFilter, FUDaeTextureFilterFunction::DEFAULT)
35 , InitializeParameter(mipFilter, FUDaeTextureFilterFunction::DEFAULT)
36 {
37 }
38
~FCDEffectParameterSampler()39 FCDEffectParameterSampler::~FCDEffectParameterSampler()
40 {
41 }
42
43 // Sets the surface parameter for the surface to sample.
SetSurface(FCDEffectParameterSurface * _surface)44 void FCDEffectParameterSampler::SetSurface(FCDEffectParameterSurface* _surface)
45 {
46 surface = _surface;
47 SetNewChildFlag();
48 }
49
50 // compare value
IsValueEqual(FCDEffectParameter * parameter)51 bool FCDEffectParameterSampler::IsValueEqual(FCDEffectParameter* parameter)
52 {
53 if (!FCDEffectParameter::IsValueEqual(parameter)) return false;
54 if (parameter->GetObjectType() != FCDEffectParameterSampler::GetClassType()) return false;
55 FCDEffectParameterSampler *param = (FCDEffectParameterSampler*)parameter;
56
57 if (GetSamplerType() != param->GetSamplerType()) return false;
58 if (param->GetSurface() == NULL && surface == NULL) {}
59 else if (param->GetSurface() == NULL || surface == NULL) return false;
60 else if (!IsEquivalent(param->GetSurface()->GetReference(), surface->GetReference())) return false;
61
62 return true;
63 }
64
65 // Clone
Clone(FCDEffectParameter * _clone) const66 FCDEffectParameter* FCDEffectParameterSampler::Clone(FCDEffectParameter* _clone) const
67 {
68 FCDEffectParameterSampler* clone = NULL;
69 if (_clone == NULL) _clone = clone = new FCDEffectParameterSampler(const_cast<FCDocument*>(GetDocument()));
70 else if (_clone->GetObjectType() == FCDEffectParameterSampler::GetClassType()) clone = (FCDEffectParameterSampler*) _clone;
71
72 if (_clone != NULL) FCDEffectParameter::Clone(_clone);
73 if (clone != NULL)
74 {
75 clone->surface = const_cast<FCDEffectParameterSurface*>((const FCDEffectParameterSurface*)(surface));
76 clone->samplerType = samplerType;
77 }
78 return _clone;
79 }
80
81 // Flattening: overwrite the target parameter with this parameter
Overwrite(FCDEffectParameter * target)82 void FCDEffectParameterSampler::Overwrite(FCDEffectParameter* target)
83 {
84 if (target->GetType() == SAMPLER)
85 {
86 FCDEffectParameterSampler* s = (FCDEffectParameterSampler*) target;
87 if (samplerType == s->samplerType)
88 {
89 s->surface = surface;
90 SetNewChildFlag();
91 }
92 }
93 }
94