private static bool DrawToWindow(IntPtr hWnd, FramebufferData framebufferData, int destX = 0, int destY = 0, int srcX = 0,
                                         int srcY   = 0, int width = -1,
                                         int height = -1)
        {
            if (framebufferData.Data.IsDisposed)
            {
                throw new ObjectDisposedException("Framebuffer");
            }

            if (hWnd == IntPtr.Zero)
            {
                return(false);
            }

            var hDC = UnmanagedMethods.GetDC(hWnd);

            if (hDC == IntPtr.Zero)
            {
                return(false);
            }

            try
            {
                DrawToDevice(framebufferData, hDC, destX, destY, srcX, srcY, width, height);
            }
            finally
            {
                UnmanagedMethods.ReleaseDC(hWnd, hDC);
            }

            return(true);
        }
Beispiel #2
0
        public override void OnAttach()
        {
            app = Application.GetApplication();
            var window = app.GetWindow();

            Renderer.SetClearColor(Color.White.ToVec4());

            orthoCamera = new OrthographicCamera(-16f, 16f, -9f, 9f);
            //persCamera = new PerspectiveCamera(45, 16f/9f, 0.01f, 1000);

            //selectedCamera = persCamera;
            //persCamera.Position = new OpenTK.Mathematics.Vector3(0, 0, -1);

            float[] verticies =
            {
                -0.5f, -0.5f,                                                        0.0f, /* Colors  0.0f, 0.0f, 0.0f, */ /* Tex Coords */ 0.0f, 0.0f,
                0.5f,   0.5f,                                                        0.0f, /* Colors  0.0f, 0.0f, 0.0f, */ /* Tex Coords */ 1.0f, 1.0f,
                -0.5f,  0.5f,                                                        0.0f, /* Colors  0.0f, 0.0f, 0.0f, */ /* Tex Coords */ 0.0f, 1.0f,
                0.5f,  -0.5f,                                                        0.0f, /* Colors  0.0f, 0.0f, 0.0f, */ /* Tex Coords */ 1.0f, 0.0f,
            };

            uint[] indices =
            {
                0, 1, 2,
                0, 3, 1
            };

            shader = new Shader("Assets/Shaders/vertex.glsl", "Assets/Shaders/fragment.glsl", true);

            vertexBuffer = new VertexBuffer(verticies, verticies.Length * sizeof(float));
            indexBuffer  = new IndexBuffer(indices, indices.Length * sizeof(uint));

            BufferLayout layout = new BufferLayout(
                new BufferElement("positions", ShaderDataType.Float3),
                new BufferElement("texCoords", ShaderDataType.Float2)
                //new BufferElement("colors", ShaderDataType.Float3)
                );

            vertexBuffer.SetLayout(layout);

            vertexArray = new VertexArray();
            vertexArray.AddVertexBuffer(vertexBuffer);
            vertexArray.SetIndexBuffer(indexBuffer);

            checkerboard = new Texture2D("Assets/Textures/Checkerboard.png");
            cherno       = new Texture2D("Assets/Textures/ChernoLogo.png");

            shader.SetInt("uTexture", 0);

            vendorString   = GL.GetString(StringName.Vendor);
            rendererString = GL.GetString(StringName.Renderer);
            versionString  = GL.GetString(StringName.Version);

            FramebufferData fbData = new FramebufferData(1280, 720);

            framebuffer = new Framebuffer(fbData);

            viewportSize = new Vector2(framebuffer.FramebufferData.Width, framebuffer.FramebufferData.Height);
        }
        private static void DrawToDevice(FramebufferData framebufferData, IntPtr hDC, int destX = 0, int destY = 0, int srcX = 0,
                                         int srcY   = 0, int width = -1,
                                         int height = -1)
        {
            if (width == -1)
            {
                width = framebufferData.Size.Width;
            }
            if (height == -1)
            {
                height = framebufferData.Size.Height;
            }

            var bmpInfo = framebufferData.Header;

            UnmanagedMethods.SetDIBitsToDevice(hDC, destX, destY, (uint)width, (uint)height, srcX, srcY,
                                               0, (uint)framebufferData.Size.Height, framebufferData.Data.Address, ref bmpInfo, 0);
        }