Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.07.2012, 14:39

[SlimDX] Sprites Rendern

Hallo leute,

ich wollte mal SlimDX ausprobieren und hab versucht ein Fenster zu erstellen wo ein bild drauf gerendert wird, nur leider klappt es nich... Aus einen mir unersichtlichen Grund führt er die Render() und Show() nicht aus :/

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 public partial class Form1 : Form
    {
        private Direct3D d3d;
        private Device device;

        private Sprite sprite;
        private Texture texture;

        public Form1()
        {
            InitializeComponent();
        }

        private void InitDevice()
        {
            d3d = new Direct3D();

            PresentParameters pp = new PresentParameters();
            pp.SwapEffect = SwapEffect.Discard;
            pp.DeviceWindowHandle = Handle;
            pp.Windowed = true;
            pp.BackBufferWidth = ClientSize.Width;
            pp.BackBufferHeight = ClientSize.Height;
            pp.BackBufferFormat = Format.A8R8G8B8;

            device = new Device(d3d, 0, DeviceType.Hardware, Handle, CreateFlags.HardwareVertexProcessing, pp);
        }

        public void Render()
        {
            device.Clear(ClearFlags.Target, new Color4(Color.White), 0, 0);
            device.BeginScene();
            sprite.Begin(SpriteFlags.None);
            sprite.Draw(texture, new Vector3(25, 25, 0), new Vector3(10, 10, 0), new Color4(Color.White));
            sprite.End();
            device.EndScene();
            device.Present();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitDevice();
            sprite = new Sprite(device);
            texture = Texture.FromFile(device, "Content/ship.png");
                //Show() und Render() werden nicht ausgeführt ... Die Form öffnet sich aber hiernach dennoch, aber grau statt weiß und ohne meinen sprite :/
            Show();
            Render();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            device.Dispose();
            d3d.Dispose();
            sprite.Dispose();
            texture.Dispose();
        } 
    }


weiss einer wo das problem liegt?

2

09.07.2012, 14:50

Probier es einmal so:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public partial class Form1 : Form
    {
        private Direct3D d3d;
        private Device device;

        private Sprite sprite;
        private Texture texture;

        public Form1()
        {
            InitializeComponent();
            InitDevice();
            sprite = new Sprite(device);
            texture = Texture.FromFile(device, "Content/ship.png");
                //Show() und Render() werden nicht ausgeführt ... Die Form öffnet sich aber hiernach dennoch, aber grau statt weiß und ohne meinen sprite :/
            Show();
            Render();
        }

        private void InitDevice()
        {
            d3d = new Direct3D();

            PresentParameters pp = new PresentParameters();
            pp.SwapEffect = SwapEffect.Discard;
            pp.DeviceWindowHandle = Handle;
            pp.Windowed = true;
            pp.BackBufferWidth = ClientSize.Width;
            pp.BackBufferHeight = ClientSize.Height;
            pp.BackBufferFormat = Format.A8R8G8B8;

            device = new Device(d3d, 0, DeviceType.Hardware, Handle, CreateFlags.HardwareVertexProcessing, pp);
        }

        public void Render()
        {
            device.Clear(ClearFlags.Target, new Color4(Color.White), 0, 0);
            device.BeginScene();
            sprite.Begin(SpriteFlags.None);
            sprite.Draw(texture, new Vector3(25, 25, 0), new Vector3(10, 10, 0), new Color4(Color.White));
            sprite.End();
            device.EndScene();
            device.Present();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            device.Dispose();
            d3d.Dispose();
            sprite.Dispose();
            texture.Dispose();
        } 
    }

3

09.07.2012, 14:59

ok, hab ich gemacht es gibt eine Direct3D9Exception "D3DXERR_INVALIDDATA: Invalid data (-2005529767)"
bei

C#-Quelltext

1
texture = Texture.FromFile(device, "Content/ship.png");

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

4

09.07.2012, 15:46

Du rufst die render methode nur ein einziges mal auf.
Natürlich wird dann nichts angezeigt, weil das was du gerendert hast wieder vom Fenster übermalt wird.

Schau dir doch mal die Beispiele an, dort wird gezeigt, wie man ein dreieck rendert.

5

09.07.2012, 16:18

jain, hab das problem gefunden ... es war mehr ein guter alter schussel-fehler ... hab vergessen das bild auch ins verzeichnis kopieren zu lassen ^^
jedenfalls wird es nun angezeig

ich weiss das ich die render methode mehr mals aufrufen muss um neue bilder zu malen etc. aber übermalt wird nix, sollte es denn so sein?

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

6

09.07.2012, 16:38

Äh nein. Das war natürlich schwachsinn was ich da geschrieben hab...

Werbeanzeige