Example #1
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        GameObject parentObj = gameObj as GameObject;

        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        bool hasChildren = reader.ReadBoolean();  // _children

        if (hasChildren)
        {
            uint numChildren = reader.ReadUInt32();
            long blockSize   = ReadBracket(reader, owner);
            for (uint i = 0; i < numChildren; ++i)
            {
                GameObject children = new GameObject("Child_" + i.ToString());
                if (parentObj && LoadObject(children, reader, owner))
                {
                    children.transform.SetParent(parentObj.transform, false);
                }
            }
        }
        return(true);
    }
Example #2
0
 void readMaterialProperty(Object gameObj, BinaryReader reader, ReaderOSGB owner)
 {
     bool    frontAndBack = reader.ReadBoolean();
     Vector4 frontProp    = new Vector4(
         reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
     Vector4 backProp = new Vector4(
         reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
 }
Example #3
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        bool hasInitBound = reader.ReadBoolean();  // _initialBound

        if (hasInitBound)
        {
            long    blockSize  = ReadBracket(reader, owner);
            Vector3 boudCenter = new Vector3(
                (float)reader.ReadDouble(), (float)reader.ReadDouble(), (float)reader.ReadDouble());
            double radius = reader.ReadDouble();
        }

        bool hasComputeBoundCB = reader.ReadBoolean();  // _computeBoundCallback

        if (hasComputeBoundCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasUpdateCB = reader.ReadBoolean();  // _updateCallback

        if (hasUpdateCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasEventCB = reader.ReadBoolean();  // _eventCallback

        if (hasEventCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasCullCB = reader.ReadBoolean();  // _cullCallback

        if (hasCullCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool cullingActive = reader.ReadBoolean(); // _cullingActive
        int  nodeMask      = reader.ReadInt32();   // _nodeMask

        bool hasStateSet = reader.ReadBoolean();   // _stateset

        if (hasStateSet)
        {
            LoadObject(gameObj, reader, owner);
        }

        return(true);
    }
Example #4
0
    void readArrayListData(string name, Mesh mesh, BinaryReader reader, ReaderOSGB owner)
    {
        uint numArrayData = reader.ReadUInt32();
        long blockSize    = ReadBracket(reader, owner);

        for (uint i = 0; i < numArrayData; ++i)
        {
            blockSize = ReadBracket(reader, owner);
            readArrayData(name + i.ToString(), mesh, reader, owner);
        }
    }
Example #5
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        GameObject parentObj = gameObj as GameObject;

        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        PagedData pagedData = parentObj.AddComponent <PagedData>();

        pagedData._mainReader = owner;

        int centerMode = reader.ReadInt32();       // _centerMode

        bool hasUserCenter = reader.ReadBoolean(); // _userDefinedCenter, _radius

        if (hasUserCenter)
        {
            double centerX = reader.ReadDouble();
            double centerY = reader.ReadDouble();
            double centerZ = reader.ReadDouble();
            double radius  = reader.ReadDouble();

            pagedData._bounds = new BoundingSphere(
                new Vector3((float)centerX, (float)centerY, (float)centerZ), (float)radius);
        }
        // TODO: _bounds in default center mode?

        int rangeMode = reader.ReadInt32();  // _rangeMode

        pagedData._rangeMode = (rangeMode > 0)
                             ? PagedData.RangeMode.PixelSize : PagedData.RangeMode.Distance;

        bool hasRanges = reader.ReadBoolean();  // _rangeList

        if (hasRanges)
        {
            uint numRanges = reader.ReadUInt32();
            long blockSize = ReadBracket(reader, owner);
            for (uint i = 0; i < numRanges; ++i)
            {
                float minR = reader.ReadSingle();
                float maxR = reader.ReadSingle();
                pagedData._ranges.Add(new Vector2(minR, maxR));
            }
        }

        return(true);
    }
Example #6
0
    void readArrayData(string name, Mesh mesh, BinaryReader reader, ReaderOSGB owner)
    {
        long blockSize = ReadBracket(reader, owner);
        bool hasArray  = reader.ReadBoolean();

        if (hasArray)
        {
            int    numComponents = 0, dataSize = 0, arraySize = 0;
            byte[] data = readArray(reader, owner, ref numComponents, ref dataSize, ref arraySize);

            if (name == "vertex")
            {
                Vector3[] vertices = new Vector3[arraySize];
                GCHandle  handle   = GCHandle.Alloc(vertices, GCHandleType.Pinned);
                Marshal.Copy(data, 0, handle.AddrOfPinnedObject(), data.Length);
                mesh.vertices = vertices;
            }
            else if (name == "normal")
            {
                Vector3[] normals = new Vector3[arraySize];
                GCHandle  handle  = GCHandle.Alloc(normals, GCHandleType.Pinned);
                Marshal.Copy(data, 0, handle.AddrOfPinnedObject(), data.Length);
                mesh.normals = normals;
            }
            else if (name == "texCoord0")
            {
                Vector2[] texcoords = new Vector2[arraySize];
                GCHandle  handle    = GCHandle.Alloc(texcoords, GCHandleType.Pinned);
                Marshal.Copy(data, 0, handle.AddrOfPinnedObject(), data.Length);
                mesh.uv = texcoords;
            }
            else  // TODO: other types
            {
                Debug.LogWarning("Not implemented: " + name + ", " + arraySize +
                                 "; components = " + numComponents + "; dataSize = " + dataSize);
            }
        }

        bool hasIndices = reader.ReadBoolean();

        if (hasIndices)
        {
            int    numComponents = 0, dataSize = 0, arraySize = 0;
            byte[] data = readArray(reader, owner, ref numComponents, ref dataSize, ref arraySize);
        }

        int binding        = reader.ReadInt32();
        int normalizeValue = reader.ReadInt32();
    }
Example #7
0
 public static long ReadBracket(BinaryReader reader, ReaderOSGB owner)
 {
     if (owner._useBrackets)
     {
         if (owner._version > 148)
         {
             return(reader.ReadInt64());
         }
         else
         {
             return(reader.ReadInt32());
         }
     }
     return(-1);
 }
Example #8
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        int colorMode = reader.ReadInt32();     // _colorMode

        bool hasMtlProp = reader.ReadBoolean(); // _ambient

        if (hasMtlProp)
        {
            readMaterialProperty(gameObj, reader, owner);
        }

        hasMtlProp = reader.ReadBoolean();  // _diffuse
        if (hasMtlProp)
        {
            readMaterialProperty(gameObj, reader, owner);
        }

        hasMtlProp = reader.ReadBoolean();  // _specular
        if (hasMtlProp)
        {
            readMaterialProperty(gameObj, reader, owner);
        }

        hasMtlProp = reader.ReadBoolean();  // _emission
        if (hasMtlProp)
        {
            readMaterialProperty(gameObj, reader, owner);
        }

        hasMtlProp = reader.ReadBoolean();  // _shininess
        if (hasMtlProp)
        {
            bool  frontAndBack = reader.ReadBoolean();
            float frontValue   = reader.ReadSingle();
            float backValue    = reader.ReadSingle();
        }

        return(true);
    }
Example #9
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        string name         = ReadString(reader); // _name
        int    dataVariance = reader.ReadInt32(); // _dataVariance

        bool hasUserData = reader.ReadBoolean();  // _userData

        if (hasUserData)
        {
            Debug.LogWarning("_userData not implemented");
            return(false);
        }

        if (name.Length > 0)
        {
            gameObj.name = name;
        }
        return(true);
    }
Example #10
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        bool hasImage = reader.ReadBoolean();  // _image

        if (hasImage)
        {
            owner._preloadedTexture = LoadImage(gameObj, reader, owner);
        }

        int texWidth  = reader.ReadInt32();
        int texHeight = reader.ReadInt32();

        return(true);
    }
Example #11
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        bool hasUpdateCB = reader.ReadBoolean();  // _updateCallback

        if (hasUpdateCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasEventCB = reader.ReadBoolean();  // _eventCallback

        if (hasEventCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        return(true);
    }
Example #12
0
    void readModes(Object gameObj, BinaryReader reader, ReaderOSGB owner, bool asTexMode)
    {
        int numTexUnits = asTexMode ? reader.ReadInt32() : 1;

        if (asTexMode)
        {
            ReadBracket(reader, owner);
        }

        for (int u = 0; u < numTexUnits; ++u)
        {
            int numModes = reader.ReadInt32();
            if (numModes > 0)
            {
                long blockSize = ReadBracket(reader, owner);
                for (int i = 0; i < numModes; ++i)
                {
                    int glEnum = reader.ReadInt32();
                    int value  = reader.ReadInt32();
                }
            }
        }
    }
Example #13
0
    void readAttributes(Object gameObj, BinaryReader reader, ReaderOSGB owner, bool asTexAttr)
    {
        int numTexUnits = asTexAttr ? reader.ReadInt32() : 1;

        if (asTexAttr)
        {
            long blockSize = ReadBracket(reader, owner);
        }

        for (int u = 0; u < numTexUnits; ++u)
        {
            int numAttrs = reader.ReadInt32();
            if (numAttrs > 0)
            {
                long blockSize = ReadBracket(reader, owner);
                for (int i = 0; i < numAttrs; ++i)
                {
                    LoadObject(gameObj, reader, owner);
                    int value = reader.ReadInt32();
                }
            }
        }
    }
Example #14
0
    public static bool LoadObject(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        string className = ReadString(reader);
        long   blockSize = ReadBracket(reader, owner);
        uint   id        = reader.ReadUInt32();

        className = className.Replace("::", "_");

        if (owner._sharedObjects.ContainsKey(id))
        {
            //Debug.Log("Shared object " + className + "-" + id);
            return(true);  // TODO: how to share nodes?
        }
        else
        {
            owner._sharedObjects[id] = gameObj;
        }

        System.Type classType = System.Type.GetType(className);
        if (classType == null)
        {
            Debug.LogWarning("Object type " + className + " not implemented");
            return(false);
        }

        ObjectBase classObj = System.Activator.CreateInstance(classType) as ObjectBase;

        if (classObj == null)
        {
            Debug.LogWarning("Object instance " + className + " failed to create");
            return(false);
        }
        else
        {
            return(classObj.read(gameObj, reader, owner));
        }
    }
Example #15
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        bool hasStateSet = reader.ReadBoolean();  // _stateset

        if (hasStateSet)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasInitBound = reader.ReadBoolean();  // _initialBound

        if (hasInitBound)
        {
            long    blockSize = ReadBracket(reader, owner);
            Vector3 boundMin  = new Vector3(
                (float)reader.ReadDouble(), (float)reader.ReadDouble(), (float)reader.ReadDouble());
            Vector3 boundMax = new Vector3(
                (float)reader.ReadDouble(), (float)reader.ReadDouble(), (float)reader.ReadDouble());
        }

        bool hasComputeBoundCB = reader.ReadBoolean();  // _computeBoundCallback

        if (hasComputeBoundCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasShape = reader.ReadBoolean();  // _shape

        if (hasShape)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool enableDisplaylists = reader.ReadBoolean(); // _supportsDisplayList
        bool useDisplaylists    = reader.ReadBoolean(); // _useDisplayList
        bool useVBO             = reader.ReadBoolean(); // _useVertexBufferObjects

        bool hasUpdateCB = reader.ReadBoolean();        // _updateCallback

        if (hasUpdateCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasEventCB = reader.ReadBoolean();  // _eventCallback

        if (hasEventCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasCullCB = reader.ReadBoolean();  // _cullCallback

        if (hasCullCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasDrawCB = reader.ReadBoolean();  // _drawCallback

        if (hasDrawCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        return(true);
    }
Example #16
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        bool hasModes = reader.ReadBoolean();  // _modeList

        if (hasModes)
        {
            readModes(gameObj, reader, owner, false);
        }

        bool hasAttrs = reader.ReadBoolean();  // _attributeList

        if (hasAttrs)
        {
            readAttributes(gameObj, reader, owner, false);
        }

        hasModes = reader.ReadBoolean();  // _textureModeList
        if (hasModes)
        {
            readModes(gameObj, reader, owner, true);
        }

        hasAttrs = reader.ReadBoolean();  // _textureAttributeList
        if (hasAttrs)
        {
            readAttributes(gameObj, reader, owner, true);
        }

        bool hasUniforms = reader.ReadBoolean();  // _uniformList

        if (hasUniforms)
        {
            int  numUniforms = reader.ReadInt32();
            long blockSize   = ReadBracket(reader, owner);
            for (int i = 0; i < numUniforms; ++i)
            {
                LoadObject(gameObj, reader, owner);
                int value = reader.ReadInt32();
            }
        }

        int    renderingHint = reader.ReadInt32();   // _renderingHint
        int    binMode       = reader.ReadInt32();   // _binMode
        int    binNumber     = reader.ReadInt32();   // _binNum
        string binName       = ReadString(reader);   // _binName
        bool   nestedBin     = reader.ReadBoolean(); // _nestRenderBins

        bool hasUpdateCB = reader.ReadBoolean();     // _updateCallback

        if (hasUpdateCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        bool hasEventCB = reader.ReadBoolean();  // _eventCallback

        if (hasEventCB)
        {
            LoadObject(gameObj, reader, owner);
        }

        return(true);
    }
Example #17
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        GameObject parentObj = gameObj as GameObject;

        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        Mesh mesh = new Mesh();

        mesh.name = parentObj.name + "_Mesh";

        uint numPrimitives = reader.ReadUInt32();  // _primitives

        for (uint i = 0; i < numPrimitives; ++i)
        {
            if (owner._version < 112)
            {
                readPrimitive(mesh, reader, owner);
            }
            else
            {
            }        // TODO
        }

        if (owner._version < 112)
        {
            bool hasArrayData = reader.ReadBoolean();  // _vertexData
            if (hasArrayData)
            {
                readArrayData("vertex", mesh, reader, owner);
            }

            hasArrayData = reader.ReadBoolean();  // _normalData
            if (hasArrayData)
            {
                readArrayData("normal", mesh, reader, owner);
            }

            hasArrayData = reader.ReadBoolean();  // _colorData
            if (hasArrayData)
            {
                readArrayData("color", mesh, reader, owner);
            }

            hasArrayData = reader.ReadBoolean();  // _secondaryColorData
            if (hasArrayData)
            {
                readArrayData("secondaryColor", mesh, reader, owner);
            }

            hasArrayData = reader.ReadBoolean();  // _fogCoordData
            if (hasArrayData)
            {
                readArrayData("fogCoord", mesh, reader, owner);
            }

            hasArrayData = reader.ReadBoolean();  // _texCoordList
            if (hasArrayData)
            {
                readArrayListData("texCoord", mesh, reader, owner);
            }

            hasArrayData = reader.ReadBoolean();  // _vertexAttribList
            if (hasArrayData)
            {
                readArrayListData("vertexAttrib", mesh, reader, owner);
            }
        }
        else
        {
            LoadObject(mesh, reader, owner);         // _vertexData
            LoadObject(mesh, reader, owner);         // _normalData
            LoadObject(mesh, reader, owner);         // _colorData
            LoadObject(mesh, reader, owner);         // _secondaryColorData
            LoadObject(mesh, reader, owner);         // _fogCoordData

            uint numArrayData = reader.ReadUInt32(); // _texCoordList
            for (uint i = 0; i < numArrayData; ++i)
            {
                LoadObject(mesh, reader, owner);
            }

            numArrayData = reader.ReadUInt32();  // _vertexAttribList
            for (uint i = 0; i < numArrayData; ++i)
            {
                LoadObject(mesh, reader, owner);
            }
        }

        bool hasFastPath = reader.ReadBoolean();  // _fastPathHint

        if (hasFastPath)
        {
            bool fastPathHint = reader.ReadBoolean();
        }

        // Mesh related components
        mesh.RecalculateBounds();
        parentObj.AddComponent <MeshFilter>().sharedMesh = mesh;
        if (mesh.vertexCount > 3)
        {
            MeshCollider collider = parentObj.AddComponent <MeshCollider>();
            collider.sharedMesh = mesh;
            collider.convex     = true;
        }

        MeshRenderer renderer = parentObj.AddComponent <MeshRenderer>();

        renderer.sharedMaterial             = GameObject.Instantiate <Material>(owner._template);
        renderer.sharedMaterial.mainTexture = owner._preloadedTexture;
        return(true);
    }
Example #18
0
    void readPrimitive(Mesh mesh, BinaryReader reader, ReaderOSGB owner)
    {
        int type = reader.ReadInt32();
        int mode = reader.ReadInt32();

        if (owner._version > 96)
        {
            uint numInstances = reader.ReadUInt32();
        }

        List <int> indices = new List <int>();

        switch (type)
        {
        case 50:      // ID_DRAWARRAYS
        {
            int first = reader.ReadInt32();
            int count = reader.ReadInt32();
        }
        break;

        case 51:      // ID_DRAWARRAY_LENGTH
        {
            int  first     = reader.ReadInt32();
            uint numArrays = reader.ReadUInt32();
            long blockSize = ReadBracket(reader, owner);
            for (uint n = 0; n < numArrays; ++n)
            {
                int value = reader.ReadInt32();
            }
        }
        break;

        case 52:      // ID_DRAWELEMENTS_UBYTE
        {
            uint numElements = reader.ReadUInt32();
            long blockSize   = ReadBracket(reader, owner);
            for (uint n = 0; n < numElements; ++n)
            {
                uint value = reader.ReadByte();
                indices.Add((int)value);
            }
        }
        break;

        case 53:      // ID_DRAWELEMENTS_USHORT
        {
            uint numElements = reader.ReadUInt32();
            long blockSize   = ReadBracket(reader, owner);
            for (uint n = 0; n < numElements; ++n)
            {
                uint value = reader.ReadUInt16();
                indices.Add((int)value);
            }
        }
        break;

        case 54:      // ID_DRAWELEMENTS_UINT
        {
            uint numElements = reader.ReadUInt32();
            long blockSize   = ReadBracket(reader, owner);
            for (uint n = 0; n < numElements; ++n)
            {
                uint value = reader.ReadUInt32();
                indices.Add((int)value);
            }
        }
        break;

        default: break;
        }

        // TODO: just a temperatory method to enable triangles applied
        if (mesh.vertices.Length < indices.Count)
        {
            mesh.vertices = new Vector3[indices.Count];
        }

        // TODO: implement mode other than triangles
        mesh.triangles = indices.ToArray();
    }
Example #19
0
    byte[] readArray(BinaryReader reader, ReaderOSGB owner,
                     ref int numComponents, ref int dataSize, ref int arraySize)
    {
        if (owner._version < 112)
        {
            uint id   = reader.ReadUInt32();
            int  type = reader.ReadInt32();
            switch (type)
            {
            case 0: numComponents = 1; dataSize = 1; break;      // ID_BYTE_ARRAY

            case 1: numComponents = 1; dataSize = 1; break;      // ID_UBYTE_ARRAY

            case 2: numComponents = 1; dataSize = 2; break;      // ID_SHORT_ARRAY

            case 3: numComponents = 1; dataSize = 2; break;      // ID_USHORT_ARRAY

            case 4: numComponents = 1; dataSize = 4; break;      // ID_INT_ARRAY

            case 5: numComponents = 1; dataSize = 4; break;      // ID_UINT_ARRAY

            case 6: numComponents = 1; dataSize = 4; break;      // ID_FLOAT_ARRAY

            case 7: numComponents = 1; dataSize = 8; break;      // ID_DOUBLE_ARRAY

            case 8: numComponents = 2; dataSize = 1; break;      // ID_VEC2B_ARRAY

            case 9: numComponents = 3; dataSize = 1; break;      // ID_VEC3B_ARRAY

            case 10: numComponents = 4; dataSize = 1; break;     // ID_VEC4B_ARRAY

            case 11: numComponents = 4; dataSize = 1; break;     // ID_VEC4UB_ARRAY

            case 12: numComponents = 2; dataSize = 2; break;     // ID_VEC2S_ARRAY

            case 13: numComponents = 3; dataSize = 2; break;     // ID_VEC3S_ARRAY

            case 14: numComponents = 4; dataSize = 2; break;     // ID_VEC4S_ARRAY

            case 15: numComponents = 2; dataSize = 4; break;     // ID_VEC2_ARRAY

            case 16: numComponents = 3; dataSize = 4; break;     // ID_VEC3_ARRAY

            case 17: numComponents = 4; dataSize = 4; break;     // ID_VEC4_ARRAY

            case 18: numComponents = 2; dataSize = 8; break;     // ID_VEC2D_ARRAY

            case 19: numComponents = 3; dataSize = 8; break;     // ID_VEC3D_ARRAY

            case 20: numComponents = 4; dataSize = 8; break;     // ID_VEC4D_ARRAY

            case 21: numComponents = 2; dataSize = 1; break;     // ID_VEC2UB_ARRAY

            case 22: numComponents = 3; dataSize = 1; break;     // ID_VEC3UB_ARRAY

            case 23: numComponents = 2; dataSize = 2; break;     // ID_VEC2US_ARRAY

            case 24: numComponents = 3; dataSize = 2; break;     // ID_VEC3US_ARRAY

            case 25: numComponents = 4; dataSize = 2; break;     // ID_VEC4US_ARRAY

            case 26: numComponents = 2; dataSize = 4; break;     // ID_VEC2I_ARRAY

            case 27: numComponents = 3; dataSize = 4; break;     // ID_VEC3I_ARRAY

            case 28: numComponents = 4; dataSize = 4; break;     // ID_VEC4I_ARRAY

            case 29: numComponents = 2; dataSize = 4; break;     // ID_VEC2UI_ARRAY

            case 30: numComponents = 3; dataSize = 4; break;     // ID_VEC3UI_ARRAY

            case 31: numComponents = 4; dataSize = 4; break;     // ID_VEC4UI_ARRAY

            default: break;
            }

            arraySize = reader.ReadInt32();
            long blockSize = ReadBracket(reader, owner);
            return(reader.ReadBytes(arraySize * numComponents * dataSize));
        }
        else
        {
        }        // TODO
        return(null);
    }
Example #20
0
    public static Texture2D LoadImage(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        Texture2D tex2D = null;

        if (owner._version > 94)
        {
            string className = ReadString(reader);
        }

        uint id = reader.ReadUInt32();

        if (owner._sharedTextures.ContainsKey(id))
        {
            return(owner._sharedTextures[id]);
        }

        string fileName  = ReadString(reader);
        int    writeHint = reader.ReadInt32();
        int    decision  = reader.ReadInt32();

        switch (decision)
        {
        case 0:      // IMAGE_INLINE_DATA
        {
            int origin         = reader.ReadInt32();
            int s              = reader.ReadInt32();
            int t              = reader.ReadInt32();
            int r              = reader.ReadInt32();
            int internalFormat = reader.ReadInt32();
            int pixelFormat    = reader.ReadInt32();
            int dataType       = reader.ReadInt32();
            int packing        = reader.ReadInt32();
            int mode           = reader.ReadInt32();

            uint size = reader.ReadUInt32();
            if (size > 0)
            {
                byte[] imageData = reader.ReadBytes((int)size);

                TextureFormat format = TextureFormat.RGB24;          // TODO: other formats/data size
                if (pixelFormat == 0x1908)
                {
                    format = TextureFormat.RGBA32;                                 // GL_RGBA
                }
                tex2D = new Texture2D(s, r, format, false);
                tex2D.LoadRawTextureData(imageData);
                tex2D.Apply();
            }

            uint numLevels = reader.ReadUInt32();
            for (uint i = 0; i < numLevels; ++i)
            {
                uint levelDataSize = reader.ReadUInt32();
                // TODO
            }
        }
        break;

        case 1:      // IMAGE_INLINE_FILE
        {
            uint size = reader.ReadUInt32();
            if (size > 0)
            {
                byte[] fileData = reader.ReadBytes((int)size);

                tex2D = new Texture2D(2, 2);
                tex2D.LoadImage(fileData);
                //File.WriteAllBytes("test.jpg", fileData);
            }
        }
        break;

        case 2:      // IMAGE_EXTERNAL
            if (File.Exists(fileName))
            {
                byte[] fileData = File.ReadAllBytes(fileName);

                tex2D = new Texture2D(2, 2);
                tex2D.LoadImage(fileData);
            }
            break;

        default: break;
        }

        osg_Object classObj = new osg_Object();

        classObj.read(gameObj, reader, owner);
        owner._sharedTextures[id] = tex2D;
        return(tex2D);
    }
Example #21
0
 public virtual bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
 {
     Debug.LogWarning("Method read() not implemented"); return(false);
 }
Example #22
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        bool hasWrap = reader.ReadBoolean();  // _wrap_s

        if (hasWrap)
        {
            int wrapS = reader.ReadInt32();
        }

        hasWrap = reader.ReadBoolean();  // _wrap_r
        if (hasWrap)
        {
            int wrapR = reader.ReadInt32();
        }

        hasWrap = reader.ReadBoolean();  // _wrap_t
        if (hasWrap)
        {
            int wrapT = reader.ReadInt32();
        }

        bool hasFilter = reader.ReadBoolean(); // _min_filter

        if (hasFilter)
        {
            int minFilter = reader.ReadInt32();
        }

        hasFilter = reader.ReadBoolean(); // _mag_filter
        if (hasFilter)
        {
            int magFilter = reader.ReadInt32();
        }

        float   maxAnisotropy        = reader.ReadSingle();  // _maxAnisotropy
        bool    useHardwareMipmap    = reader.ReadBoolean(); // _useHardwareMipMapGeneration
        bool    unrefImageAfterApply = reader.ReadBoolean(); // _unrefImageDataAfterApply
        bool    clientStorageHint    = reader.ReadBoolean(); // _clientStorageHint
        bool    resizeNPOT           = reader.ReadBoolean(); // _resizeNonPowerOfTwoHint
        Vector4 borderColor          = new Vector4(          // _borderColor
            (float)reader.ReadDouble(), (float)reader.ReadDouble(),
            (float)reader.ReadDouble(), (float)reader.ReadDouble());
        int borderWidth = reader.ReadInt32();          // _borderWidth
        int formatMode  = reader.ReadInt32();          // _internalFormatMode

        bool hasInternalFormat = reader.ReadBoolean(); // _internalFormat

        if (hasInternalFormat)
        {
            int internalFormat = reader.ReadInt32();
        }

        bool hasSourceFormat = reader.ReadBoolean(); // _sourceFormat

        if (hasSourceFormat)
        {
            int sourceFormat = reader.ReadInt32();
        }

        bool hasSourceType = reader.ReadBoolean(); // _sourceType

        if (hasSourceType)
        {
            int sourceType = reader.ReadInt32();
        }

        bool  useShadowCompare  = reader.ReadBoolean(); // _use_shadow_comparison
        int   shadowCompareFunc = reader.ReadInt32();   // _shadow_compare_func
        int   shadowTextureMode = reader.ReadInt32();   // _shadow_texture_mode
        float shadowAmbient     = reader.ReadSingle();  // _shadow_ambient

        if (owner._version >= 95 && owner._version < 153)
        {
            bool hasImageAttachment = reader.ReadBoolean(); // _imageAttachment
            if (hasImageAttachment)
            {
                int  unit    = reader.ReadInt32();
                int  level   = reader.ReadInt32();
                bool layered = reader.ReadBoolean();
                int  layer   = reader.ReadInt32();
                int  access  = reader.ReadInt32();
                int  format  = reader.ReadInt32();
            }
        }

        if (owner._version >= 98)
        {
            bool hasSwizzle = reader.ReadBoolean(); // _swizzle
            if (hasSwizzle)
            {
                string swizzle = ReadString(reader);
            }
        }

        if (owner._version >= 155)
        {
            float minLOD  = reader.ReadSingle(); // _minLOD
            float maxLOD  = reader.ReadSingle(); // _maxLOD
            float lodBias = reader.ReadSingle(); // _lodBias
        }
        return(true);
    }
Example #23
0
    public override bool read(Object gameObj, BinaryReader reader, ReaderOSGB owner)
    {
        GameObject parentObj = gameObj as GameObject;

        if (!base.read(gameObj, reader, owner))
        {
            return(false);
        }

        PagedData pagedData = parentObj.GetComponent <PagedData>();

        pagedData._rootFileName = owner._currentFileName;

        bool hasPath = reader.ReadBoolean();  // _databasePath

        if (hasPath)
        {
            bool notEmptyPath = reader.ReadBoolean();
            if (notEmptyPath)
            {
                string databasePath = ReadString(reader);
                if (pagedData != null)
                {
                    pagedData._databasePath = databasePath;
                }
            }
        }

        //int numFrames = reader.ReadInt32();  // _frameNumberOfLastTraversal
        int  numExpired            = reader.ReadInt32();   // _numChildrenThatCannotBeExpired
        bool disableExternalPaging = reader.ReadBoolean(); // _disableExternalChildrenPaging

        bool hasRangeData = reader.ReadBoolean();          // _perRangeDataList

        if (hasRangeData)
        {
            uint numRanges = reader.ReadUInt32();
            long blockSize = ReadBracket(reader, owner);
            for (uint i = 0; i < numRanges; ++i)
            {
                string pagedFile = ReadString(reader);
                if (pagedData != null)
                {
                    pagedData._fileNames.Add(pagedFile);
                }
            }

            uint numPriorityOffsets = reader.ReadUInt32();
            blockSize = ReadBracket(reader, owner);
            for (uint i = 0; i < numPriorityOffsets; ++i)
            {
                float offset = reader.ReadSingle();
                float scale  = reader.ReadSingle();
            }
        }

        bool hasChildren = reader.ReadBoolean();  // _children (preloaded)

        if (hasChildren)
        {
            uint numChildren = reader.ReadUInt32();
            long blockSize   = ReadBracket(reader, owner);
            for (uint i = 0; i < numChildren; ++i)
            {
                GameObject children = new GameObject("Child_" + i.ToString());
                if (parentObj && LoadObject(children, reader, owner))
                {
                    children.transform.SetParent(parentObj.transform, false);
                }
                if (pagedData != null)
                {
                    pagedData._pagedNodes.Add(children);
                }
            }
        }

        return(true);
    }