www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheDirectX-Forum

Luemmel

Gepostet:
03.08.2011 14:54

Flackern beim Linien malen  
Hallo,
ich habe nach einiger Zeit geschafft mit den verschiedenen VS Express Versionen klarzukommen und meine ersten Schritte mit DirectX gemacht. Nun habe ich folgendes Problem:

private void ClearWindow()
{
m_Device.Clear(ClearFlags.Target, Color.LightGray, 0.0f, 0);
}

private void MaleHorizontaleLinien()
{
CustomVertex.TransformedColored vertex = new CustomVertex.TransformedColored[20]; //10 Linien malen
for (int i = 0; i < 10; i++)
{
y = 50 + i * 10;
//für Linie 1: i=0: Index 0 und 1;;; für Linie 2: i=1: Index 2 und 3 usw.
vertex[i * 2].Position = new Vector4(10, y, 0, 0f);
vertex[i * 2].Color = Color.Black.ToArgb();
vertex[i * 2 + 1].Position = new Vector4(100, y, 0, 0f);
vertex[i * 2 + 1].Color = Color.Black.ToArgb();
}
MalEs(vertex);
}

private void MaleVertikaleLinien()
{
CustomVertex.TransformedColored vertex = new CustomVertex.TransformedColored[20]; //10 Linien malen
for (int i = 0; i < 10; i++)
{
x = 50 + i * 10;
//für Linie 1: i=0: Index 0 und 1;;; für Linie 2: i=1: Index 2 und 3 usw.
vertex[i * 2].Position = new Vector4(x, 10, 0, 0f);
vertex[i * 2].Color = Color.Black.ToArgb();
vertex[i * 2 + 1].Position = new Vector4(x, 100, 0, 0f);
vertex[i * 2 + 1].Color = Color.Black.ToArgb();
}
MalEs(vertex);
}

private void MalEs(CustomVertex.TransformedColored[] v)
{
m_Device.BeginScene();
m_Device.VertexFormat = CustomVertex.TransformedColored.Format;
m_Device.DrawUserPrimitives(PrimitiveType.LineList, 10, v);
m_Device.EndScene();
m_Device.Present();
}

protected override void OnPaint(PaintEventArgs e)
{
ClearWindow();
MaleHorizontaleLinien();
MaleVertikaleLinien();
this.Invalidate(); //directx resize issue
}

Im Konstruktor habe ich noch das geschrieben:
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); //directx resize issue


Nun flackert das Ganze leider. Ich vermute das er das zweimal ausführen von MalEs nicht mag. Aber ich würde gerne verschiedene Elemente malen ohne sie alle in ein einziges Vertex-Array schreiben zu müssen. Gibt es da eine elegante Möglichkeit?
Nochmal zum Verständnis was ich möchte: Später soll in MaleHorizontaleLinien und in MaleVertikaleLinien und evtl. in weiteren Methoden mehrere verschiedene Dinge gemalt werden. Wenn ich dafür ein Array benutze und alles in eine Methode packe, wird es mir zu unübersichtlich. Die einzelnen Methoden sollen also erhalten bleiben.

Vielen Dank schonmal für Tips.
Zum Seitenanfang