android - 如何从java将触摸坐标传递给片段着色器?
问题描述
我是 Opengl 的新手,我目前正在使用片段着色器通过触摸效果更改图像的某些像素颜色,但我不知道如何将触摸坐标从 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);
}
片段着色器:
//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();
}
}
推荐阅读
- xamarin - 尝试在 Xamarin.iOS 中的 iOS 13 中运行时,应用程序在 UnregisterAllAsync 中严重崩溃
- excel - Excel VBA WorkBook_sheetchange 不会运行
- bulma - 如何在一行文本中垂直对齐 Bulma 按钮?
- listview - 如何将 Taps 传递给顶部小部件下方的小部件?
- django - 如何在 django 函数中处理返回渲染
- c - 当我尝试将函数的参数设置为默认值时出现意外错误
- angular - 具有可扩展行的表格一次打开所有行
- xslt-1.0 - 如何在单个 xml 节点上运行两个单独的 xslt 子字符串操作
- java - 为什么 Selenium 会在点 (.) 字符上附加一个反斜杠,从而导致 (\.) 中包含 (.) 的 ID 属性的值
- google-cloud-platform - 当我尝试连接到云 sql 时,没有路由到主机,但仅在 CONTAINER-OPTIMIZED OS 上