示例#1
0
        /// <summary>
        /// Initializes the GL host.
        /// </summary>
        private void InitOpenGL()
        {
            RenderStateControl renderControl = new RenderStateControl(renderState);

            DiffusionBuffers     buffers       = new DiffusionBuffers();
            DiffusionPathControl bufferControl = new DiffusionPathControl(buffers);

            //shaders
            DefaultShader  pointShader    = new DefaultShader("shaders/basic.vert", "shaders/basic.frag");
            TexturedShader imageShader    = new TexturedShader("shaders/tex.vert", "shaders/tex.frag");
            TexturedShader diffuseShader  = new TexturedShader("shaders/tex.vert", "shaders/diffuse.frag");
            NormalShader   lineShader     = new NormalShader("shaders/normal.vert", "shaders/normal.geom", "shaders/normal.frag");
            NormalShader   endPointShader = new NormalShader("shaders/normal.vert", "shaders/endpoints.geom", "shaders/normal.frag");

            renderer = new DiffusionRenderer(renderState,
                                             editorState,
                                             buffers,
                                             pointShader,
                                             imageShader,
                                             diffuseShader,
                                             lineShader,
                                             endPointShader);

            //Init GL
            GLControl control = new GLControl(new OpenTK.Graphics.GraphicsMode(32, 24, 8, 4));

            this.glHost = new GLControlHost(control,
                                            editorState,
                                            editorControl,
                                            renderer,
                                            renderControl,
                                            bufferControl);

            this.glHost.Child         = control;
            this.glHost.PointClicked += glHost_PointClicked;
        }
示例#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();
            //}
        }