Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t在LWJGL中绘制到帧缓冲区对象,然后绘制到帧缓冲区_Java_Opengl_Rendering_Lwjgl_Framebuffer - Fatal编程技术网

Java Can';t在LWJGL中绘制到帧缓冲区对象,然后绘制到帧缓冲区

Java Can';t在LWJGL中绘制到帧缓冲区对象,然后绘制到帧缓冲区,java,opengl,rendering,lwjgl,framebuffer,Java,Opengl,Rendering,Lwjgl,Framebuffer,我的问题是,我已经将一个小四边形绘制到帧缓冲区对象,并试图将其绘制到窗口上的帧缓冲区。这是我的java代码: import static org.lwjgl.opengl.GL30.*; import static org.lwjgl.opengl.GL11.*; import java.nio.ByteBuffer; import org.lwjgl.opengl.*; public class Main { private static int fboID; private

我的问题是,我已经将一个小四边形绘制到帧缓冲区对象,并试图将其绘制到窗口上的帧缓冲区。这是我的java代码:

import static org.lwjgl.opengl.GL30.*;
import static org.lwjgl.opengl.GL11.*;
import java.nio.ByteBuffer;
import org.lwjgl.opengl.*;

public class Main
{
    private static int fboID;
    private static int texID;
    private static int depthBuff;

    public static void main(String[] args)
    {
        try
        {
            Display.setDisplayMode(new DisplayMode(640, 480));
            Display.create();
        } catch (Exception e)
        {
            e.printStackTrace();
            System.exit(1);
        }

        glEnable(GL_TEXTURE_2D);
        initFramebuffer();
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 640, 480, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);

        while (!Display.isCloseRequested())
        {
            glBindTexture(GL_TEXTURE_2D, texID);
            glBegin(GL_QUADS);

            glTexCoord2f(0, 0);
            glVertex2i(10, 10);

            glTexCoord2f(0, 1);
            glVertex2i(10, 470);

            glTexCoord2f(1, 1);
            glVertex2i(630, 470);

            glTexCoord2f(1, 0);
            glVertex2i(630, 10);

            glEnd();
            glBindTexture(GL_TEXTURE_2D, 0);

            Display.update();
            Display.sync(60);
        }
    }

    public static void initFramebuffer()
    {
        fboID = glGenFramebuffers();
        glBindFramebuffer(GL_FRAMEBUFFER, fboID);

        texID = glGenTextures();
        glBindTexture(GL_TEXTURE_2D, texID);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 640, 480, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByteBuffer) null);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

        depthBuff = glGenRenderbuffers();
        glBindRenderbuffer(GL_RENDERBUFFER, depthBuff);
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, 640, 480);
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuff);

        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texID, 0);

        if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
            System.out.println("GOD DAMT");

        glBindFramebuffer(GL_FRAMEBUFFER, fboID);
        {
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            glOrtho(0, 640, 480, 0, 1, -1);
            glMatrixMode(GL_MODELVIEW);

            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            glViewport(0, 0, 640, 480);

            //glLoadIdentity();

            glBegin(GL_QUADS);
            glColor3f(1, 0, 0);
            glVertex2i(0, 0);
            glVertex2i(100, 0);
            glVertex2i(100, 100);
            glVertex2i(0, 100);
            glEnd();
        }
        glBindFramebuffer(GL_FRAMEBUFFER, 0);

    }
}
每当我运行这段代码时,我只得到一个黑屏。
我做错了什么?

我不太熟悉OpenGL,但是

而不是

    glEnable(GL_TEXTURE_2D);
    initFramebuffer();
初始化fb后,应将纹理设置为启用:

    initFramebuffer();
    glEnable(GL_TEXTURE_2D);

这是由
glTexParameteri(GL\u TEXTURE\u 2D,GL\u TEXTURE\u MIN\u FILTER,GL\u NEAREST)引起的在fb纹理框前呈现未初始化(非fb纹理),导致屏幕空白

你怎么了?你到底有什么问题?您“绘制了一个小四边形”,但您“试图将其绘制到帧缓冲区”,这是您“不能做的”。有错误吗?请你具体化一下好吗?不,这只是一个黑屏。非常感谢