예제 #1
0
        protected internal override void OnLoad()
        {
            base.OnLoad();

            renderTexture = new RenderTexture(MMW.RenderResolution);
            renderTexture.ColorFormat0 = MMW.Configuration.DefaultPixelFormat;
            renderTexture.Load();

            ssaoShader = (SSAOShader)MMW.GetAsset <Shader>("SSAO");
            if (ssaoShader == null)
            {
                ssaoShader = new SSAOShader();
                MMW.RegistAsset(ssaoShader);
            }

            if (GameObject != null)
            {
                Camera        = GameObject.GetComponent <Camera>();
                RenderTexture = Camera.TargetTexture;
            }

            orthoMatrix = Matrix4.CreateOrthographicOffCenter(-1, 1, -1, 1, -1, 1);
        }
예제 #2
0
        public static void Initialize(Settings settings)
        {
            Running = false;
            Time    = new Stopwatch();
            Window  = new NativeWindow(settings.ResolutionWidth, settings.ResolutionHeight, "Watchtower",
                                       GameWindowFlags.Default, GraphicsMode.Default, DisplayDevice.GetDisplay((DisplayIndex)settings.Display));
            switch (settings.WindowMode)
            {
            case WindowMode.Window:
                Window.WindowBorder = WindowBorder.Fixed;
                Window.WindowState  = WindowState.Normal;
                break;

            case WindowMode.BorderlessWindow:
                Window.WindowBorder = WindowBorder.Hidden;
                Window.WindowState  = WindowState.Normal;
                break;

            case WindowMode.Fullscreen:
                Window.WindowBorder = WindowBorder.Hidden;
                Window.WindowState  = WindowState.Fullscreen;
                break;

            default:
                Window.WindowBorder = WindowBorder.Fixed;     // TODO: log
                Window.WindowState  = WindowState.Normal;
                break;
            }

            GraphicsContext = new GraphicsContext(GraphicsMode.Default, Window.WindowInfo);
            GraphicsContext.LoadAll();
            GraphicsContext.SwapInterval = 0;
            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.Blend);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
            GL.ClearColor(15 / 255f, 15 / 255f, 15 / 255f, 1);

            fbshader     = new FramebufferShader();
            NormalBuffer = new Framebuffer(1280, 720);
            ColorBuffer  = new Framebuffer(1280, 720);
            DepthBuffer  = new Framebuffer(1280, 720);
            FinalBuffer  = new Framebuffer(1280, 720);

            SSAOShader   = new SSAOShader();
            normalShader = new NormalShader();
            ldshader     = new LinearDepthShader();

            FramebufferMesh = new Mesh(new VertexData
            {
                Vertices = new float[]
                {
                    -1, -1, 0,
                    1, -1, 0,
                    1, 1, 0,
                    -1, 1, 0
                },
                TextureCoordinates = new float[]
                {
                    0, 0,
                    1, 0,
                    1, 1,
                    0, 1
                },
                Indices = new uint[]
                {
                    0, 1, 2,
                    2, 3, 0
                }
            }, new FramebufferShader());

            Camera          = new Camera();
            Camera.Position = new Vector3(0, 128, 0);
            Camera.Yaw      = 180;

            // TEMP
            TestShader = new BasicShader();

            Console.WriteLine("TESTSHADER");
            Console.WriteLine(TestShader.GetCompileStatus(ShaderType.VertexShader));
            Console.WriteLine(TestShader.GetCompileStatus(ShaderType.FragmentShader));
            Console.WriteLine(TestShader.GetCompileLog(ShaderType.VertexShader));
            Console.WriteLine(TestShader.GetCompileLog(ShaderType.FragmentShader));

            Console.WriteLine("NORMALSHADER");
            Console.WriteLine(normalShader.GetCompileStatus(ShaderType.VertexShader));
            Console.WriteLine(normalShader.GetCompileStatus(ShaderType.FragmentShader));
            Console.WriteLine(normalShader.GetCompileLog(ShaderType.VertexShader));
            Console.WriteLine(normalShader.GetCompileLog(ShaderType.FragmentShader));

            Console.WriteLine("LINEARDEPTHSHADER");
            Console.WriteLine(ldshader.GetCompileStatus(ShaderType.VertexShader));
            Console.WriteLine(ldshader.GetCompileStatus(ShaderType.FragmentShader));
            Console.WriteLine(ldshader.GetCompileLog(ShaderType.VertexShader));
            Console.WriteLine(ldshader.GetCompileLog(ShaderType.FragmentShader));

            Console.WriteLine("SSAOSHADER");
            Console.WriteLine(SSAOShader.GetCompileStatus(ShaderType.VertexShader));
            Console.WriteLine(SSAOShader.GetCompileStatus(ShaderType.FragmentShader));
            Console.WriteLine(SSAOShader.GetCompileLog(ShaderType.VertexShader));
            Console.WriteLine(SSAOShader.GetCompileLog(ShaderType.FragmentShader));

            chunk = new Chunk();
            for (int x = 0; x < 16; x += 2)
            {
                for (int y = 0; y < 128; y += 2)
                {
                    for (int z = 0; z < 16; z += 2)
                    {
                        chunk.Blocks[x, y, z].Active = true;
                    }
                }
            }
            for (int x = 0; x < 16; x++)
            {
                for (int y = 0; y < 128; y++)
                {
                    for (int z = 0; z < 16; z++)
                    {
                        chunk.Blocks[x, y, z].Color = new Vector3((x / 15f), 40 / 255f, 94 / 255f);
                    }
                }
            }
            chunk.Update(TestShader);

            GenerateChunksFromThatMapYouKnow();

            //  TestMesh = new Mesh(Block.BuildCube(true, true, false, true, false, true), TestShader);
            //  TestMesh.Transform = Matrix4.CreateTranslation(22, 22, 22);

            Camera.Yaw = 90;
            // TEMP
            Vector3 posssssssss = new Vector3(141.4232f, 103.7891f, 35.3471f);

            Camera.Position = posssssssss;

            Window.Visible = true;
            Running        = true;
            Time.Start();

            double previous = Time.Elapsed.TotalMilliseconds;

            while (Running)
            {
                double current = Time.Elapsed.TotalMilliseconds;
                double elapsed = current - previous;
                // processInput?
                Update(elapsed);
                Render();
                previous = current;
            }
            //int tickRate = 512;
            //double millisecondsPerUpdate = 1000.0 / tickRate;
            //double previous = Time.Elapsed.TotalMilliseconds;
            //double lag = 0;
            // Old loop
            //while (Running)
            //{
            //    double current = Time.Elapsed.TotalMilliseconds;
            //    double elapsed = current - previous;
            //    previous = current;
            //    lag += elapsed;

            //    // processinput

            //    while (lag >= millisecondsPerUpdate) // temp
            //    {
            //        Update(lag / millisecondsPerUpdate);
            //        lag -= millisecondsPerUpdate;
            //    }

            //    Render();
            //}
        }