如何清空我的OpenGL纹理

时间:2016-03-09 00:35:51

标签: opengl opencl

我创建了一个OpenGL(GL_TEXTURE_2D)纹理,使用clCreateFromGLTexture()创建了一个OpenCL image2d_t缓冲区,我运行我的OpenCL内核绘制到纹理,使用clEnqueueAcquireGLObjects和clEnqueueReleaseGLObjects之前和之后,然后我显示结果在OpenGL中这样做(我试图简单地将我的帧缓冲纹理绘制到没有缩放的窗口,这是否是正确的方法呢?):

    glBegin(GL_QUADS);
    glTexCoord2f(0.0, 0.0); glVertex2f(0.0f, 0.0f);
    glTexCoord2f(1.0, 0.0); glVertex2f(1920.0f, 0.0f);
    glTexCoord2f(1.0, 1.0); glVertex2f(1920.0f, 1080.0f);
    glTexCoord2f(0.0, 1.0); glVertex2f(0.0f, 1080.0f);
    glEnd();

    SDL_GL_SwapWindow(window);

除了有一个问题之外,它的效果很好,我无法弄清楚如何用零填充纹理以使其空白,所以我看到旧的像素没有写入新的像素。

显然没有办法从主机中删除OpenCL图像对象,所以我必须在OpenGL中执行它(当然在调用clEnqueueAcquireGLObjects之前),所以我尝试了这个:

glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);

然而,这并没有做任何事情。当我注释掉上面的GL_QUADS块时,它确实在屏幕上做了一些事情,它就像glClear对纹理本身没有做任何事情,而是直接对屏幕做任何事情。令人困惑的是,我对OpenGL不太熟悉,如何消除我的纹理?

1 个答案:

答案 0 :(得分:1)

OpenGL glClear清除当前绑定的帧缓冲区。要对纹理进行操作,请创建一个帧缓冲对象,将纹理附加到它上,绑定帧缓冲对象以进行绘制操作并清除它(然后将清除纹理)。