1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"[]> 2<html xml:lang="en-US" lang="en-US"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta http-equiv="Content-Style-Type" content="text/css" /> 6 <link rel="stylesheet" href="../../css/document.css" type="text/css" /> 7 <title>About Binary Resources</title> 8 </head> 9 <body> 10 <h1>About Binary Resources</h1> 11 12 <h2>Setup and Cleanup</h2> 13 <div class="section"> 14 <p> 15 Binary resources are loaded from their files as <a href="../../nw/gfx/res/ResGraphicsFile/Overview.html"><CODE>ResGraphicsFile</CODE></a> objects. You must run <CODE>Setup</CODE> before creating instances of the <CODE>Model</CODE> or other items from the loaded <CODE>ResGraphicsFile</CODE>. For the setup, use the <a href="../../nw/gfx/res/ResGraphicsFile/Setup.html"><CODE>Setup</CODE></a> for <CODE>ResGraphicsFile</CODE>, or the <a href="../../nw/gfx/res/ResModel/Setup.html"><CODE>Setup</CODE></a> for <CODE>ResModel</CODE>. The main setup processes are as follows. 16 <ol> 17 <li>Resolving references to shaders, textures, and lookup tables</li> 18 <li>VRAM transfer for textures and vertex streams</li> 19 <li>Generating rendering and shader commands</li> 20 <li>Checking for data errors</li> 21 </ol> 22 23 <p class="info"> 24 After a properly setup binary resource is no longer needed, you must run <CODE>Cleanup</CODE> and then release it. 25 </p> 26 </p> 27 </div> 28 29 <h2>Process According to Setup Results</h2> 30 <div class="section"> 31 <p> 32 Running <CODE>Setup</CODE> on a binary resource returns a <a href="../../nw/gfx/Result/Overview.html"><CODE>Result</CODE></a>. The <CODE>Result</CODE> from <CODE>Setup</CODE> is a <a href="../../nw/gfx/ResourceResult.html"><CODE>ResourceResult</CODE></a> object. Error handling would look like the following. <br /> 33 <ul> 34 <li> 35 Inadequate resources to resolve references 36 <ul> 37 <li><CODE>RESOURCE_RESULT_NOT_FOUND_TEXTURE</CODE></li> 38 <li><CODE>RESOURCE_RESULT_NOT_FOUND_SHADER</CODE></li> 39 <li><CODE>RESOURCE_RESULT_NOT_FOUND_LUT</CODE></li> 40 </ul> 41 Call <CODE>Setup</CODE> again, passing <a href="../../nw/gfx/res/ResGraphicsFile/Overview.html"><CODE>ResGraphicsFile</CODE></a> as an argument. 42 </li> 43 <li> 44 Inconsistencies in materials during <CODE>Setup</CODE> 45 <ul> 46 <li><CODE>RESOURCE_RESULT_IRRELEVANT_LOCATION_LUT</CODE></li> 47 <li>RESOURCE_RESULT_IRRELEVANT_LOCATION_SHADER_SYMBOL</li> 48 <li><CODE>RESOURCE_RESULT_IRRELEVANT_TEXTURE_MAPPING_METHOD</CODE></li> 49 </ul> 50 Review the data, as the display results might be different from the expected results. 51 </li> 52 </ul> 53 </p> 54 </div> 55 56 <h2>Change Binary Resource Values</h2> 57 <div class="section"> 58 <p> 59 You can change binary resource values via the <CODE>Res*</CODE> class accessor. However, when changing values, you must also set the hash to <CODE>0</CODE>. The following table shows how class and variable names correspond to hashes. 60 <table> 61 <tr> 62 <th>Class / Var Name</th> 63 <th>Hash</th> 64 </tr> 65 <tr> 66 <td><CODE>ResMaterial::m_Flags</CODE></td> 67 <td><CODE>ShadingParameterHash</CODE></td> 68 </tr> 69 <tr> 70 <td><CODE>ResShaderParameter</CODE></td> 71 <td><CODE>ShaderParametersHash</CODE></td> 72 </tr> 73 <tr> 74 <td><CODE>ResTextureCoordinator</CODE></td> 75 <td><CODE>TextureCoordinatorsHash</CODE></td> 76 </tr> 77 <tr> 78 <td><CODE>ResPixelBasedTextureMapper</CODE>, <CODE>ResStandardTextureSampler</CODE></td> 79 <td><CODE>TextureMappersHash</CODE></td> 80 </tr> 81 <tr> 82 <td><CODE>ResMaterialColor</CODE></td> 83 <td><CODE>MaterialColorHash</CODE></td> 84 </tr> 85 <tr> 86 <td><CODE>ResRasterization</CODE></td> 87 <td><CODE>RasterizationHash</CODE></td> 88 </tr> 89 <tr> 90 <td><CODE>ResFragmentLighting</CODE></td> 91 <td><CODE>FragmentLightingHash</CODE></td> 92 </tr> 93 <tr> 94 <td><CODE>ResFragmentLightingTable</CODE></td> 95 <td><CODE>FragmentLightingTableHash</CODE></td> 96 </tr> 97 <tr> 98 <td><CODE>ResAlphaTest</CODE></td> 99 <td><CODE>AlphaTestHash</CODE></td> 100 </tr> 101 <tr> 102 <td><CODE>ResTextureCombiner</CODE></td> 103 <td><CODE>TextureCombinersHash</CODE></td> 104 </tr> 105 <tr> 106 <td><CODE>ResFragmentOperation</CODE></td> 107 <td><CODE>FragmentOperationHash</CODE></td> 108 </tr> 109 </table> 110 </p> 111 </div> 112 <h2 id="transfer_vram">Users Handling VRAM Transfers</h2> 113 <div class="section"> 114 <p> 115 When running <CODE>Setup</CODE> using multiple threads, the user must handle VRAM transfers. Handling all VRAM transfers at once is also more efficient than dealing with VRAM transfers within <CODE>Setup</CODE>. The process is as follows. 116 <ol> 117 <li> 118 Get the texture or vertex image data block. 119 <pre> 120nw::gfx::ResGraphicsFile resFile = resourceSet->resource; 121void* imageData = resFile.GetImageBlockData(); 122 </pre> 123 </li> 124 125 <li> 126 Bundle the textures or vertices and transfer to VRAM. 127 <pre> 128s32 size = resFile.GetImageBlockDataSize(); 129 130void* vramAddr = nw::demo::AllocateGraphicsMemory(NN_GX_MEM_VRAMA, NN_GX_MEM_TEXTURE, 0, size); 131 132// Flush the data cache and transfer to VRAM. 133nngxUpdateBuffer( imageData, size ); 134nngxAddVramDmaCommand( imageData, vramAddr, size ); 135 </pre> 136 </li> 137 <li> 138 Set the address of the transferred image data to the resource before running <CODE>Setup</CODE>. 139 <pre> 140nw::gfx::TransferedVramAddressSetter locationSetter( imageData, vramAddr ); 141resFile.ForeachTexture(locationSetter); 142resFile.ForeachIndexStream(locationSetter); 143resFile.ForeachVertexStream(locationSetter); 144 </pre> 145 </li> 146 </ol> 147 </p> 148 </div> 149 <hr><p>CONFIDENTIAL</p></body> 150</html>