コード例 #1
0
ファイル: autocorrect.cs プロジェクト: an87li/gameEngine
        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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
ファイル: region.cs プロジェクト: bholcomb/gameEngine
        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();
            }
        }
コード例 #4
0
        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();
        }
コード例 #5
0
ファイル: scale.cs プロジェクト: bholcomb/gameEngine
        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);
        }
コード例 #6
0
ファイル: pow.cs プロジェクト: bholcomb/gameEngine
        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);
        }
コード例 #7
0
ファイル: autocorrect.cs プロジェクト: an87li/gameEngine
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
ファイル: autocorrect.cs プロジェクト: an87li/gameEngine
        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);
            }
        }