如何将触摸坐标传递给Java的碎片着色器



我是OpenGl的新手,目前我正在使用Fragment着色器来通过触摸效果更改一些像素颜色,但我不知道如何将触摸坐标传递到Java的碎片着色器。

解决方案是使用统一变量。这些是变量,其值是在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);
}

fragmentshader:

//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();
    }
}

最新更新