glUniform4fv
是 OpenGL ES 2.0 中的一个函数,用于将一个包含四个浮点数的数组传递给着色器程序中的 uniform 变量。这个函数通常用于设置材质的颜色、光照参数等。
在 C# 安卓中使用 OpenGL ES 时,可能会遇到 glUniform4fv
抛出异常的情况。以下是一些可能的原因和解决方法:
glUniform4fv
的 uniform 变量位置可能是错误的。glGetUniformLocation
获取 uniform 变量的位置,并确保传递正确的位置值:glGetUniformLocation
获取 uniform 变量的位置,并确保传递正确的位置值:vec4
,则传递的数组应包含四个浮点数:vec4
,则传递的数组应包含四个浮点数:Activity
的 onSurfaceCreated
方法中完成:Activity
的 onSurfaceCreated
方法中完成:AndroidManifest.xml
中添加以下权限:AndroidManifest.xml
中添加以下权限:以下是一个完整的示例,展示了如何在 C# 安卓中使用 glUniform4fv
设置颜色:
public class MyGLRenderer : GLSurfaceView.Renderer {
private int program;
private int colorLocation;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
String vertexShaderCode = "..."; // 顶点着色器代码
String fragmentShaderCode = "..."; // 片段着色器代码
int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);
program = GLES20.glCreateProgram();
GLES20.glAttachShader(program, vertexShader);
GLES20.glAttachShader(program, fragmentShader);
GLES20.glLinkProgram(program);
int status;
GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, out status);
if (status == GLES20.GL_FALSE) {
String error = GLES20.glGetProgramInfoLog(program);
throw new RuntimeException("Shader program linking failed: " + error);
}
colorLocation = GLES20.glGetUniformLocation(program, "u_Color");
if (colorLocation == -1) {
throw new RuntimeException("Could not find uniform variable: u_Color");
}
}
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glUseProgram(program);
float[] color = {1.0f, 0.0f, 0.0f, 1.0f};
GLES20.glUniform4fv(colorLocation, 1, color, 0);
// 绘制图形
}
private int loadShader(int type, String shaderCode) {
int shader = GLES20.glCreateShader(type);
GLES20.glShaderSource(shader, shaderCode);
GLES20.glCompileShader(shader);
int status;
GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, out status);
if (status == GLES20.GL_FALSE) {
String error = GLES20.glGetShaderInfoLog(shader);
throw new RuntimeException("Shader compilation failed: " + error);
}
return shader;
}
}
通过以上步骤和示例代码,应该能够解决在 C# 安卓中使用 glUniform4fv
抛出异常的问题。
领取专属 10元无门槛券
手把手带您无忧上云