Migration Guide

Following an overview about interface changes between Candera V3.0.1 and Candera V3.0.2. 
 
 
 
 
 
 Description 
 Candera V3.0.1 
 Candera V3.0.2 
 
 
 Shader Resource Object 
 const void* fragmentShader = shader->GetFragmentShader(); const void* vertexShader = shader->GetVertexShader(); 
 
 Shader::ShaderResource fragmentShaderResource(shader->GetFragmentShaderResourceHandle()); const void* fragmentShader = fragmentShaderResource.GetData(); 
 Shader::ShaderResource vertexShaderResource(shader->GetVertexShaderResourceHandle()); const void* vertexShader = vertexShaderResource.GetData(); 
 NOTE: data is guaranteed only until ShaderResource objects are destroyed by going out of scope. 
 
 
 
 Vertex Geometry Resource Object 
 
 bool isGeometryMutable = vg->IsMutable(); 
 const void* vertexArray = vg->GetVertexArray(); void* vertexArray = vg->GetVertexArray(); 
 const UINT16* indexArray = vg->GetIndexBuffer(); UINT16* indexArray = vg->GetIndexBuffer(); 
 const VertexGeometry::VertexElementFormat * formatArray = vg->GetVertexElementFormat(); VertexGeometry::VertexElementFormat * formatArray = vg->GetVertexElementFormat(); 
 
 
 bool isVertexArrayMutable = vg->GetVertexArrayResourceHandle().m_isMutable; VertexGeometry::VertexArrayResource vertexArrayResource(vg->GetVertexArrayResourceHandle()); const void* vertexArray = vertexArrayResource.GetData(); void* vertexArray = vertexArrayResource.GetMutableData(); 
 bool isIndexArrayMutable = vg->GetIndexArrayResourceHandle().m_isMutable; VertexGeometry::IndexArrayResource indexArrayResource(vg->GetIndexArrayResourceHandle()); const void* indexArray = indexArrayResource.GetData(); void* indexArray = indexArrayResource.GetMutableData(); 
 bool isFormatArrayMutable = vg->GetFormatArrayResourceHandle().m_isMutable; VertexGeometry::FormatArrayResource formatArrayResource(vg->GetFormatArrayResourceHandle()); const VertexGeometry::VertexElementFormat * formatArray = formatArrayResource.GetData(); VertexGeometry::VertexElementFormat * formatArray = formatArrayResource.GetMutableData(); 
 NOTE: data is guaranteed only until resource objects are destroyed by going out of scope. 
 
 
 
 Bitmap Resource Object 
 bool isMutable = bitmap->IsMutable(); const void* pixels = bitmap->GetPixels(); void* pixels = bitmap->GetPixels(); 
 
 bool isMutable = bitmap->GetPixelsResourceHandle().m_isMutable; Bitmap::PixelsResource pixlesResource(bitmap->GetPixelsResourceHandle()); const void* pixels = pixlesResource.GetData(); void* pixels = pixlesResource.GetMutableData(); 
 NOTE: data is guaranteed only until resource objects are destroyed by going out of scope. 
 
 
 
 Font/Raw Resource Object 
 ResourceHandle fontHandle = provider->OpenFontResourceById(fontId); if (fontHandle != 0) { UInt32 fontSize = provider->GetResourceSize(fontHandle); const void* fontAdress = provider->GetResourceAddress(fontHandle); provider->ReadResource(fontHandle, fontData, 0, fontSize); provider->CloseResource(fontHandle); } 
 
 ResourceDataHandle fontHandle = provider->GetFontResourceById(fontId); UInt32 fontSize = fontHandle.m_size; const void* fontAddress = ResourceData::GetAddress(fontHandle); ResourceData::CopyData(fontData, fontHandle, 0, fontSize); 
 NOTE: data is guaranteed only until resource objects are destroyed by going out of scope. 
 
 
 
 VertexBuffer Primitive Iteration 
 VertexBuffer* vb; const VertexBuffer::Triangle* triangle = vb->GetFirstTriangle(); while (triangle != 0) { UInt16 x = triangle->index[0]; UInt16 y = triangle->index[1]; UInt16 z = triangle->index[2]; triangle = vb->GetNextTriangle(); } 
 VertexBuffer* vb; for ( VertexBuffer::PrimitiveIterator it = vb->GetPrimitiveIterator(); it.IsValid(); ++it) { const VertexBuffer::Primitive & primitive = *it; UInt16 x = primitive.m_index[0]; UInt16 y = primitive.m_index[1]; UInt16 z = primitive.m_index[2]; } 
 
 
 VertexBuffer Vertex access 
 VertexBuffer* vb; const void* vertex = vb->GetVertex(0); void* mutableVertex = vb->GetMutableVertex(0); 
 VertexAccessor accessor( VertexAccessor (*vb->GetVertexGeometry())); const void* vertex = accessor.GetVertex(0); void* mutableVertex = accessor.GetMutableVertex(0); 
 
 
 VertexElementFormat access 
 VertexGeometry* vg; bool isPosition = vg->DoesVertexUsageExistAtUsageIndex(VertexGeometry::Position, 0); const VertexGeometry::VertexElementFormat * positionElementFormat = vg->GetVertexElementFormatAtUsageAndUsageIndex(VertexGeometry::Position, 0); 
 VertexGeometry* vg; ElementFormatAccessor accessor = ElementFormatAccessor(*vg); bool isPosition = (accessor.GetElementFormatByUsageAndIndex(VertexGeometry::Position, 0) != 0); const VertexGeometry::VertexElementFormat * positionElementFormat = accessor.GetElementFormatByUsageAndIndex(VertexGeometry::Position, 0); 
 
 
 Shader Upload 
 const void* fragmentShader = shader->GetFragmentShader(); const void* vertexShader = shader->GetVertexShader(); Handle fragmentShaderHandle; Handle vertexShaderHandle; CompileAndLoadShaderPair(vertexShader, vertexShaderHandle, fragmentShader, fragmentShaderHandle); 
 
 const void* fragmentShader = shader->GetFragmentShader(); const void* vertexShader = shader->GetVertexShader(); Handle fragmentShaderHandle; Handle vertexShaderHandle; Shader::BuildType buildType; GetShaderBuildType(vertexShader, buildType); if (buildType == Shader::ShaderSource ) { UploadShaderSource(Shader::VertexShader, vertexShader, vertexShaderHandle); } else { ... } GetShaderBuildType(fragmentShader, buildType); if (buildType == Shader::ShaderSource ) { UploadShaderSource(Shader::FragmentShader, fragmentShader, fragmentShaderHandle); } else { ... } 
 Note: This is normally done transparently by Candera . 
 
  