protected override void DrawSingleFrame(int iteration, Scene scene, Navigation navigation) { Debug.Assert(DepthPeeler != null); Camera camera = navigation.Camera; ComputeSensorTransform(camera); GL.ClearColor(0f, 0f, 0f, 1f); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); // bind color and depth textures GL.ActiveTexture(TextureUnit.Texture0); int lensSampleTex = IncrementalModeEnabled ? incrementalLensSampleTexture : previewLensSampleTexture; GL.BindTexture(TextureTarget.Texture3D, lensSampleTex); //GL.ActiveTexture(TextureUnit.Texture1); //GL.BindTexture(TextureTarget.Texture1D, pixelSampleTexture); GL.ActiveTexture(TextureUnit.Texture2); GL.BindTexture(TextureTarget.Texture2DArray, DepthPeeler.PackedDepthTextures); GL.ActiveTexture(TextureUnit.Texture3); GL.BindTexture(TextureTarget.Texture2DArray, DepthPeeler.ColorTextures); GL.ActiveTexture(TextureUnit.Texture4); GL.BindTexture(TextureTarget.Texture2DArray, NBuffers.NBuffersTextures); // enable IBRT shader GL.UseProgram(shaderProgram); // set shader parameters (textures, lens model, ...) GL.Uniform1(GL.GetUniformLocation(shaderProgram, "lensSamplesTexture"), 0); //GL.Uniform1(GL.GetUniformLocation(shaderProgram, "pixelSamplesTexture"), 1); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "packedDepthTexture"), 2); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "colorTexture"), 3); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "nBuffersTexture"), 4); GL.Uniform2(GL.GetUniformLocation(shaderProgram, "nBuffersSize"), NBuffers.Size); GL.Uniform2(GL.GetUniformLocation(shaderProgram, "sensorSize"), camera.SensorSize); //GL.Uniform1(GL.GetUniformLocation(shaderProgram, "sensorZ"), camera.SensorZ); GL.Uniform3(GL.GetUniformLocation(shaderProgram, "sensorShift"), camera.SensorShift3); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "near"), camera.Near); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "far"), camera.Far); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "lensFocalLength"), camera.Lens.FocalLength); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "lensApertureRadius"), camera.Lens.ApertureRadius); //Matrix4 perspective = camera.Perspective; //GL.UniformMatrix4(GL.GetUniformLocation(shaderProgram, "perspective"), false, ref perspective); GL.Uniform4(GL.GetUniformLocation(shaderProgram, "frustumBounds"), camera.FrustumBounds); // jittering GL.Uniform2(GL.GetUniformLocation(shaderProgram, "screenSize"), new Vector2(Width, Height)); GL.Uniform2(GL.GetUniformLocation(shaderProgram, "screenSizeInv"), new Vector2(1.0f / Width, 1.0f / Height)); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "sampleCount"), (IncrementalModeEnabled ? SampleCount : PreviewSampleCount)); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "sampleCountInv"), 1.0f / (IncrementalModeEnabled ? SampleCount : PreviewSampleCount)); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "sampleIndexOffset"), IncrementalModeEnabled ? SampleCount * iteration : 0); GL.Uniform1(GL.GetUniformLocation(shaderProgram, "totalSampleCount"), IncrementalModeEnabled ? MaxTotalSampleCount : PreviewSampleCount); //GL.Uniform1(GL.GetUniformLocation(shaderProgram, "sampleCount"), SampleCount); //GL.Uniform1(GL.GetUniformLocation(shaderProgram, "sampleCountInv"), 1.0f / SampleCount); //GL.Uniform1(GL.GetUniformLocation(shaderProgram, "sampleIndexOffset"), SampleCount * iteration); //GL.Uniform1(GL.GetUniformLocation(shaderProgram, "totalSampleCount"), TotalSampleCount); GL.Uniform2(GL.GetUniformLocation(shaderProgram, "cameraShift"), camera.LensShift); GL.UniformMatrix3(GL.GetUniformLocation(shaderProgram, "sensorTransform"), 1, false, sensorTransform3x3); // draw the quad LayerHelper.DrawQuad(); // disable shader GL.UseProgram(0); // unbind textures GL.ActiveTexture(TextureUnit.Texture4); GL.BindTexture(TextureTarget.Texture2D, 0); GL.ActiveTexture(TextureUnit.Texture3); GL.BindTexture(TextureTarget.Texture2D, 0); GL.ActiveTexture(TextureUnit.Texture2); GL.BindTexture(TextureTarget.Texture2D, 0); GL.ActiveTexture(TextureUnit.Texture1); GL.BindTexture(TextureTarget.Texture2D, 0); GL.ActiveTexture(TextureUnit.Texture0); GL.BindTexture(TextureTarget.Texture2D, 0); }
public void DrawSingleFrame(Scene scene, Navigation navigation) { DrawSingleFrame(0, scene, navigation); }