Exemple #1
0
    private bool CreateLayer(int mipLevels, int sampleCount, OVRPlugin.EyeTextureFormat etFormat, int flags, OVRPlugin.Sizei size, OVRPlugin.OverlayShape shape)
    {
        if (!layerIdHandle.IsAllocated || layerIdPtr == IntPtr.Zero)
        {
            layerIdHandle = GCHandle.Alloc(layerId, GCHandleType.Pinned);
            layerIdPtr    = layerIdHandle.AddrOfPinnedObject();
        }

        if (layerIndex == -1)
        {
            for (int i = 0; i < maxInstances; ++i)
            {
                if (instances[i] == null || instances[i] == this)
                {
                    layerIndex   = i;
                    instances[i] = this;
                    break;
                }
            }
        }

        bool needsSetup = (
            isOverridePending ||
            layerDesc.MipLevels != mipLevels ||
            layerDesc.SampleCount != sampleCount ||
            layerDesc.Format != etFormat ||
            layerDesc.Layout != layout ||
            layerDesc.LayerFlags != flags ||
            !layerDesc.TextureSize.Equals(size) ||
            layerDesc.Shape != shape);

        if (!needsSetup)
        {
            return(false);
        }

        OVRPlugin.LayerDesc desc = OVRPlugin.CalculateLayerDesc(shape, layout, size, mipLevels, sampleCount, etFormat, flags);
        OVRPlugin.EnqueueSetupLayer(desc, compositionDepth, layerIdPtr);
        layerId = (int)layerIdHandle.Target;

        if (layerId > 0)
        {
            layerDesc = desc;
            if (isExternalSurface)
            {
                stageCount = 1;
            }
            else
            {
                stageCount = OVRPlugin.GetLayerTextureStageCount(layerId);
            }
        }

        isOverridePending = false;

        return(true);
    }
Exemple #2
0
 private bool CreateLayer(int mipLevels, int sampleCount, OVRPlugin.EyeTextureFormat etFormat, int flags, OVRPlugin.Sizei size, OVRPlugin.OverlayShape shape)
 {
     if (!this.layerIdHandle.IsAllocated || this.layerIdPtr == IntPtr.Zero)
     {
         this.layerIdHandle = GCHandle.Alloc(this.layerId, GCHandleType.Pinned);
         this.layerIdPtr    = this.layerIdHandle.AddrOfPinnedObject();
     }
     if (this.layerIndex == -1)
     {
         for (int i = 0; i < 15; i++)
         {
             if (OVROverlay.instances[i] == null || OVROverlay.instances[i] == this)
             {
                 this.layerIndex         = i;
                 OVROverlay.instances[i] = this;
                 break;
             }
         }
     }
     if (!this.isOverridePending && this.layerDesc.MipLevels == mipLevels && this.layerDesc.SampleCount == sampleCount && this.layerDesc.Format == etFormat && this.layerDesc.LayerFlags == flags && this.layerDesc.TextureSize.Equals(size) && this.layerDesc.Shape == shape)
     {
         return(false);
     }
     OVRPlugin.LayerDesc desc = OVRPlugin.CalculateLayerDesc(shape, this.layout, size, mipLevels, sampleCount, etFormat, flags);
     OVRPlugin.EnqueueSetupLayer(desc, this.layerIdPtr);
     this.layerId = (int)this.layerIdHandle.Target;
     if (this.layerId > 0)
     {
         this.layerDesc  = desc;
         this.stageCount = OVRPlugin.GetLayerTextureStageCount(this.layerId);
     }
     this.isOverridePending = false;
     return(true);
 }