Как настроить цели рендеринга с плавающей запятой с помощью libGDX? - PullRequest
3 голосов
/ 21 марта 2012

Поскольку OpenGL 2.0 не поддерживает следующие расширения:

glClampColorARB(GL_CLAMP_VERTEX_COLOR_ARB, GL_FALSE);
glClampColorARB(GL_CLAMP_READ_COLOR_ARB, GL_FALSE);
glClampColorARB(GL_CLAMP_FRAGMENT_COLOR_ARB, GL_FALSE);

Мне нужно настроить цели рендеринга с плавающей точкой, чтобы моя конечная текстура не была зажата между 0 и 1. в зависимости от необходимостивывод текстуры незашифрован, потому что я использую libGDX для обработки изображений.

Пытаясь несколько дней, чтобы заставить это работать:

    frameBuffer1 = new FrameBuffer(usedFormat, w, h, true); 
    frameBuffer2 = new FrameBuffer(usedFormat, w, h, true); 

    frameBuffer1.begin();
    gl20.glViewport(0, 0, frameBuffer1.getWidth(), frameBuffer1.getHeight());
    gl20.glClearColor(0f, 0f, 0f, 0f);
    gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    gl20.glActiveTexture(GL20.GL_TEXTURE0);
    testTexture.bind(); //input image texture
    gl20.glEnable(GL20.GL_TEXTURE_2D);
    meshShader1.begin();
    meshShader1.setUniformi("s_texture", 0);
    mesh.render(meshShader1, GL20.GL_TRIANGLES);
    meshShader1.end();
    frameBuffer1.end(); 

    frameBuffer2.begin();
    gl20.glViewport(0, 0, frameBuffer2.getWidth(), frameBuffer2.getHeight());
    gl20.glClearColor(0f, 0f, 0f, 0f);
    gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    frameBuffer1.getColorBufferTexture().bind()
    meshShader2.begin();
    meshShader2.setUniformi("s_texture", 0);
    mesh.render(meshShader2, GL20.GL_TRIANGLES);
    meshShader2.end();     
    frameBuffer2.end();

У меня есть две простые программы шейдеров, чтобы проверить, сохраняет ли текстура незакрепленнуюценности.Первое вычитает 0,5 из входного изображения текстуры, а второе добавляет 0,5 к выходному сигналу первого буфера кадров.

...