Autor Beitrag
Fetze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65
Erhaltene Danke: 1



BeitragVerfasst: So 07.10.07 10:57 
Heyho.

Ich code gerade ein 2D-Game-Framework in C# auf Basis des Tao-Frameworks, genauer: Auf Basis von OpenGL und Glfw. Jetzt würde ich gerne "echtes" Render2Texture unterstützen, scheitere aber daran, dass die Framebuffer-Objects nicht so wollen, wie sie sollten. Das ist mein (gekürzter aber chronologisch korrekter) Code:

ausblenden volle Höhe 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:
Gl.glGenTextures(1, out this.textureID);

<...>
<Hier erstelle ich den Frame- udn Renderbuffer>

int oglWidth;
int oglHeight;
GetOGLTexSize(this.width, this.height, out oglWidth, out oglHeight);

Gl.glGenFramebuffersEXT(1, out this.framebufferID);
Gl.glGenRenderbuffersEXT(1, out this.renderbufferID);

Gl.glBindTexture(Gl.GL_TEXTURE_2D, this.textureID);
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA, oglWidth, oglHeight, 0, Gl.GL_RGBA, Gl.GL_UNSIGNED_INT, null);
Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, this.framebufferID);

Gl.glFramebufferTexture2DEXT(Gl.GL_FRAMEBUFFER_EXT, Gl.GL_COLOR_ATTACHMENT0_EXT, Gl.GL_TEXTURE_2D, this.textureID, 0);
Gl.glBindRenderbufferEXT(Gl.GL_RENDERBUFFER_EXT, this.renderbufferID);
Gl.glRenderbufferStorageEXT(Gl.GL_RENDERBUFFER_EXT, Gl.GL_DEPTH_COMPONENT24, oglWidth, oglHeight);
Gl.glFramebufferRenderbufferEXT(Gl.GL_FRAMEBUFFER_EXT, Gl.GL_DEPTH_ATTACHMENT_EXT, Gl.GL_RENDERBUFFER_EXT, this.renderbufferID);

Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, 0);
Gl.glBindTexture(Gl.GL_TEXTURE_2D, 0);

<...>
<Hier "bind"e ich ihn>

Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, this.framebufferID);

<...>
<Hier "unbind"e ich ihn>

Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, 0);


Ich erhalte jedoch direkt nach der Zeile mit "glFramebufferTexture2DEXT" einen FRAMEBUFFER_UNSUPPORTED-Status, der es mir unmöglich macht, den Framebuffer zu nutzen. Wo könnte der Fehelr liegen? Als Texturformate habe ich weiterhin bereits GL_RGBA8 und GL_RGB probiert, ferner als Datentyp auch mal GL_UNSIGNED_BYTe ausprobiert - keine Veränderung!
Beispielprogramme mit exakt demselben Konzept (Leider nicht für C#, Glfw oder Tao..) funktionieren aber prächtig.