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

15.07.2014, 14:39

OpenTK und Gwen Problem

Hallo,

ich schreibe gerade eine kleine Engine für mein Spiel und wollte eine GUI mit Gwen.Net einbauen.
Habe Gwen schön öfter genutzt aber das Problem ist mir neu.
Immer wenn ich das Canvas von Gwen zeichne dann überschreibt er meine jetzige Scene (Player, Objekte ...) und nach dem Überschreiben zeichnet er nichts.
Beudetet -> meine Szene wird gezeichnet Gwen löscht alles und Punkt.
Aber wenn ich das Scene Rendering einkommentiere dann funktioniert es.
Vielleicht könnte ihr mir helfen.
Noch etwas:
Habe auch mal ein Testprojekt erstellt das funktioniert dort also es liegt wahrscheinlich irgendwie hier dran und nicht an OpenTK bzw. Gwen

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
//Wird extern vorm Rendern aufgerufen
public void Clear()
        {
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
        }
//Wird bei OnResize von OpenTK aufgerufen
        public void RefreshView()
        {
            GL.Viewport(0, 0, Engine.CurrentWidth, Engine.CurrentHeight);
            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadIdentity();
            GL.Ortho(0, Engine.CurrentWidth, Engine.CurrentHeight, 0, -1, 1);
        }
//zeichne alle GameObjects
        public void Render(Canvas canvas)
        {
            GL.PushMatrix();

            GL.Translate(Position.X, Position.Y, 0);
            GL.Scale(Size.X, Size.Y, 0);

            GL.Rotate(Rotation.X, 1, 0, 0);
            GL.Rotate(Rotation.Y, 0, 1, 0);
            GL.Rotate(Rotation.Z, 0, 0, 1);

            GameObject.GameObjects.Action(g =>
            {
                if (!g.IsActive)
                    return;

                if (!Engine.Camera.Viewport.IntersectsWith(new RectangleF(g.Position.X, g.Position.Y, g.Size.X, g.Size.Y)))
                    return;

                g.Components.Action(c =>
                {
                    if (!c.IsActive)
                        return;

                    GL.PushMatrix();

                    GL.Translate(g.Position.X, g.Position.Y, 0);
                    GL.Scale(g.Size.X, g.Size.Y, 0);

                    GL.Rotate(g.Rotation.X, 1, 0, 0);
                    GL.Rotate(g.Rotation.Y, 0, 1, 0);
                    GL.Rotate(g.Rotation.Z, 0, 0, 1);

                    c.Render();

                    GL.PopMatrix();
                });
            });

            GL.PopMatrix();
//Zeichnet das Canvas von Gwen (ein Control als Textbox ist eingebunden)
            canvas.RenderCanvas();
        }


EDIT:
Habe noch ein bisschen nachgeforscht.
Wenn ich bei mir im GraphicsDevice Alloc aufrufe dann zeichnet Gwen nichts mehr.
Sonst funktioniert alles einwandfrei.

Das hier ist der Quellcode von Alloc:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public IRenderableObject<TVertex> Alloc<TVertex>(TVertex[] vertices, short[] elements)
            where TVertex : struct
        {
            int vboid;
            int eboid;

            GL.GenBuffers(1, out vboid);
            GL.BindBuffer(BufferTarget.ArrayBuffer, vboid);
            GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(vertices.Length * BlittableValueType.StrideOf(vertices)), vertices, BufferUsageHint.StaticDraw);

            GL.GenBuffers(1, out eboid);
            GL.BindBuffer(BufferTarget.ElementArrayBuffer, eboid);
            GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(elements.Length * sizeof(short)), elements, BufferUsageHint.StaticDraw);

            return new RenderableObject<TVertex>
            {
                VboId = vboid,
                EboId = eboid,
                Vertices = vertices,
                Elements = elements,
            };
        }

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Siebenkeim« (15.07.2014, 15:13)


2

15.07.2014, 15:55

So habe mir mal den Quellcode von Gwen.net runtergeladen und angeschaut.
Und siehe da beim Renderer nutzten Sie VBOs also machen sie schön EnableClientState für VertexArray, Color ... ABER
am Ende Disablen sie diese wieder.
Und natürlich nutze ich VBOs.
So jetzt habe ich es hinbekommen das meine Sachen wieder gezeichnet werden aber Gwen zeichnet immer noch nichts.
Weiß dort vielleicht jemand Rat?