Exemple #1
0
        static void CheckCameras()
        {
            Camera[] sceneCameras = InternalEditorUtility.GetSceneViewCameras();

            foreach (Camera camera in sceneCameras)
            {
                if (shouldRender)
                {
                    if (!camera.GetComponent <HvrRender>())
                    {
                        GameObject sceneCameraGo = camera.gameObject;
                        HvrRender  render        = sceneCameraGo.AddComponent <HvrRender>();
                        render.hideFlags = HideFlags.HideAndDontSave;
                        SceneView.RepaintAll();
                    }
                }
                else
                {
                    if (camera.GetComponent <HvrRender>())
                    {
                        CleanPostEffects(camera);
                        SceneView.RepaintAll();
                    }
                }
            }
        }
Exemple #2
0
    public override void OnInspectorGUI()
    {
        hvrRender = (HvrRender)target;
        cam       = hvrRender.GetComponent <Camera>();

        if (hvrRender && CheckResources())
        {
            DrawCustomInspector(target);
        }
    }
        public void HvrRenderMode(UnityEngine.Object target, SerializedObject serializedObject)
        {
            if (target == null)
            {
                return;
            }

            HvrRender.eMode mode = HvrRender.eMode.direct;

            if (target.GetType() == typeof(HvrRender))
            {
                HvrRender render = target as HvrRender;
                mode = render.mode;
            }
            else
            {
                return;
            }

            EditorGUI.BeginChangeCheck();

            mode = (HvrRender.eMode)EditorGUILayout.Popup("Render Mode", (int)mode, hvrRenderModeStrings);

            if (EditorGUI.EndChangeCheck())
            {
                foreach (UnityEngine.Object obj in serializedObject.targetObjects)
                {
                    if (obj.GetType() == target.GetType())
                    {
                        Undo.RecordObject(obj, "Changed Render Mode");

                        if (obj.GetType() == typeof(HvrRender))
                        {
                            HvrRender render = (HvrRender)obj;
                            render.mode = mode;
                        }
                    }
                }
            }
        }
        private static void Update()
        {
            // In the case that the graphics api changes while the editor is running
            // destroy any hvrrender components that are attached to Editor cameras
            if (previousGraphicsDeviceType != SystemInfo.graphicsDeviceType)
            {
                previousGraphicsDeviceType = SystemInfo.graphicsDeviceType;

                DestroySceneCameras();
            }

            if (!EditorApplication.isPlaying)
            {
                Camera[] sceneCameras = InternalEditorUtility.GetSceneViewCameras();

                foreach (Camera camera in sceneCameras)
                {
                    if (camera.gameObject.GetComponent(Uniforms.componentNames.hvrRender))
                    {
                        HvrRender render = (HvrRender)camera.gameObject.GetComponent(Uniforms.componentNames.hvrRender);

                        if (!HvrScene.Contains(render))
                        {
                            HvrScene.Add(render);
                        }
                    }
                }

                List <HvrActor> actors = new List <HvrActor>();
                HvrScene.GetObjects(actors);

                // If the asset's CurrentTime is different to the ActualTime, then a frame
                // has probably begun decoding or has finished decoding.
                // In order for this the data to be pushed to the renderer, we must force a render to occur
                bool assetTimeChanged = false;

                // Because of the async nature of the decoding and rendering we must wait until the voxel count
                // has changed before rerendering the views
                int currentVoxelCount = 0;

                foreach (HvrActor actor in actors)
                {
                    if (actor != null &&
                        actor.assetInterface != null)
                    {
                        if (actor.assetInterface.GetCurrentTime() != actor.assetInterface.GetActualTime())
                        {
                            assetTimeChanged = true;
                        }

                        currentVoxelCount += actor.assetInterface.GetVoxelCount();
                    }
                }

                if (assetTimeChanged ||
                    sLastVoxelCount != currentVoxelCount)
                {
                    sLastVoxelCount = currentVoxelCount;

                    // Ensures that the HvrActor's mesh is updated
                    List <HvrActor> hvrActors = new List <HvrActor>();
                    HvrScene.GetObjects(hvrActors);

                    foreach (HvrActor actor in hvrActors)
                    {
                        actor.EditorUpdate();
                    }

                    // Force HvrScene to allow the PrepareRender stage to occur
                    HvrScene.lastPreparedFrame = -1;

                    // Force all HvrRender cameras to render
                    // Do this last after updating the scene
                    List <HvrRender> hvrRenders = new List <HvrRender>();
                    HvrScene.GetObjects(hvrRenders);

                    foreach (HvrRender render in hvrRenders)
                    {
                        render.GetComponent <Camera>().Render();
                    }
                }
            }
        }