[ bokiko @ 17.11.2006. 13:06 ] @
Kreirao sam Windows formu i zelim da uz pomoc Direct3D prikazem jedan trougao na obojenoj formi.
Kod je sledeci:
Code:

    public class Form1 : System.Windows.Forms.Form
    {
        private Device device = null;
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            InitializeComponent();

            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
        }
        
        //Ovu metodu poziva nova forma u Main-u
        public void InitializeGraphics()
        {
            PresentParameters  presentParam = new PresentParameters();

            presentParam.Windowed = true;
            presentParam.SwapEffect = SwapEffect.Discard;

            device = new                                             Device(0,DeviceType.Hardware,this,CreateFlags.SoftwareVertexProcessing,presentParam);
        }

        [STAThread]
        static void Main() 
        {
            using (Form1 frm = new Form1())
            {
                frm.Show();
                frm.InitializeGraphics();
                Application.Run(frm);
            }
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            device.Clear(ClearFlags.Target,Color.CornflowerBlue,1,0);
            device.Present();

            CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[3];

            verts[0].SetPosition(new Vector3(0,1,1));
            verts[0].Color = Color.Aqua.ToArgb();

            verts[1].SetPosition(new Vector3(-1,-1,1));
            verts[1].Color = Color.Black.ToArgb();

            verts[2].SetPosition(new Vector3(1,-1,1));
            verts[2].Color = Color.Purple.ToArgb();
            
            device.BeginScene();
            device.VertexFormat = CustomVertex.PositionColored.Format;
            device.DrawUserPrimitives(PrimitiveType.TriangleList,1,verts);
            device.EndScene();

            this.Invalidate();
        }
    }


Kada pokrenem formu prokaze mi samo obojenu pozadinu. Gde gresim???
[ dragansm @ 17.11.2006. 14:05 ] @
nisam bas preterano "terao" dx pod .net ali koliko vidim event hadler za OnPaint nije nigde nakacen na formu, a to sto si promenio stil forme nece .net naterati nikad da sam izabere f-ju koja bi mogla da bude za crtanje. Takodje, zvanje invalidate u OnPaint je hmmm... NEMOJ. Pogledaj Tutorial 1 (da ga ne prepricavam) kako su "oni" to resili...
Ok. nisam video znak (c) na strani:

static void Main()
{

using (CreateDevice frm = new CreateDevice())
{
if (!frm.InitializeGraphics()) // Initialize Direct3D
{
MessageBox.Show(
"Could not initialize Direct3D. This tutorial will exit.");
return;
}
frm.Show();

// While the form is still valid, render and process messages
while(frm.Created)
{
frm.Render();
Application.DoEvents();
}
}
}
Takodje, nemoj da zoves device.Present(); pre nego ima sta da (pri)kazes (iliti, zovi ga na kraju metoda)
Pozdrav
[ bokiko @ 21.11.2006. 11:39 ] @
Problem je resen. Metod

Code:
device.Present();
  

treba da bude na kraju OnPaint-a!!!