示例#1
0
        public Generator(World world)
        {
            myWorld = world;

            myBiomeMap = new Texture(WorldParameters.theWorldSize, WorldParameters.theWorldSize, PixelInternalFormat.Rgba32f);
            myBiomeMap.setName("Biome Map");

            //setup shaders
            List <ShaderDescriptor> shadersDesc = new List <ShaderDescriptor>();

            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "World Editor.shaders.applyElevation-cs.glsl"));
            ShaderProgramDescriptor sd = new ShaderProgramDescriptor(shadersDesc);

            myApplyElevationShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "World Editor.shaders.applyHeat-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myApplyHeatShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "World Editor.shaders.applyMoisture-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myApplyMoistureShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "World Editor.shaders.applyBiome-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myGenerateBiomeShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            //setup generators
            load("../data/terrain/worldDefinitions/terrain.lua");
        }
示例#2
0
        public TerrainRenderManager(World w)
        {
            world               = w;
            world.chunkAdded   += handleChunkAdded;
            world.chunkRemoved += handleChunkRemoved;
            world.chunksReset  += handleChunksReset;

            TriangleVisualizer vis = new TriangleVisualizer(this);

            Renderer.registerVisualizer("terrain", vis);

            ShaderProgramDescriptor sd;
            ShaderProgram           sp;
            List <ShaderDescriptor> desc = new List <ShaderDescriptor>();

            desc.Add(new ShaderDescriptor(ShaderType.VertexShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-vs.glsl", ShaderDescriptor.Source.File));
            desc.Add(new ShaderDescriptor(ShaderType.GeometryShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-gs.glsl", ShaderDescriptor.Source.File));
            desc.Add(new ShaderDescriptor(ShaderType.FragmentShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-ps.glsl", ShaderDescriptor.Source.File));
            sd = new ShaderProgramDescriptor(desc, null, "terrain:perpixel");
            sp = Renderer.resourceManager.getResource(sd) as ShaderProgram;
            vis.registerEffect("forward-lighting", new PerPixelSolidEffect(sp));
            vis.registerEffect("forward-lighting", new PerPixelTransparentEffect(sp));

            desc.Clear();
            desc.Add(new ShaderDescriptor(ShaderType.VertexShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-vs.glsl", ShaderDescriptor.Source.File));
            desc.Add(new ShaderDescriptor(ShaderType.GeometryShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-gs.glsl", ShaderDescriptor.Source.File));
            desc.Add(new ShaderDescriptor(ShaderType.FragmentShader, "..\\src\\Terrain\\rendering\\shaders\\water-ps.glsl", ShaderDescriptor.Source.File));
            sd = new ShaderProgramDescriptor(desc, null, "terrain:water");
            sp = Renderer.resourceManager.getResource(sd) as ShaderProgram;
            vis.registerEffect("forward-lighting", new PerPixelWaterEffect(sp));
        }
示例#3
0
        static Canvas()
        {
            ShaderProgramDescriptor desc = new ShaderProgramDescriptor("UI.shaders.ui-vs.glsl", "UI.shaders.ui-ps.glsl");

            theShader = Renderer.resourceManager.getResource(desc) as ShaderProgram;

            //we're expecting a sheet that is 32x32 glyphs each 32pix x 32pix in size. (1024 x 1024 texture)
            theDefaultTexture = Graphics.Util.getEmbeddedTexture("UI.data.fontIconSheet.png");
            theDefaultTexture.setMinMagFilters(TextureMinFilter.NearestMipmapNearest, TextureMagFilter.Nearest);

            theGlyphs = new List <Glyph>(1024);
            float width  = theDefaultTexture.width;
            float height = theDefaultTexture.height;
            float step   = 1.0f / 32.0f;

            for (int i = 0; i < 1024; i++)
            {
                float cx = (float)(i % 32) / 32.0f;                             // X Position Of Current Character
                float cy = (float)(i / 32) / 32.0f;                             // Y Position Of Current Character
                Glyph g  = new Glyph();
                g.size          = new Vector2(32, 32);
                g.minTexCoord.X = cx;
                g.minTexCoord.Y = 1 - cy - step;
                g.maxTexCoord.X = cx + step;
                g.maxTexCoord.Y = 1 - cy;
                g.advance       = g.size * 0.6f;
                theGlyphs.Add(g);
            }
        }
示例#4
0
        public Planet(Camera c)
        {
            myCamera = c;
            for (int i = 0; i < MAX_TRI; i++)
            {
                myTris.Add(new Tri());
            }

            myFov    = MathHelper.DegreesToRadians(myCamera.fieldOfView);
            mySinFov = (float)Math.Sin(myFov);
            myCosFov = (float)Math.Cos(myFov);

            init();

            myTextureManager.init();

            //setup the shader
            List <ShaderDescriptor> desc = new List <ShaderDescriptor>();

            desc.Add(new ShaderDescriptor(ShaderType.VertexShader, "Test IcoPlanet.shaders.draw-planet-vs.glsl"));
            desc.Add(new ShaderDescriptor(ShaderType.GeometryShader, "Test IcoPlanet.shaders.draw-planet-gs.glsl"));
            desc.Add(new ShaderDescriptor(ShaderType.FragmentShader, "Test IcoPlanet.shaders.draw-planet-ps.glsl"));
            ShaderProgramDescriptor sd     = new ShaderProgramDescriptor(desc);
            ShaderProgram           shader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            myRenderCommand = new StatelessDrawElementsCommand(PrimitiveType.Triangles, (int)myIndexCount, 0, IndexBufferObject.IndexBufferDatatype.UnsignedInt);

            myRenderCommand.pipelineState.shaderState.shaderProgram = shader;
            myRenderCommand.pipelineState.vaoState.vao = new VertexArrayObject();
            myRenderCommand.pipelineState.vaoState.vao.bindVertexFormat <V3F1>(shader);
            myRenderCommand.pipelineState.generateId();

            myHeightTexture = new Texture("../data/textures/EarthLookupTable.png");
        }
示例#5
0
        public void updateShader()
        {
            String src = shader.Replace("FUNC", myFunction);
            List <ShaderDescriptor> shadersDesc = new List <ShaderDescriptor>();

            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, src, ShaderDescriptor.Source.String));
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "GpuNoise.shaders.function-cs.glsl"));
            ShaderProgramDescriptor sd = new ShaderProgramDescriptor(shadersDesc);

            myShaderProgram = Renderer.resourceManager.getResource(sd) as ShaderProgram;
        }
示例#6
0
        public Combiner(int x, int y) : base(Type.Combiner, x, y)
        {
            output = new Texture(x, y, PixelInternalFormat.R32f);
            output.setName("Combiner output");

            List <ShaderDescriptor> shadersDesc = new List <ShaderDescriptor>();

            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "GpuNoise.shaders.combiner-cs.glsl"));
            ShaderProgramDescriptor sd = new ShaderProgramDescriptor(shadersDesc);

            myShaderProgram = Renderer.resourceManager.getResource(sd) as ShaderProgram;
        }
示例#7
0
        public MainWindow(GameWindow window, World world)
        {
            myGameWindow = window;
            myWorld      = world;

            List <ShaderDescriptor> shadersDesc = new List <ShaderDescriptor>();

            shadersDesc.Add(new ShaderDescriptor(ShaderType.VertexShader, "Graphics.shaders.draw-vs.glsl"));
            shadersDesc.Add(new ShaderDescriptor(ShaderType.FragmentShader, "World Editor.shaders.display-biome-ps.glsl"));
            ShaderProgramDescriptor sd = new ShaderProgramDescriptor(shadersDesc);

            myDisplayBiomeShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;
        }
示例#8
0
        public Generator()
        {
            for (int i = 0; i < 6; i++)
            {
                myElevationTex[i] = new Texture(WorldParameters.theWorldTextureSize, WorldParameters.theWorldTextureSize, PixelInternalFormat.R32f);
                myElevationTex[i].setName(String.Format("Elevation Tex {0}", i));
                myBiomeTex[i] = new Texture(WorldParameters.theWorldTextureSize, WorldParameters.theWorldTextureSize, PixelInternalFormat.Rgba32f);
                myBiomeTex[i].setName(String.Format("Biome Tex {0}", i));
            }

            myElevationMap = new CubemapTexture(WorldParameters.theWorldTextureSize, WorldParameters.theWorldTextureSize, PixelInternalFormat.R32f);
            myElevationMap.setName("Elevation Cubemap");

            myBiomeMap = new CubemapTexture(WorldParameters.theWorldTextureSize, WorldParameters.theWorldTextureSize, PixelInternalFormat.Rgba32f);
            myBiomeMap.setName("Biome Cubemap");

            List <ShaderDescriptor> shadersDesc = new List <ShaderDescriptor>();

            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "World Editor.shaders.applyElevation-cs.glsl"));
            ShaderProgramDescriptor sd = new ShaderProgramDescriptor(shadersDesc);

            myApplyElevationShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "World Editor.shaders.applyHeat-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myApplyHeatShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "World Editor.shaders.applyMoisture-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myApplyMoistureShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "World Editor.shaders.applyBiome-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myGenerateBiomeShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            //setup generators
            myElevationGenerator   = new ModuleTree(WorldParameters.theWorldTextureSize, WorldParameters.theWorldTextureSize);
            myElevationFractals[0] = myElevationGenerator.addModule(Module.Type.Fractal, "fractal0") as Fractal;
            myElevationFractals[1] = myElevationGenerator.addModule(Module.Type.Fractal, "fractal") as Fractal;
            myElevationFractals[2] = myElevationGenerator.addModule(Module.Type.Fractal, "fractal2") as Fractal;
            myElevationFractals[3] = myElevationGenerator.addModule(Module.Type.Fractal, "fractal3") as Fractal;
            myElevationFractals[4] = myElevationGenerator.addModule(Module.Type.Fractal, "fractal4") as Fractal;
            myElevationFractals[5] = myElevationGenerator.addModule(Module.Type.Fractal, "fractal5") as Fractal;
            AutoCorrect Eac = myElevationGenerator.addModule(Module.Type.AutoCorect, "autocorrect") as AutoCorrect;

            myHeatGenerator     = createHeatGenerator();
            myMoistureGenerator = createMoistureGenerator();
        }
示例#9
0
        public void init()
        {
            world.chunkAdded   += handleChunkAdded;
            world.chunkRemoved += handleChunkRemoved;
            world.chunksReset  += handleChunksReset;

            Vector2 size = new Vector2(1920, 1280);

            myWaterColorBuffer = new Texture((int)size.X, (int)size.Y, PixelInternalFormat.Rgba8);
            myWaterDepthBuffer = new Texture((int)size.X, (int)size.Y, PixelInternalFormat.DepthComponent32f);

            List <RenderTargetDescriptor> rtdesc = new List <RenderTargetDescriptor>();

            rtdesc.Add(new RenderTargetDescriptor()
            {
                attach = FramebufferAttachment.ColorAttachment0, tex = myWaterColorBuffer
            });                                                                                                                                 //uses an existing texture
            rtdesc.Add(new RenderTargetDescriptor()
            {
                attach = FramebufferAttachment.DepthAttachment, tex = myWaterDepthBuffer
            });                                                                                                                                //uses an existing texture
            myWaterRenderTarget = new RenderTarget((int)size.X, (int)size.Y, rtdesc);

            TriangleVisualizer vis = new TriangleVisualizer(this);

            Renderer.registerVisualizer("terrain", vis);

            ShaderProgramDescriptor sd;
            ShaderProgram           sp;
            List <ShaderDescriptor> desc = new List <ShaderDescriptor>();

            desc.Add(new ShaderDescriptor(ShaderType.VertexShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-vs.glsl", ShaderDescriptor.Source.File));
            desc.Add(new ShaderDescriptor(ShaderType.GeometryShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-gs.glsl", ShaderDescriptor.Source.File));
            desc.Add(new ShaderDescriptor(ShaderType.FragmentShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-ps.glsl", ShaderDescriptor.Source.File));
            sd = new ShaderProgramDescriptor(desc, null, "terrain:perpixel");
            sp = Renderer.resourceManager.getResource(sd) as ShaderProgram;
            vis.registerEffect("forward-lighting", new PerPixelSolidEffect(sp));
            vis.registerEffect("forward-lighting", new PerPixelTransparentEffect(sp));

            desc.Clear();
            desc.Add(new ShaderDescriptor(ShaderType.VertexShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-vs.glsl", ShaderDescriptor.Source.File));
            desc.Add(new ShaderDescriptor(ShaderType.GeometryShader, "..\\src\\Terrain\\rendering\\shaders\\terrainTri-gs.glsl", ShaderDescriptor.Source.File));
            desc.Add(new ShaderDescriptor(ShaderType.FragmentShader, "..\\src\\Terrain\\rendering\\shaders\\water-ps.glsl", ShaderDescriptor.Source.File));
            sd = new ShaderProgramDescriptor(desc, null, "terrain:water");
            sp = Renderer.resourceManager.getResource(sd) as ShaderProgram;
            vis.registerEffect("forward-lighting", new PerPixelWaterEffect(sp));
        }
示例#10
0
        static Canvas()
        {
            ShaderProgramDescriptor desc = new ShaderProgramDescriptor("UI.shaders.ui-vs.glsl", "UI.shaders.ui-ps.glsl");

            theShader = Renderer.resourceManager.getResource(desc) as ShaderProgram;

            //a single white pixel
            Texture.PixelData pd = new Texture.PixelData()
            {
                pixelFormat = PixelFormat.Rgba,
                dataType    = PixelType.UnsignedByte,
                data        = new byte[] { 255, 255, 255, 255 }
            };
            theDefaultTexture = new Texture(1, 1, PixelInternalFormat.Rgba8, pd);
            theDefaultTexture.setMinMagFilters(TextureMinFilter.Linear, TextureMagFilter.Linear);
            theDefaultTexture.setWrapping(TextureWrapMode.Repeat, TextureWrapMode.Repeat, TextureWrapMode.Repeat);
        }
示例#11
0
        public void init(LuaObject config)
        {
            myBiome = new Texture((int)WorldParameters.theRegionSize, (int)WorldParameters.theRegionSize, PixelInternalFormat.Rgba32f);
            myBiome.setName("Biome Map");
            mySampler = new Sampler2D(myBiome);

            LuaObject genConfig = config["generator"];

            myElevationGenerator = ModuleFactory.create(genConfig["elevation"]);
            myHeatGenerator      = ModuleFactory.create(genConfig["heat"]);
            myMoistureGenerator  = ModuleFactory.create(genConfig["moisture"]);

            //setup shaders
            List <ShaderDescriptor> shadersDesc = new List <ShaderDescriptor>();

            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "Terrain.shaders.applyElevation-cs.glsl"));
            ShaderProgramDescriptor sd = new ShaderProgramDescriptor(shadersDesc);

            myApplyElevationShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "Terrain.shaders.applyHeat-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myApplyHeatShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "Terrain.shaders.applyMoisture-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myApplyMoistureShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "Terrain.shaders.applyBiome-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myGenerateBiomeShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            update();
        }
示例#12
0
        public AutoCorrect(int x, int y) : base(Type.AutoCorect, x, y)
        {
            output = new Texture(x, y, PixelInternalFormat.R32f);
            output.setName("AutoCorrect output");

            List <ShaderDescriptor> shadersDesc = new List <ShaderDescriptor>();

            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "GpuNoise.shaders.minmax-cs.glsl"));
            ShaderProgramDescriptor sd = new ShaderProgramDescriptor(shadersDesc);

            myMinMaxShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "GpuNoise.shaders.minmax-pass2-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myMinMaxPass2Shader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            shadersDesc = new List <ShaderDescriptor>();
            shadersDesc.Add(new ShaderDescriptor(ShaderType.ComputeShader, "GpuNoise.shaders.autocorrect-cs.glsl"));
            sd = new ShaderProgramDescriptor(shadersDesc);
            myAutoCorrectShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            reset();
        }
示例#13
0
        public void Run()
        {
            try
            {
                // Load renderer
                renderer = RenderSystem.Load("OpenGL", debugger);

                // Create render context
                var contextDesc = new RenderContextDescriptor();
                {
                    contextDesc.VideoMode.Resolution.Width  = 800;
                    contextDesc.VideoMode.Resolution.Height = 600;
                    contextDesc.VideoMode.ColorBits         = 32;
                    contextDesc.VideoMode.DepthBits         = 24;
                    contextDesc.VideoMode.StencilBits       = 8;
                    contextDesc.Samples = 8;
                }
                var context = renderer.CreateRenderContext(contextDesc);

                // Get context window
                var window = context.Surface;
                window.Shown = true;

                window.Title = $"LLGL for C# - HelloTriangle ( {renderer.Name} )";

                // Print renderer information
                Console.WriteLine("Renderer Info:");
                var info = renderer.Info;
                {
                    Console.WriteLine($"  Renderer:         {info.RendererName}");
                    Console.WriteLine($"  Device:           {info.DeviceName}");
                    Console.WriteLine($"  Vendor:           {info.VendorName}");
                    Console.WriteLine($"  Shading Language: {info.ShadingLanguageName}");
                }

                // Create vertex buffer
                var vertexFormat = new VertexFormat();
                vertexFormat.AppendAttribute(new VertexAttribute("coord", Format.RGBA32Float, 0));
                vertexFormat.AppendAttribute(new VertexAttribute("color", Format.RGBA8UNorm, 1));

                var vertices = new []
                {
                    new Vertex {
                        x = 0.0f, y = 0.5f, z = 0.0f, w = 1.0f, r = 255, g = 0, b = 0, a = 255
                    },
                    new Vertex {
                        x = 0.5f, y = -0.5f, z = 0.0f, w = 1.0f, r = 0, g = 255, b = 0, a = 255
                    },
                    new Vertex {
                        x = -0.5f, y = -0.5f, z = 0.0f, w = 1.0f, r = 0, g = 0, b = 255, a = 255
                    },
                };

                var vertexBufferDesc = new BufferDescriptor();
                {
                    vertexBufferDesc.BindFlags     = BindFlags.VertexBuffer;
                    vertexBufferDesc.Size          = vertexFormat.Attributes[0].Stride * (ulong)vertices.Length;
                    vertexBufferDesc.VertexAttribs = vertexFormat.Attributes;
                }
                var vertexBuffer = renderer.CreateBuffer(vertexBufferDesc, vertices);

                // Create shaders
                var vsDesc = new ShaderDescriptor(
                    type: ShaderType.Vertex,
                    sourceType: ShaderSourceType.CodeString,
                    source: @"
                        #version 330 core
                        in vec4 coord;
                        in vec4 color;
                        out vec4 vColor;
                        void main() {
                            gl_Position = coord;
                            vColor = color;
                        }
                    "
                    );

                vsDesc.Vertex.InputAttribs = vertexFormat.Attributes;

                var fsDesc = new ShaderDescriptor(
                    type: ShaderType.Fragment,
                    sourceType: ShaderSourceType.CodeString,
                    source: @"
                        #version 330 core
                        in vec4 vColor;
                        out vec4 fColor;
                        void main() {
                            fColor = vColor;
                        }
                    "
                    );

                var vertShader = renderer.CreateShader(vsDesc);
                var fragShader = renderer.CreateShader(fsDesc);

                var shaderProgramDesc = new ShaderProgramDescriptor();
                {
                    shaderProgramDesc.VertexShader   = vertShader;
                    shaderProgramDesc.FragmentShader = fragShader;
                }
                var shaderProgram = renderer.CreateShaderProgram(shaderProgramDesc);

                if (shaderProgram.HasErrors)
                {
                    throw new System.IO.InvalidDataException(shaderProgram.Report);
                }

                // Create graphics pipeline
                var pipelineDesc = new GraphicsPipelineDescriptor();
                {
                    pipelineDesc.ShaderProgram = shaderProgram;
                    pipelineDesc.Rasterizer.MultiSampleEnabled = true;
                }
                var pipeline = renderer.CreatePipelineState(pipelineDesc);

                // Get command queue
                var cmdQueue  = renderer.CommandQueue;
                var cmdBuffer = renderer.CreateCommandBuffer();

                cmdBuffer.SetClearColor(0.1f, 0.1f, 0.2f, 1.0f);

                // Render loop
                while (window.ProcessEvents())
                {
                    cmdBuffer.Begin();
                    {
                        cmdBuffer.SetVertexBuffer(vertexBuffer);

                        cmdBuffer.BeginRenderPass(context);
                        {
                            cmdBuffer.Clear(ClearFlags.Color);
                            cmdBuffer.SetViewport(new Viewport(context.Resolution));
                            cmdBuffer.SetPipelineState(pipeline);
                            cmdBuffer.Draw(3, 0);
                        }
                        cmdBuffer.EndRenderPass();
                    }
                    cmdBuffer.End();
                    cmdQueue.Submit(cmdBuffer);

                    context.Present();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.WriteLine("press any key to continue ...");
                Console.ReadKey();
            }
            finally
            {
                RenderSystem.Unload(renderer);
            }
        }
示例#14
0
文件: Program.cs 项目: NoFr1ends/LLGL
        public void Run()
        {
            try
            {
                // Load renderer
                renderer = RenderSystem.Load("OpenGL", debugger);

                // Create render context
                var contextDesc = new RenderContextDescriptor();
                {
                    contextDesc.VideoMode.Resolution.Width  = 800;
                    contextDesc.VideoMode.Resolution.Height = 600;
                    contextDesc.VideoMode.ColorBits         = 32;
                    contextDesc.VideoMode.DepthBits         = 24;
                    contextDesc.VideoMode.StencilBits       = 8;
                }
                context = renderer.CreateRenderContext(contextDesc);

                // Get context window
                var window = context.Surface;
                window.Shown = true;

                window.Title = $"LLGL for C# - Texturing ( {renderer.Name} )";

                // Print renderer information
                Console.WriteLine("Renderer Info:");
                var info = renderer.Info;
                {
                    Console.WriteLine($"  Renderer:         {info.RendererName}");
                    Console.WriteLine($"  Device:           {info.DeviceName}");
                    Console.WriteLine($"  Vendor:           {info.VendorName}");
                    Console.WriteLine($"  Shading Language: {info.ShadingLanguageName}");
                }

                // Create vertex buffer
                var vertexFormat = new VertexFormat();
                vertexFormat.AppendAttribute(new VertexAttribute("coord", Format.RG32Float));
                vertexFormat.AppendAttribute(new VertexAttribute("texCoord", Format.RG32Float));

                const float uvScale = 10.0f;

                var vertices = new Vertex[]
                {
                    new Vertex(-0.5f, -0.5f, 0.0f, uvScale),
                    new Vertex(-0.5f, +0.5f, 0.0f, 0.0f),
                    new Vertex(+0.5f, -0.5f, uvScale, uvScale),
                    new Vertex(+0.5f, +0.5f, uvScale, 0.0f),
                };

                var vertexBufferDesc = new BufferDescriptor();
                {
                    vertexBufferDesc.BindFlags           = BindFlags.VertexBuffer;
                    vertexBufferDesc.Size                = vertexFormat.Stride * (ulong)vertices.Length;
                    vertexBufferDesc.VertexBuffer.Format = vertexFormat;
                }
                var vertexBuffer = renderer.CreateBuffer(vertexBufferDesc, vertices);

                // Create shaders
                var vertShader = renderer.CreateShader(
                    new ShaderDescriptor(
                        type: ShaderType.Vertex,
                        sourceType: ShaderSourceType.CodeString,
                        source: @"
                            #version 330 core
                            in vec2 coord;
                            in vec2 texCoord;
                            out vec2 vTexCoord;
                            void main() {
                                gl_Position = vec4(coord, 0, 1);
                                vTexCoord = texCoord;
                            }
                        "
                        )
                    );
                var fragShader = renderer.CreateShader(
                    new ShaderDescriptor
                    (
                        type: ShaderType.Fragment,
                        sourceType: ShaderSourceType.CodeString,
                        source: @"
                            #version 330 core
                            in vec2 vTexCoord;
                            out vec4 fColor;
                            uniform sampler2D tex;
                            void main() {
                                fColor = texture(tex, vTexCoord);
                            }
                        "
                    )
                    );

                var shaderProgramDesc = new ShaderProgramDescriptor();
                {
                    shaderProgramDesc.VertexFormats.Add(vertexFormat);
                    shaderProgramDesc.VertexShader   = vertShader;
                    shaderProgramDesc.FragmentShader = fragShader;
                }
                var shaderProgram = renderer.CreateShaderProgram(shaderProgramDesc);

                if (shaderProgram.HasErrors)
                {
                    throw new Exception(shaderProgram.Report);
                }

                // Create pipeline layout
                var pipelineLayoutDesc = new PipelineLayoutDescriptor();
                {
                    pipelineLayoutDesc.Bindings.Add(
                        new BindingDescriptor(ResourceType.Texture, BindFlags.Sampled, StageFlags.FragmentStage, 0)
                        );
                    pipelineLayoutDesc.Bindings.Add(
                        new BindingDescriptor(ResourceType.Sampler, 0, StageFlags.FragmentStage, 0)
                        );
                }
                var pipelineLayout = renderer.CreatePipelineLayout(pipelineLayoutDesc);

                // Create graphics pipeline
                var pipelineDesc = new GraphicsPipelineDescriptor();
                {
                    pipelineDesc.ShaderProgram                 = shaderProgram;
                    pipelineDesc.PipelineLayout                = pipelineLayout;
                    pipelineDesc.PrimitiveTopology             = PrimitiveTopology.TriangleStrip;
                    pipelineDesc.Blend.Targets[0].BlendEnabled = true;
                }
                pipeline = renderer.CreateGraphicsPipeline(pipelineDesc);

                // Create texture
                var imageDesc = new SrcImageDescriptor <RGBA>();
                {
                    imageDesc.Format   = ImageFormat.RGBA;
                    imageDesc.DataType = DataType.UInt8;
                    imageDesc.Data     = new RGBA[4];
                    imageDesc.Data[0]  = new RGBA(255, 0, 0, 255);
                    imageDesc.Data[1]  = new RGBA(0, 255, 0, 255);
                    imageDesc.Data[2]  = new RGBA(0, 0, 0, 0);
                    imageDesc.Data[3]  = new RGBA(0, 0, 0, 0);
                }
                var textureDesc = new TextureDescriptor();
                {
                    textureDesc.Type   = TextureType.Texture2D;
                    textureDesc.Extent = new Extent3D(2, 2, 1);
                }
                var texture = renderer.CreateTexture(textureDesc, imageDesc);

                // Create sampler
                var samplerDesc = new SamplerDescriptor();
                {
                    samplerDesc.MagFilter = SamplerFilter.Nearest;
                }
                var sampler = renderer.CreateSampler(samplerDesc);

                // Create resource heap
                var resourceHeapDesc = new ResourceHeapDescriptor();
                {
                    resourceHeapDesc.PipelineLayout = pipelineLayout;
                    resourceHeapDesc.ResourceViews.Add(new ResourceViewDescriptor(texture));
                    resourceHeapDesc.ResourceViews.Add(new ResourceViewDescriptor(sampler));
                }
                var resourceHeap = renderer.CreateResourceHeap(resourceHeapDesc);

                // Get command queue
                cmdQueue  = renderer.CommandQueue;
                cmdBuffer = renderer.CreateCommandBuffer();

                cmdBuffer.SetClearColor(0.1f, 0.1f, 0.2f, 1.0f);

                // Render loop
                while (window.ProcessEvents())
                {
                    cmdBuffer.Begin();
                    {
                        cmdBuffer.SetVertexBuffer(vertexBuffer);

                        cmdBuffer.BeginRenderPass(context);
                        {
                            cmdBuffer.Clear(ClearFlags.Color);
                            cmdBuffer.SetViewport(new Viewport(0, 0, context.Resolution.Width, context.Resolution.Height));

                            cmdBuffer.SetGraphicsPipeline(pipeline);
                            cmdBuffer.SetGraphicsResourceHeap(resourceHeap);

                            cmdBuffer.Draw(4, 0);
                        }
                        cmdBuffer.EndRenderPass();
                    }
                    cmdBuffer.End();
                    cmdQueue.Submit(cmdBuffer);

                    context.Present();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.WriteLine("press any key to continue ...");
                Console.ReadKey();
            }
            finally
            {
                RenderSystem.Unload(renderer);
            }
        }
示例#15
0
        static RenderCubemapSphere()
        {
            theOrientation = Matrix4.CreateFromQuaternion(new Quaternion(0f, 0f, 0f));

            List <ShaderDescriptor> shadersDesc = new List <ShaderDescriptor>();

            shadersDesc.Add(new ShaderDescriptor(ShaderType.VertexShader, "GpuNoise.shaders.cube-vs.glsl"));
            shadersDesc.Add(new ShaderDescriptor(ShaderType.FragmentShader, "GpuNoise.shaders.cube-ps.glsl"));

            ShaderProgramDescriptor sd = new ShaderProgramDescriptor(shadersDesc);

            theShader = Renderer.resourceManager.getResource(sd) as ShaderProgram;

            theVBO = new VertexBufferObject <V3>(BufferUsageHint.StaticDraw);
            theIBO = new IndexBufferObject(BufferUsageHint.StaticDraw);

            int lats    = 25;
            int longs   = 25;
            int vertIdx = 0;

            V3[]     verts = new V3[(lats + 1) * (longs + 1)];
            ushort[] index = new ushort[lats * longs * 6];

            for (int i = 0; i <= lats; i++)
            {
                float theta    = (float)i * (float)Math.PI / lats;
                float sinTheta = (float)Math.Sin(theta);
                float cosTheta = (float)Math.Cos(theta);

                for (int j = 0; j <= longs; j++)
                {
                    float phi    = (float)j * (float)(Math.PI * 2) / longs;
                    float sinPhi = (float)Math.Sin(phi);
                    float cosPhi = (float)Math.Cos(phi);

                    float x = cosPhi * sinTheta;
                    float y = sinPhi * sinTheta;
                    float z = cosTheta;
                    //          float u = 1 - (j / longs);
                    //          float v = 1- (i / lats);

                    V3 temp = new V3();
                    temp.Position    = new Vector3(x, y, z);
                    verts[vertIdx++] = temp;
                }
            }

            int indexIdx = 0;

            for (int i = 0; i < lats; i++)
            {
                for (int j = 0; j < longs; j++)
                {
                    ushort first  = (ushort)((i * (longs + 1)) + j);
                    ushort second = (ushort)(first + longs + 1);
                    index[indexIdx++] = first; index[indexIdx++] = second; index[indexIdx++] = (ushort)(first + 1);
                    index[indexIdx++] = second; index[indexIdx++] = (ushort)(second + 1); index[indexIdx++] = (ushort)(first + 1);
                }
            }

            theVBO.setData(verts);
            theIBO.setData(index);

            theVAO = new VertexArrayObject();
            theVAO.bindVertexFormat <V3>(theShader);

            thePipeline = new PipelineState();
            thePipeline.shaderState.shaderProgram = theShader;
            thePipeline.vaoState.vao = theVAO;
            thePipeline.generateId();
        }