1 /*---------------------------------------------------------------------------*
2 Project: NintendoWare
3 File: gfx_ResLookupTable.cpp
4
5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Revision: 17861 $
14 *---------------------------------------------------------------------------*/
15
16 #include "../precompiled.h"
17
18 #include <nw/gfx/res/gfx_ResLookupTable.h>
19
20 namespace nw {
21 namespace gfx {
22 namespace res {
23
24 typedef void (*ActivateFunc)(ResTexture resTex, RenderContext& context);
25 typedef void (*CleanupFunc)(ResLookupTable resLut);
26 typedef Result (*SetupFunc)(ResLookupTable resLut);
27
28 static void ResImageLut_Cleanup(ResLookupTable resLut);
29 static void ResReferenceLut_Cleanup(ResLookupTable resLut);
30
31 static Result ResImageLut_Setup(ResLookupTable resLut);
32 static Result ResReferenceLut_Setup(ResLookupTable resLut);
33
34 static SetupFunc s_LutSetupTable[] =
35 {
36 ResImageLut_Setup,
37 ResReferenceLut_Setup
38 };
39
40 static CleanupFunc s_LutCleanupTable[] =
41 {
42 ResImageLut_Cleanup,
43 ResReferenceLut_Cleanup
44 };
45
46 //----------------------------------------
47 static Result
ResImageLut_Setup(ResLookupTable resLut)48 ResImageLut_Setup(ResLookupTable resLut)
49 {
50 Result result = RESOURCE_RESULT_OK;
51
52 NW_UNUSED_VARIABLE(resLut);
53
54 return result;
55 }
56
57
58 //----------------------------------------
59 static Result
ResReferenceLut_Setup(ResLookupTable resLut)60 ResReferenceLut_Setup(ResLookupTable resLut)
61 {
62 Result result = RESOURCE_RESULT_OK;
63
64 result |= ResImageLut_Setup(resLut.Dereference());
65
66 return result;
67 }
68
69 //----------------------------------------
70 static void
ResImageLut_Cleanup(ResLookupTable resLut)71 ResImageLut_Cleanup(ResLookupTable resLut)
72 {
73 ResImageLookupTable imageLut = ResStaticCast<ResImageLookupTable>( resLut );
74
75 GraphicsDevice::InvalidateLookupTable(imageLut);
76 }
77
78
79 //----------------------------------------
80 static void
ResReferenceLut_Cleanup(ResLookupTable resLut)81 ResReferenceLut_Cleanup(ResLookupTable resLut)
82 {
83 NW_UNUSED_VARIABLE(resLut);
84 NW_ASSERT(resLut.IsValid());
85 }
86
87 //----------------------------------------------------------------------------
88 Result
Setup()89 ResLookupTable::Setup()
90 {
91 NW_ASSERT( this->IsValid() );
92
93 Result result = RESOURCE_RESULT_OK;
94
95 switch ( this->ref().typeInfo )
96 {
97 case ResImageLookupTable::TYPE_INFO:
98 {
99 result |= s_LutSetupTable[0]( *this );
100 }
101 break;
102 case ResReferenceLookupTable::TYPE_INFO:
103 {
104 result |= s_LutSetupTable[1]( *this );
105 }
106 break;
107 default:
108 {
109 NW_FATAL_ERROR("Unsupported lut type.");
110 }
111 }
112
113 return result;
114 }
115
116 //----------------------------------------
117 void
Cleanup()118 ResLookupTable::Cleanup()
119 {
120 switch ( this->ref().typeInfo )
121 {
122 case ResImageLookupTable::TYPE_INFO:
123 {
124 s_LutCleanupTable[0]( *this );
125 }
126 break;
127 case ResReferenceLookupTable::TYPE_INFO:
128 {
129 s_LutCleanupTable[1]( *this );
130 }
131 break;
132 default:
133 {
134 NW_FATAL_ERROR("Unsupported lut type.");
135 }
136 }
137 }
138
139 //----------------------------------------
140 Result
Setup(os::IAllocator * allocator,ResGraphicsFile graphicsFile)141 ResLookupTableSet::Setup(os::IAllocator* allocator, ResGraphicsFile graphicsFile)
142 {
143 NW_UNUSED_VARIABLE(allocator);
144 NW_UNUSED_VARIABLE(graphicsFile);
145 NW_ASSERT( internal::ResCheckRevision( *this ) );
146
147 Result result = RESOURCE_RESULT_OK;
148
149 s32 samplerNum = this->GetSamplersCount();
150 for ( int i = 0; i < samplerNum; ++i )
151 {
152 result |= this->GetSamplers( i ).Setup();
153 }
154
155 return result;
156 }
157
158 //----------------------------------------
159 void
Cleanup()160 ResLookupTableSet::Cleanup()
161 {
162 ut::SafeCleanupAll(this->GetSamplers());
163 }
164
165 } /* namespace res */
166 } /* namespace gfx */
167 } /* namespace nw */
168
169