java - LibGDX OpenGL 问题

标签 java opengl libgdx

我有接下来的两个着色器: 顶点着色器:

/// fragment shader
#version 130

in vec2 vs_uv;

out vec4 fs_color;

uniform sampler2D u_source;
uniform sampler2D u_map;

void main() {
    fs_color = vec4(vs_uv, 0, 1);
}

/// vertex shader
#version 130

out vec2 vs_uv;

void main() {
    const vec4 vertices[4] = {
        vec4(-1, -1, 0, 1),
        vec4(-1, 1, 0, 0),
        vec4(1, 1, 1, 0),
        vec4(1, -1, 1, 1)
    };

    vec4 description = vertices[gl_VertexID];
    gl_Position = vec4(description.xy, 0, 1);
    vs_uv = description.zw;
}

显然,它渲染了一个全屏渐变填充的矩形。 我用这两个着色器创建了一个程序,并将 4 个顶点渲染到帧缓冲区中,并从中返回渲染的颜色纹理:

public Texture apply(Texture source, Texture map) {
    m_renderBuffer.begin();
    Gdx.gl20.glClear(Gdx.gl20.GL_COLOR_BUFFER_BIT);
    m_program.begin();
    m_program.setUniformi(m_sourceLocation, 0);
    m_program.setUniformi(m_mapLocation, 1);
    Gdx.gl20.glDrawArrays(Gdx.gl20.GL_TRIANGLE_FAN, 0, 4);
    m_program.end();
    m_renderBuffer.end();

    return m_renderBuffer.getColorBufferTexture();
}

我使用 SpriteBatch 绘制渲染纹理:

m_lightSpriteBatch.begin();
m_lightSpriteBatch.draw(lightTexture, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
m_lightSpriteBatch.end();

它运行良好,可以按照我的需要渲染渐变填充的矩形。当我在程序开始后绑定(bind)两个纹理(作为 apply 方法的参数传递 - sourcemap)时:

m_program.begin();
source.bind(0);
map.bind(1);
...

即使考虑到我在着色器代码中不使用纹理,它也会呈现垃圾! preview

  1. 没有纹理绑定(bind)渲染的纹理
  2. 纹理
  3. 渲染纹理“蹩脚”
  4. 贴图纹理

最佳答案

OpenGL 规范规定,将帧缓冲区的附加纹理渲染到其自己的帧缓冲区上会产生未定义的结果。或者用你的话来说“废话”。 :) 我想这表明至少在这个特定的 GPU 上,您甚至无法绑定(bind)纹理,更不用说从中获取样本了。

通常,如果您需要做这样的事情,您需要两个 FrameBuffer,并且您可以在它们之间进行乒乓球操作。

关于java - LibGDX OpenGL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38851962/

相关文章:

c++ - 手动计算gl_FragCoord

python - 无法使用 gluSphere() 绘制到同一位置?

android - 如何检测设备何时在 libGDX 中倒置

java - 公开 Google Datastore 数据的实体 ID

Java 代码无法完全从 HDFS 读取文件

python - PyQt5选择可用的最新OpenGL版本

java - 按钮 ClickListener 在 LibGDX 游戏中不起作用

java - 安卓 LibGDX : Cannot Load Image Dependancies

java : finding absolute xpath of specific node

java - Spring Integration 无法 Autowiring 字段