Example #1
0
        private void LoadBufferWithTriangles(SceneParser sceneParser, ref ComputeBuffer triangleDataBuffer)
        {
            int triCount = sceneParser.GetTriangles().Count;

            triangleDataBuffer?.Release();

            if (triCount > 0)
            {
                triangleDataBuffer = new ComputeBuffer(triCount, RTTriangle_t.GetSize());
                triangleDataBuffer.SetData(sceneParser.GetTriangles());
            }
            else
            {
                triangleDataBuffer = new ComputeBuffer(1, RTTriangle_t.GetSize());
            }
        }
Example #2
0
        protected override void Render(ScriptableRenderContext renderContext, Camera[] cameras) // This is the function called every frame to draw on the screen
        {
            RunParseScene();
            foreach (var camera in cameras)
            {
                RunTargetTextureInit(ref m_target);
                RunClearCanvas(commands, camera);
                RunLoadGeometryToBuffer(m_sceneParser, ref commands, ref m_triangleBuffer);
                RunSetCameraToMainShader(camera);
                RunSetAmbientToMainShader(m_config);
                RunSetTrianglesToMainShader(ref m_triangleBuffer, m_sceneParser.GetTriangles().Count);
                RunRayTracing(ref commands, m_target);
                RunSendTextureToUnity(commands, m_target, renderContext, camera);
                RunBufferCleanUp();

                // // Create an structure to hold the culling paramaters
                // ScriptableCullingParameters cullingParams;

                // //Populate the culling paramaters from the camera
                // if (camera.TryGetCullingParameters(out cullingParams))
                // {
                //    continue;
                // }

                // // Perform the culling operation
                // CullingResults cullingResults = renderContext.Cull(ref cullingParams);

                // // Get the opaque rendering filter settings
                // var opaqueRange = new FilteringSettings();

                // //Set the range to be the opaque queues
                // // relacing min/max with lowerBound/upperBound
                // opaqueRange.renderQueueRange = new RenderQueueRange()
                // {
                //    lowerBound = 0,
                //    upperBound = (int)UnityEngine.Rendering.RenderQueue.GeometryLast,
                // };

                // //Include all layers
                // opaqueRange.layerMask = ~0;

                // // Create the draw render settings
                // // note that it takes a shader pass name
                // var sortingSettings = new SortingSettings(camera);
                // sortingSettings.criteria = SortingCriteria.CommonOpaque;
                // var drs = new DrawingSettings(new ShaderTagId("Opaque"), sortingSettings);

                // // enable instancing for the draw call
                // drs.enableInstancing = true;

                // // A batch of rendering commands
                // var cmd = new CommandBuffer();
                // cmd.ClearRenderTarget(true, true, m_clearColor);

                // // Execute the commands
                // renderContext.ExecuteCommandBuffer(cmd);

                // // Release the memory hold by the buffer
                // cmd.Release();

                // // draw all of the renderers
                // renderContext.DrawRenderers(cullingResults, ref drs, ref opaqueRange);

                // // Return the render context
                // renderContext.Submit();
            }
        }