Exemple #1
0
        public void RebuildMeshInfo()
        {
            var control = DanbiManager.instance.shaderControl;

            switch (m_texType)
            {
            case EDanbiTextureType.Regular:
                m_panoramaRegular.RebuildMeshInfoForComputeShader(ref m_panoramaShapeData);
                break;

            case EDanbiTextureType.Faces4:
                m_panorama4faces.RebuildMeshInfoForComputeShader(ref m_panoramaShapeData);
                break;

            case EDanbiTextureType.Panorama:
                m_panorama360.RebuildMeshInfoForComputeShader(ref m_panoramaShapeData);
                break;
            }
            m_reflector.RebuildMeshInfoForComputeShader(ref m_reflectorShapeData);

            // 5. reflector mesh shape data
            switch (m_meshType)
            {
            // case EDanbiPrewarperSetting_MeshType.Custom_Cone:
            //     // control.buffersDic.Add("_", DanbiComputeShaderHelper.CreateComputeBuffer_Ret<DanbiConeData_struct>((reflectorShapeData as DanbiConeData).asStruct, 1));
            //     break;

            // case EDanbiPrewarperSetting_MeshType.Custom_Cylinder:
            //     // control.buffersDic.Add("_", DanbiComputeShaderHelper.CreateComputeBuffer_Ret<DanbiCylinderData_struct>((reflectorShapeData as DanbiCylinderData).asStruct, 1));
            //     break;

            case EDanbiPrewarperSetting_MeshType.Custom_Dome:
                var domeData = m_reflectorShapeData as DanbiDomeData;
                var domeDataComputeBuffer = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(domeData.asStruct, domeData.stride);
                control.bufferDict.AddBuffer_NoDuplicate("_DomeData", domeDataComputeBuffer);
                break;
            }

            // 6. panorama mesh shape data
            // since panorama shares same shape data, there's no need to make overlaps.
            var panoramaData = m_panoramaShapeData as DanbiPanoramaData;
            var panoramaDataComputeBuffer = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(panoramaData.asStruct, panoramaData.stride);

            control.bufferDict.AddBuffer_NoDuplicate("_PanoramaData", panoramaDataComputeBuffer);
        }
        void Awake()
        {
            // query the hardward it supports the compute shader.
            if (!SystemInfo.supportsComputeShaders)
            {
                Debug.LogError("This machine doesn't support Compute Shader!", this);
            }

            // Initialize the Screen Sampling shader.
            m_addMaterial_ScreenSampling = new Material(Shader.Find("Hidden/AddShader"));

            DanbiPanoramaScreenChanger.onCenterPosOfMeshUpdate_Panorama +=
                (Vector3 newCenterOfPanoramaMesh) =>
            {
                m_centerOfPanoramaMesh = new Vector4(newCenterOfPanoramaMesh.x,
                                                     newCenterOfPanoramaMesh.y,
                                                     newCenterOfPanoramaMesh.z,
                                                     0.0f);
            };

            DanbiUIImageGeneratorTexturePanel.onTextureTypeChange +=
                (EDanbiTextureType type) => m_isPanoramaTex        = (int)type;

            DanbiUIVideoGeneratorVideoPanel.onVideoTypeChange +=
                (int isPanoramaTex) => m_isPanoramaTex         = isPanoramaTex;

            // Populate kernels index.
            PopulateKernels();

            m_maxNumOfBounce    = 2;
            m_samplingThreshold = 10;

            #region dbg
            // DanbiDbg.PrepareDbgBuffers();
            // SetData is performed automatically when the buffer is created.
            dbg_usedHeightBuf = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(dbg_usedHeightArr, 4);
            // dbg_centerOfPanoBuf = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(dbg_centerOfPanoArr, 16);
            // dbg_rayLengthBuf = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(dbg_rayLengthArr, 12);
            dbg_hitInfoBuf = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(dbg_hitInfoArr, 16);
            // dbg_cameraInternalDataBuf = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(dbg_cameraInternalData, 40);
            // dbg_cameraToWorldMatBuf = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(dbg_cameraInverseProjectionArr, 64);
            // dbg_cameraInverseProjectionBuf = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(dbg_cameraInverseProjectionArr, 64);
            #endregion dbg
        }
Exemple #3
0
        public void RebuildMeshShape()
        {
            var control = DanbiManager.instance.shaderControl;

            m_panoramaMeshData.Clear();
            m_reflectorMeshData.Clear();
            m_meshData.Clear();

            //  fill out with the meshData for mesh data and the shape data for Shader.

            switch (m_texType)
            {
            case EDanbiTextureType.Regular:
                m_panoramaRegular.RebuildMeshShapeForComputeShader(ref m_panoramaMeshData);
                break;

            case EDanbiTextureType.Faces4:
                m_panorama4faces.RebuildMeshShapeForComputeShader(ref m_panoramaMeshData);
                break;

            case EDanbiTextureType.Panorama:
                m_panorama360.RebuildMeshShapeForComputeShader(ref m_panoramaMeshData);
                break;
            }
            m_reflector.RebuildMeshShapeForComputeShader(ref m_reflectorMeshData);

            m_meshData.JoinData(m_panoramaMeshData, m_reflectorMeshData);

            // 3. Find Kernel and set it as a current kernel.
            DanbiKernelHelper.CurrentKernelIndex = DanbiKernelHelper.CalcCurrentKernelIndex(m_meshType, m_panoramaType);

            // 4. Populate the compuate buffer dictionary.
            var vtxComputeBuffer = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(m_meshData.Vertices, 12);

            control.bufferDict.AddBuffer_NoDuplicate("_Vertices", vtxComputeBuffer);

            var idxComputeBuffer = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(m_meshData.Indices, 4);

            control.bufferDict.AddBuffer_NoDuplicate("_Indices", idxComputeBuffer);

            var texcoordsComputeBuffer = DanbiComputeShaderHelper.CreateComputeBuffer_Ret(m_meshData.Texcoords, 8);

            control.bufferDict.AddBuffer_NoDuplicate("_Texcoords", texcoordsComputeBuffer);
        }
Exemple #4
0
 public void CreateCameraBuffers(DanbiComputeShader shaderControl)
 {
     shaderControl.bufferDict.AddBuffer_NoDuplicate("_CameraInternalData", DanbiComputeShaderHelper.CreateComputeBuffer_Ret(m_cameraInternalData.asStruct, m_cameraInternalData.stride));
 }