public HVRViewportInterface FlipViewport()
        {
            HVRViewportInterface viewport = CurrentViewport();

            m_viewportIndex = (m_viewportIndex + 1) % MAXIMUM_VIEWPORTS;
            return(viewport);
        }
        public void RenderCamera(HvrRender hvrRender, HVRViewportInterface viewport, bool resizedViewport = false)
        {
            // If the Unity viewport has been resized and an OpenGL renderer
            // is in use then Unity will have recreated the main OpenGL
            // context so all framebuffer and vertex attribute objects that
            // are not shareable need to be destroyed and recreated.
            //
            // The extra call to `PlayerInterface.PreRender()` in this case is
            // to make sure that the vertex buffers are populated for the
            // render call below to avoid flickering.
            if (resizedViewport)
            {
                StaticInterface.Self().ResetFrameBuffersAndMeshes();
                PlayerInterface.PreRender(SceneInterface.Self().hvrSceneInterface);
                PlayerInterface.PreRender(SceneInterface.Self().hvrSceneInterface);
            }

            Update();
            LateUpdate();

            if (!SceneInterface.Self().sceneHasPreRendered)
            {
                PlayerInterface.PreRender(SceneInterface.Self().hvrSceneInterface);
                SceneInterface.Self().sceneHasPreRendered = true;
            }

            PlayerInterface.Render(SceneInterface.Self().hvrSceneInterface, viewport);
        }
        public HVRViewportInterface CurrentViewport()
        {
            HVRViewportInterface viewport = m_viewports[m_viewportIndex];

            if (viewport == null || !viewport.IsValid() || m_initializedGraphicsDeviceType != SystemInfo.graphicsDeviceType)
            {
                InitializeViewports();
                viewport = m_viewports[m_viewportIndex];
            }
            return(viewport);
        }
        private void InitializeViewports()
        {
            m_initializedGraphicsDeviceType = SystemInfo.graphicsDeviceType;
            m_frameBuffer   = new HVRFrameBufferInterface();
            m_viewports     = new HVRViewportInterface [MAXIMUM_VIEWPORTS];
            m_viewportIndex = 0;

            for (int i = 0; i < MAXIMUM_VIEWPORTS; ++i)
            {
                HVRViewportInterface viewport = new HVRViewportInterface();
                viewport.SetFrameBuffer(m_frameBuffer);
                m_viewports[i] = viewport;
            }
        }
示例#5
0
        public static void Render(HVRSceneInterface scene, HVRViewportInterface viewport)
        {
            if (scene != null && viewport != null)
            {
                HVRFrameBufferInterface frameBuffer = viewport.frameBuffer;
                if (frameBuffer != null)
                {
                    int clearEventID = HVRPlayerInterfaceAPI.Unity_FrameBuffer_Clear(frameBuffer.handle, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f);
                    GL.IssuePluginEvent(HVRPlayerInterfaceAPI.UnityRenderEventFunc(), clearEventID);
                }

                int eventID = HVRPlayerInterfaceAPI.Unity_Player_Render(scene.handle, viewport.handle);
                GL.IssuePluginEvent(HVRPlayerInterfaceAPI.UnityRenderEventFunc(), eventID);
            }
        }
示例#6
0
    void DrawDebugTextures()
    {
        scrollViewPos = EditorGUILayout.BeginScrollView(scrollViewPos, false, false, GUILayout.MinHeight(240));
        {
            EditorGUILayout.BeginHorizontal();
            {
                {
                    Rect rect = EditorGUILayout.BeginHorizontal("box", GUILayout.Height(220), GUILayout.Width(210));
                    {
                        EditorGUI.LabelField(new Rect(rect.x, rect.y, rect.width, 15), "Color:");

                        HVRViewportInterface viewport = hvrRender.renderInterface.CurrentViewport();
                        Texture tex = viewport.frameBuffer.renderColourBuffer;
                        if (tex)
                        {
                            EditorGUI.DrawPreviewTexture(new Rect(rect.x + 5, rect.y + 15, 200, 200), tex, hvrRenderEditorPreviewMat);
                        }

                        GUILayout.Space(200);
                    }
                    EditorGUILayout.EndHorizontal();
                }

                {
                    Rect rect = EditorGUILayout.BeginHorizontal("box", GUILayout.Height(220), GUILayout.Width(210));
                    {
                        EditorGUI.LabelField(new Rect(rect.x, rect.y, rect.width, 15), "Depth:");

                        HVRViewportInterface viewport = hvrRender.renderInterface.CurrentViewport();
                        Texture tex = viewport.frameBuffer.renderDepthBuffer;
                        if (tex)
                        {
                            EditorGUI.DrawPreviewTexture(new Rect(rect.x + 5, rect.y + 15, 200, 200), tex, hvrRenderEditorPreviewMat);
                        }

                        GUILayout.Space(200);
                    }
                    EditorGUILayout.EndHorizontal();
                }
                GUILayout.FlexibleSpace();
            }
            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.EndScrollView();
    }
示例#7
0
        public HVRViewportInterface FlipViewport()
        {
            HVRViewportInterface viewport = m_viewports[m_viewportIndex];

            if (viewport == null || !viewport.IsValid() || m_initializedGraphicsDeviceType != SystemInfo.graphicsDeviceType)
            {
                m_initializedGraphicsDeviceType = SystemInfo.graphicsDeviceType;
                m_viewports     = new HVRViewportInterface [MAXIMUM_VIEWPORTS];
                m_viewportIndex = 0;

                for (int i = 0; i < MAXIMUM_VIEWPORTS; ++i)
                {
                    m_viewports[i] = new HVRViewportInterface();
                }
                viewport = m_viewports[m_viewportIndex];
            }
            m_viewportIndex = (m_viewportIndex + 1) % MAXIMUM_VIEWPORTS;
            return(viewport);
        }
示例#8
0
        void OnPostRender()
        {
            Camera camera = GetComponent <Camera>();

            int  width           = camera.pixelWidth;
            int  height          = camera.pixelHeight;
            bool resizedViewport = m_currentWidth != 0 && m_currentWidth != width || m_currentHeight != 0 && m_currentHeight != height;

            m_currentWidth  = width;
            m_currentHeight = height;

            HVRViewportInterface viewport = FlipViewport();

            viewport.SetViewMatrix(camera.worldToCameraMatrix);
            viewport.SetProjMatrix(GL.GetGPUProjectionMatrix(camera.projectionMatrix, false));
            viewport.SetNearFarPlane(camera.nearClipPlane, camera.farClipPlane);
            viewport.SetDimensions(0, 0, width, height);
            viewport.SetFrameBuffer(null);
            HvrStaticInterface.Self().RenderCamera(null, viewport, resizedViewport);
        }
示例#9
0
        void OnPreRender()
        {
            if (CheckResources() == false)
            {
                return;
            }

            CommandBuffer_Validate();

            Camera cam = GetComponent <Camera>();

            //Viewport Settings
            viewportSizeMultiplier = Mathf.Clamp(viewportSizeMultiplier, viewportSizeMin, viewportSizeMax);

            viewportSettings.width  = Mathf.RoundToInt((float)cam.pixelWidth * viewportSizeMultiplier);
            viewportSettings.height = Mathf.RoundToInt((float)cam.pixelHeight * viewportSizeMultiplier);

            viewport = renderInterface.FlipViewport();
            viewport.SetViewMatrix(cam.worldToCameraMatrix);
            viewport.SetProjMatrix(GL.GetGPUProjectionMatrix(cam.projectionMatrix, false));
            viewport.SetNearFarPlane(cam.nearClipPlane, cam.farClipPlane);
            viewport.SetDimensions(0, 0, viewportSettings.width, viewportSettings.height);
            bool resizedViewport = viewport.frameBuffer.Resize(viewportSettings.width, viewportSettings.height);

            if (resizedViewport)
            {
                CommandBuffer_Remove(activeCameraEvent);
            }

            // Render viewport
            HvrStaticInterface.Self().RenderCamera(this, viewport, resizedViewport);

            HvrColorGrading colorGrading = GameObject.FindObjectOfType <HvrColorGrading>();

            if (colorGrading != null)
            {
                if (colorGradedTexture == null || colorGradedTexture.width != viewportSettings.width || colorGradedTexture.height != viewportSettings.height)
                {
                    if (colorGradedTexture)
                    {
                        colorGradedTexture.Release();
                    }

                    colorGradedTexture = new RenderTexture(viewportSettings.width, viewportSettings.height, 0);
                }

                colorGrading.DoGrade(viewport.frameBuffer.renderColourBuffer, colorGradedTexture);
            }
            else
            {
                if (colorGradedTexture != null)
                {
                    colorGradedTexture.Release();
                    colorGradedTexture = null;
                }
            }

            switch (compositeMethod)
            {
            case CompositeMethods.commandBuffer:
                // Command Buffer
                commandBuffer_material.SetTexture("_oCOL", colorGradedTexture ? colorGradedTexture : viewport.frameBuffer.renderColourBuffer);
                commandBuffer_material.SetTexture("_oDEP", viewport.frameBuffer.renderDepthBuffer);

                Matrix4x4 inverseProjection = (cam.projectionMatrix.inverse);
                commandBuffer_material.SetMatrix("_ProjectInverse", inverseProjection);

                Matrix4x4 inverseViewProjection = (cam.projectionMatrix * cam.worldToCameraMatrix).inverse;
                commandBuffer_material.SetMatrix("_ViewProjectInverse", inverseViewProjection);

                commandBuffer_material.SetInt("g_hdr", cam.hdr ? 1 : 0);
                break;

            default:
                break;
            }
        }