Własna kontrolka DirectX

0

Witam,
chciałbym w swojej aplikacji (projekt na uczelnię) mieć kontrolkę, za pomocą której będę ładnie wyświetlał wykresy w 3D.
Korzystając z tutoriali dostępnych w necie wyskrobałem już coś takiego:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace gk3
{
    class Plot3D : PictureBox
    {
        public Color background = Color.DarkSlateBlue;
        private Device device;
        private float angle = 0f;

        public Plot3D()
        {
            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
            this.InitializeDevice();
        }

        public void InitializeDevice()
        {
            PresentParameters presentParams = new PresentParameters();
            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;
            device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
        }

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            device.Clear(ClearFlags.Target, background, 1.0f, 0);
            device.Present();
            this.Invalidate();
        }
    }
}
 

Tyle, że jak dodam tę kontrolkę do forma to strasznie mryga (na przemian kolor tła (ciemno-niebieski) i czarny).
Ustawiłem w formie DoubleBuffered na true.
W czym leży problem?

0

Trzeba ustawić DoubleBuffered kontrolki po której rysujesz, a nie formy.

PropertyInfo property = typeof(Control).GetProperty("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance);
property.SetValue(control, true, null);
0

próbowałem zrobić tak jak mówisz (zarówno w konstruktorze mojej kontrolki jak i w samym Formie odwołując się do stworzonego wcześniej elementu) ale dalej "mryga"

0

Nie wiem, czy dobrze myślę, ale czy zamiast this.Invalidate() nie powinno być base.OnPaint(e) ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1