X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fscene3d-view%2Fgltf-loader.cpp;h=55dfd8d739c12323200b12c6baa81928c3a3a952;hp=95f54f1bd676529ce1c760f375ee066e039d864b;hb=bee78157f19fa54ae961081782a2f6537cc8dd5a;hpb=f2039d47f9bed8104575da80a2ecf0bb6e37ff8d diff --git a/dali-toolkit/internal/controls/scene3d-view/gltf-loader.cpp b/dali-toolkit/internal/controls/scene3d-view/gltf-loader.cpp index 95f54f1..55dfd8d 100644 --- a/dali-toolkit/internal/controls/scene3d-view/gltf-loader.cpp +++ b/dali-toolkit/internal/controls/scene3d-view/gltf-loader.cpp @@ -231,21 +231,20 @@ void FitBuffer(Dali::Vector& bufferDestination, Dali::Vector& buffer template bool ReadBinFile(Vector& dataBuffer, std::string url, int32_t offset, int32_t count) { + size_t readCount = 0; Dali::FileStream fileStream(url, FileStream::READ | FileStream::BINARY); FILE* fp = fileStream.GetFile(); - if(!fp) + if(fp) { - return false; - } - - dataBuffer.Resize(count); - ssize_t result = -1; - if(!fseek(fp, offset, SEEK_SET)) - { - result = fread(&dataBuffer[0], sizeof(T), count, fp); + dataBuffer.Resize(count); + if(!fseek(fp, offset, SEEK_SET)) + { + readCount = fread(&dataBuffer[0], sizeof(T), count, fp); + dataBuffer.Resize(readCount); + } } - return (result >= 0); + return (readCount > 0); } template @@ -301,38 +300,50 @@ void LoadDataFromAccessor(int32_t accessorIdx, Dali::Vector& bufferData, std: if(accessor.componentType == 5120) { Dali::Vector inputBufferData; - ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count); - FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + if(ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count)) + { + FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + } } else if(accessor.componentType == 5121) { Dali::Vector inputBufferData; - ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count); - FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + if(ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count)) + { + FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + } } else if(accessor.componentType == 5122) { Dali::Vector inputBufferData; - ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count); - FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + if(ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count)) + { + FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + } } else if(accessor.componentType == 5123) { Dali::Vector inputBufferData; - ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count); - FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + if(ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count)) + { + FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + } } else if(accessor.componentType == 5125) { Dali::Vector inputBufferData; - ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count); - FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + if(ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count)) + { + FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + } } else if(accessor.componentType == 5126) { Dali::Vector inputBufferData; - ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count); - FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + if(ReadBinFile(inputBufferData, path + load_uri, bufferView.byteOffset + accessor.byteOffset, elementNumOfByteStride * accessor.count)) + { + FitBuffer(bufferData, inputBufferData, accessor.count, elementNumOfByteStride, accessor.normalized); + } } } @@ -1498,7 +1509,7 @@ Actor Loader::AddNode(Scene3dView& scene3dView, uint32_t index) VERTEX_SHADER += SHADER_GLTF_PHYSICALLY_BASED_SHADER_VERT.data(); FRAGMENT_SHADER = SHADER_GLTF_GLES_VERSION_300_DEF.data(); - bool useIBL = (scene3dView.GetLightType() >= Toolkit::Scene3dView::LightType::IMAGE_BASED_LIGHT); + bool useIBL = scene3dView.HasImageBasedLighting(); if(isMaterial) { MaterialInfo materialInfo = mMaterialArray[meshInfo.materialsIdx]; @@ -1581,11 +1592,14 @@ Actor Loader::AddNode(Scene3dView& scene3dView, uint32_t index) actor.RotateBy(orientation); actor.SetProperty(Actor::Property::POSITION, translation); - shader.RegisterProperty("uLightType", (scene3dView.GetLightType() & ~Toolkit::Scene3dView::LightType::IMAGE_BASED_LIGHT)); + float hasLightSource = static_cast(!!(scene3dView.GetLightType() & (Toolkit::Scene3dView::LightType::POINT_LIGHT | Toolkit::Scene3dView::LightType::DIRECTIONAL_LIGHT))); + float isPointLight = static_cast(!!(scene3dView.GetLightType() & Toolkit::Scene3dView::LightType::POINT_LIGHT)); + shader.RegisterProperty("uHasLightSource", hasLightSource); + shader.RegisterProperty("uIsPointLight", isPointLight); shader.RegisterProperty("uLightVector", scene3dView.GetLightVector()); shader.RegisterProperty("uLightColor", scene3dView.GetLightColor()); - actor.RegisterProperty("uIsColor", meshInfo.attribute.COLOR.size() > 0); + actor.RegisterProperty("uHasVertexColor", meshInfo.attribute.COLOR.size() > 0 ? 1.0f : 0.0f); if(isMaterial) { MaterialInfo materialInfo = mMaterialArray[meshInfo.materialsIdx]; @@ -1594,15 +1608,15 @@ Actor Loader::AddNode(Scene3dView& scene3dView, uint32_t index) if(materialInfo.alphaMode == "OPAQUE") { - actor.RegisterProperty("alphaMode", 0); + actor.RegisterProperty("uAlphaMode", 0.0f); } else if(materialInfo.alphaMode == "MASK") { - actor.RegisterProperty("alphaMode", 1); + actor.RegisterProperty("uAlphaMode", 1.0f); } else { - actor.RegisterProperty("alphaMode", 2); + actor.RegisterProperty("uAlphaMode", 2.0f); } actor.RegisterProperty("alphaCutoff", materialInfo.alphaCutoff);