Opengl render to texture

  • C#
  • .NET (FX) 4.0

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ThuCommix.

    Opengl render to texture

    Hi,

    ich versuche momentan in Opengl verschiedene Texturen in eine Textur zu rendern und diese anschließend in den Main framebuffer zu zeichnen.

    C-Quellcode

    1. glGenTextures(1, &color_tex);
    2. glBindTexture(GL_TEXTURE_2D, color_tex);
    3. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    4. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    5. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    6. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    7. //NULL means reserve texture memory, but texels are undefined
    8. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
    9. //-------------------------
    10. glGenFramebuffers(1, &fb);
    11. glBindFramebuffer(GL_FRAMEBUFFER, fb);
    12. //Attach 2D texture to this FBO
    13. glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, color_tex, 0);
    14. //-------------------------
    15. glGenRenderbuffers(1, &depth_rb);
    16. glBindRenderbuffer(GL_RENDERBUFFER, depth_rb);
    17. glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 256, 256);
    18. //-------------------------
    19. //Attach depth buffer to FBO
    20. glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rb);
    21. //-------------------------
    22. //Does the GPU support current FBO configuration?
    23. GLenum status;
    24. status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
    25. switch(status)
    26. {
    27. case GL_FRAMEBUFFER_COMPLETE:
    28. cout<<"good";
    29. default:
    30. HANDLE_THE_ERROR;
    31. }
    32. //-------------------------
    33. //and now you can render to GL_TEXTURE_2D
    34. glBindFramebuffer(GL_FRAMEBUFFER, fb);
    35. glClearColor(0.0, 0.0, 0.0, 0.0);
    36. glClearDepth(1.0f);
    37. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    38. //-------------------------
    39. glViewport(0, 0, 256, 256);
    40. //draw frame buffer
    41. glBindFramebuffer(GL_FRAMEBUFFER, 0);
    42. //draw to main framebuffer


    Mein Fragment shader sieht so aus:

    C-Quellcode

    1. #version 150 core
    2. in vec3 Color;
    3. in vec2 Texcoord;
    4. in float Alpha;
    5. out vec4 outColor;
    6. uniform sampler2D tex;
    7. void main() {
    8. outColor = texture(tex, Texcoord) * vec4(Color, Alpha);
    9. }


    Das erstellen des Framebuffers funktioniert allerdings wenn ich dann color_tex zeichnen möchte passiert einfach nichts, die Textur wird nicht gezeichnet.. Habt ihr eine Idee was ich falsch mache?