Как передать сенсорные координаты фрагментному шейдеру из Java - PullRequest
0 голосов
/ 04 мая 2019

Я новичок в Opengl и в настоящее время использую фрагментный шейдер для изменения цвета пикселя изображения с помощью сенсорного эффекта, но я не знаю, как передать координаты касания фрагментному шейдеру из Java.

1 Ответ

0 голосов
/ 05 мая 2019

Решение состоит в том, чтобы использовать однородные переменные.Это переменные, значения которых установлены в Java.Однако они доступны в программах шейдеров GLSL.

Пример класса шейдера:

private int programId;
private int vertexShaderId;
private int fragmentShaderId;

private int uniformLocation_touchCoordinates;

public MyShader(String vertexShader, String fragmentShader) {
    vertexShaderId = //load vertex shader;
    fragmentShaderId = //load fragment shader;

    programId = glCreateProgram();
    glAttachShader(programId, vertexShaderId);
    glAttachShader(programId, fragmentShaderId);

    //bind in variables of the vertex shader here

    glLinkProgram(programId);
    glValidateProgram(programId);

    //init uniform variables
    uniformLocation_touchCoordinates = glGetUniformLocation(programId, "touchCoordinates");
}
public void bind() {
    glUseProgram(programId);
}
public void unbind() {
    glUseProgram(0);
}

public void loadTouchCoordinates(float x, float y) {
    glUniform2f(uniformLocation_touchCoordinates, x, y);
}

fragShader:

//version tag, input and output variables

uniform vec2 touchCoordinates;

void main(void) {
    //...
}

Использование:

public class Renderer {
    MyShader shader = new MyShader(..., ...); //pass shader code

    public void render() {
        shader.bind();

        //update uniform variable with your data
        shader.loadTouchCoordinates(..., ...); //pass coordinates

        //do your render logic here

        shader.unbind();
    }
}
...