public void correct(Texture t) { ComputeCommand cmd = new ComputeCommand(myAutoCorrectShader, t.width / 32, t.height / 32); cmd.addImage(t, TextureAccess.ReadOnly, 0); cmd.addImage(output, TextureAccess.WriteOnly, 1); cmd.renderState.setStorageBuffer(mySSbo.id, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.ShaderImageAccessBarrierBit); }
void updateBiomes() { Renderer.device.pushDebugMarker("Update Biomes"); for (int i = 0; i < 6; i++) { string m1 = "face " + i.ToString(); GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m1.Length, m1); ComputeCommand cmd; String m2 = "Apply Elevation"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m2.Length, m2); cmd = new ComputeCommand(myApplyElevationShader, myBiomeTex[i].width / 32, myBiomeTex[i].height / 32); cmd.addImage(myElevationTex[i], TextureAccess.ReadOnly, 0); cmd.addImage(myBiomeTex[i], TextureAccess.WriteOnly, 1); cmd.renderState.setUniform(new UniformData(2, Uniform.UniformType.Int, i)); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m3 = "Apply Heat"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m3.Length, m3); cmd = new ComputeCommand(myApplyHeatShader, myBiomeTex[i].width / 32, myBiomeTex[i].height / 32); cmd.addImage(myBiomeTex[i], TextureAccess.ReadWrite, 0); cmd.addImage(myHeatGenerator.final.output, TextureAccess.ReadOnly, 1); cmd.renderState.setUniform(new UniformData(2, Uniform.UniformType.Int, i)); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m4 = "Apply Moisture"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m4.Length, m4); cmd = new ComputeCommand(myApplyMoistureShader, myBiomeTex[i].width / 32, myBiomeTex[i].height / 32); cmd.addImage(myMoistureGenerator.final.output, TextureAccess.ReadOnly, 0); cmd.addImage(myBiomeTex[i], TextureAccess.WriteOnly, 1); cmd.renderState.setUniform(new UniformData(2, Uniform.UniformType.Int, i)); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m5 = "Apply Biome"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m5.Length, m5); cmd = new ComputeCommand(myGenerateBiomeShader, myBiomeTex[i].width / 32, myBiomeTex[i].height / 32); cmd.addImage(myBiomeTex[i], TextureAccess.ReadWrite, 0); cmd.renderState.setUniform(new UniformData(1, Uniform.UniformType.Int, i)); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); GL.PopDebugGroup(); } myBiomeMap.updateFaces(myBiomeTex); Renderer.device.popDebugMarker(); }
public void update() { bool elvChanged = myElevationGenerator.update(); bool heatChanged = myHeatGenerator.update(); bool moistChanged = myMoistureGenerator.update(); if (elvChanged || heatChanged || moistChanged) { Info.print("Updating Biome Map"); Renderer.device.pushDebugMarker("Update Biomes"); ComputeCommand cmd; String m2 = "Apply Elevation"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m2.Length, m2); cmd = new ComputeCommand(myApplyElevationShader, myBiome.width / 32, myBiome.height / 32); cmd.addImage(myElevationGenerator.output.output, TextureAccess.ReadOnly, 0); cmd.addImage(myBiome, TextureAccess.WriteOnly, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m3 = "Apply Heat"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m3.Length, m3); cmd = new ComputeCommand(myApplyHeatShader, myBiome.width / 32, myBiome.height / 32); cmd.addImage(myHeatGenerator.output.output, TextureAccess.ReadOnly, 0); cmd.addImage(myBiome, TextureAccess.ReadWrite, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m4 = "Apply Moisture"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m4.Length, m4); cmd = new ComputeCommand(myApplyMoistureShader, myBiome.width / 32, myBiome.height / 32); cmd.addImage(myMoistureGenerator.output.output, TextureAccess.ReadOnly, 0); cmd.addImage(myBiome, TextureAccess.ReadWrite, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m5 = "Apply Biome"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m5.Length, m5); cmd = new ComputeCommand(myGenerateBiomeShader, myBiome.width / 32, myBiome.height / 32); cmd.addImage(myBiome, TextureAccess.ReadWrite, 0); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); Renderer.device.popDebugMarker(); mySampler.updateData(); } }
void updateBiomes() { Renderer.device.pushDebugMarker("Update Biomes"); ComputeCommand cmd; String m2 = "Apply Elevation"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m2.Length, m2); cmd = new ComputeCommand(myApplyElevationShader, myBiomeMap.width / 32, myBiomeMap.height / 32); cmd.addImage(myElevationMap, TextureAccess.ReadOnly, 0); cmd.addImage(myBiomeMap, TextureAccess.WriteOnly, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m3 = "Apply Heat"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m3.Length, m3); cmd = new ComputeCommand(myApplyHeatShader, myBiomeMap.width / 32, myBiomeMap.height / 32); cmd.addImage(myHeatGenerator.output.output, TextureAccess.ReadOnly, 0); cmd.addImage(myBiomeMap, TextureAccess.ReadWrite, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m4 = "Apply Moisture"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m4.Length, m4); cmd = new ComputeCommand(myApplyMoistureShader, myBiomeMap.width / 32, myBiomeMap.height / 32); cmd.addImage(myMoistureGenerator.output.output, TextureAccess.ReadOnly, 0); cmd.addImage(myBiomeMap, TextureAccess.ReadWrite, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); String m5 = "Apply Biome"; GL.PushDebugGroup(DebugSourceExternal.DebugSourceApplication, 0, m5.Length, m5); cmd = new ComputeCommand(myGenerateBiomeShader, myBiomeMap.width / 32, myBiomeMap.height / 32); cmd.addImage(myBiomeMap, TextureAccess.ReadWrite, 0); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); GL.PopDebugGroup(); Renderer.device.popDebugMarker(); }
public override bool update(bool force = false) { if (didChange() == true || force == true) { ComputeCommand cmd = new ComputeCommand(myShaderProgram, output.width / 32, output.height / 32); cmd.addImage(source.output, TextureAccess.ReadOnly, 0); cmd.addImage(scale.output, TextureAccess.ReadOnly, 1); cmd.addImage(output, TextureAccess.WriteOnly, 2); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); return(true); } return(false); }
public override bool update(bool force = false) { if (didChange() == true || force == true) { ComputeCommand cmd = new ComputeCommand(myShaderProgram, source.output.width / 32, source.output.height / 32); cmd.renderState.setUniform(new UniformData(0, Uniform.UniformType.Float, pow)); cmd.addImage(source.output, TextureAccess.ReadOnly, 0); cmd.addImage(output, TextureAccess.WriteOnly, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); return(true); } return(false); }
public void findMinMax(Texture t) { if (mySSbo.sizeInBytes < 4 * 2 * t.width) { mySSbo.resize(4 * 2 * t.width); } ComputeCommand cmd = new ComputeCommand(myMinMaxShader, t.width / 32, t.height / 32); cmd.addImage(t, TextureAccess.ReadOnly, 0); cmd.renderState.setStorageBuffer(mySSbo.id, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.ShaderStorageBarrierBit); cmd = new ComputeCommand(myMinMaxPass2Shader, 1); cmd.renderState.setStorageBuffer(mySSbo.id, 1); cmd.renderState.setUniform(new UniformData(0, Uniform.UniformType.Int, (t.width / 32) * (t.height / 32))); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.ShaderStorageBarrierBit); }
public override bool update(bool force = false) { bool needsUpdate = false; foreach (Module m in inputs) { if (m != null && m.update(force) == true) { needsUpdate = true; } } if (needsUpdate == true) { ComputeCommand cmd = new ComputeCommand(myShaderProgram, output.width / 32, output.height / 32); cmd.renderState.setUniform(new UniformData(1, Uniform.UniformType.Int, (int)action)); int inputCount = 0; for (int i = 0; i < MAX_INPUTS; i++) { if (inputs[i] != null) { cmd.addImage(inputs[i].output, TextureAccess.ReadOnly, i); inputCount++; } } cmd.renderState.setUniform(new UniformData(0, Uniform.UniformType.Int, inputCount)); cmd.addImage(output, TextureAccess.WriteOnly, 4); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); return(true); } return(false); }
public override bool update(bool force = false) { if (didChange() == true || force == true) { ComputeCommand cmd = new ComputeCommand(myShaderProgram, output.width / 32, output.height / 32); cmd.addImage(output, TextureAccess.WriteOnly, 0); cmd.renderState.setUniform(new UniformData(0, Uniform.UniformType.Float, seed)); cmd.renderState.setUniform(new UniformData(1, Uniform.UniformType.Int, (int)method)); cmd.renderState.setUniform(new UniformData(2, Uniform.UniformType.Int, octaves)); cmd.renderState.setUniform(new UniformData(3, Uniform.UniformType.Float, frequency)); cmd.renderState.setUniform(new UniformData(4, Uniform.UniformType.Float, lacunarity)); cmd.renderState.setUniform(new UniformData(5, Uniform.UniformType.Float, H)); cmd.renderState.setUniform(new UniformData(6, Uniform.UniformType.Float, gain)); cmd.renderState.setUniform(new UniformData(7, Uniform.UniformType.Float, offset)); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.AllBarrierBits); return(true); } return(false); }
public void findMinMax(Texture[] t) { //assumes all images are same size if (mySSbo.sizeInBytes < 4 * 2 * t[0].width) { mySSbo.resize(4 * 2 * t[0].width); } for (int i = 0; i < t.Length; i++) { ComputeCommand cmd = new ComputeCommand(myMinMaxShader, t[i].width / 32, t[i].height / 32); cmd.addImage(t[i], TextureAccess.ReadOnly, 0); cmd.renderState.setStorageBuffer(mySSbo.id, 1); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.ShaderStorageBarrierBit); cmd = new ComputeCommand(myMinMaxPass2Shader, 1); cmd.renderState.setStorageBuffer(mySSbo.id, 1); cmd.renderState.setUniform(new UniformData(0, Uniform.UniformType.Int, (t[i].width / 32) * (t[i].height / 32))); cmd.execute(); GL.MemoryBarrier(MemoryBarrierFlags.ShaderStorageBarrierBit); } }