当前位置: 首页 > 知识库问答 >
问题:

如何空白我的OpenGL纹理

景光赫
2023-03-14

我创建了一个OpenGL(GL_TEXTURE_2D)纹理,使用clCreateFromGLTexture()制作了一个OpenCLimage2d_t缓冲区,我运行我的OpenCL内核来绘制纹理,使用clEnqueueAcquireGLObject和clEnqueueReleaseGLObject之前和之后,然后我通过这样做在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个答案

权兴为
2023-03-14

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

 类似资料:
  • 我要讲的是第二章http://www.open.gl遇到了一个我搞不懂的绘图问题。 顶点着色器: 片段着色器: 编译时 我没有收到任何警告,但程序运行时会出现一个空白屏幕。我检查了他链接的示例代码以及示例源代码的github副本。不幸的是,他使用的是SFML,而我使用的是GLFW,所以我试图弥补这个差异。 我尽了最大努力模仿他的示例代码(事物的排序等),并在的最后几行中添加了主循环(在教程中没有提

  • 我有一个用于OpenGL中模型渲染的纹理数组。此数组包含漫反射和镜面纹理。由于某些网格没有镜面纹理,因此我在每次渲染后简单地将NULL纹理绑定到我的镜面采样器,并且只有当网格具有镜面纹理时,我才绑定一个。但是,我仍然在没有镜面纹理的网格上看到镜面纹理。 这是我的渲染代码 材质索引保存数组中纹理的索引,如果网格没有镜面纹理 索引为-1 纹理单元0用于漫反射 纹理单元2用于镜面

  • 所以最近我开始阅读OpenGL维基文章。这就是我在这里描述OpenGL纹理的方式。不过,有几点尚不清楚。 以下陈述是真的、假的还是视情况而定? 将两个纹理绑定到同一个纹理单元是不可能的。 将两个采样器绑定到同一个纹理单元是不可能的。 将一个纹理绑定到两个不同的纹理单元是不可能的。 将一个采样器绑定到两个不同的纹理单元是不可能的。 应用程序有责任明确将什么采样器类型传递给什么统一变量。 着色器程序有

  • “我在我的申请中发现了一个奇怪的行为,希望你能解释给我听。”。你看,我有两个3D纹理,它们被发送到片段着色器,渲染得非常好。但有一个问题,当我创建另一个纹理(它是1D纹理)时,一个黑屏正在被渲染,而不是正确的前一个结果。 关于这个1D纹理,我甚至没有将其发送到片段着色器。当我调用glTexImage1D(…)时,黑屏就出现了。我评论这句话,它就消失了!!这两种纹理被渲染。 我觉得纹理单位肯定有问题

  • 在andrid上的opengl es中,当我将两个纹理相邻放置时,会有一个轻微的接缝,可以看到它们后面绘制的对象。基本上看起来是一个小差距。我把范围缩小到了地图上 glTexParameteri(GL_纹理_2D、GL_纹理_最小过滤器、GL_线性_MIPMAP_线性);glTexParameteri(GL_纹理_2D、GL_纹理_MAG_过滤器、GL_线性); 如果我将它们都设置为距接缝最近的G

  • 假设我有一个金字塔…我知道如何绘制它,我知道如何为整个金字塔设置纹理,但如何为每面墙设置不同的纹理? 我通过在 我试图通过添加<code>GL11.glBindTexture(GL11.GL_TEXTURE_2D,TEXTURE.getTextureID())来绑定纹理 后,但