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