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 }
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); }
public void CreateCameraBuffers(DanbiComputeShader shaderControl) { shaderControl.bufferDict.AddBuffer_NoDuplicate("_CameraInternalData", DanbiComputeShaderHelper.CreateComputeBuffer_Ret(m_cameraInternalData.asStruct, m_cameraInternalData.stride)); }