gpt4 book ai didi

java - 奇怪的 opengl es 2 on android 错误

转载 作者:行者123 更新时间:2023-11-30 04:13:15 25 4
gpt4 key购买 nike

我试着从 http://developer.android.com/resources/tutorials/opengl/opengl-es20.html 做教程但我想要的是在多个类中创建它以便于编辑。我的问题是 eclipse 没有显示任何类型的错误或问题,应用程序运行但仅显示白色背景(未显示三角形)并且 logcat 不断抛出错误“称为未实现的 OpenGL ES API”。我不知道我做错了什么,Eclipse 没有告诉我错误在哪里,有人可以告诉我哪里出了问题,或者至少让我走上解决方案的轨道吗?

编辑:我在 htc desire 上使用 android 2.3.7 运行这个应用程序。当我从谷歌教程中复制粘贴代码时,一切都运行完美。

我的类(class)看起来像这样:

Activity :

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class Androdvlpr2Activity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

GLSurfaceView View = new GLSurfaceView(this);
View.setRenderer(new Renderer());
setContentView(View);
}
}

渲染器:

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView;

public class Renderer implements GLSurfaceView.Renderer {
Triangle triangle = new Triangle();
private int mProgram;
private int maPositionHandle;

public void onSurfaceCreated(GL10 unused, EGLConfig config) {
GLES20.glClearColor(0.92f, 0.92f, 0.92f, 1.0f);

Triangle.initTriangle();


mProgram = GLES20.glCreateProgram(); // create empty OpenGL Program
GLES20.glAttachShader(mProgram, Shader.vertexShader); // add the vertex shader to program
GLES20.glAttachShader(mProgram, Shader.fragmentShader); // add the fragment shader to program
GLES20.glLinkProgram(mProgram); // creates OpenGL program executables

// get handle to the vertex shader's vPosition member
maPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
}

public void onDrawFrame(GL10 unused) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);


GLES20.glUseProgram(mProgram);
// Prepare the triangle data
GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false, 12, Triangle.verticesBuffer);
GLES20.glEnableVertexAttribArray(maPositionHandle);
// Draw the triangle
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
}

public void onSurfaceChanged(GL10 unused, int width, int height) {
}
}

三角形:

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

public class Triangle {
static FloatBuffer verticesBuffer = null;

public static void initTriangle(){
float triangleCoords[] = {
// X, Y, Z
-0.5f, -0.25f, 0,
0.5f, -0.25f, 0,
0.0f, 0.559016994f, 0
};

ByteBuffer vbb = ByteBuffer.allocateDirect(triangleCoords.length * 4);
vbb.order(ByteOrder.nativeOrder());
verticesBuffer = vbb.asFloatBuffer();
verticesBuffer.put(triangleCoords);
verticesBuffer.position(0);
}
}

着色器:

import android.opengl.GLES20;

public class Shader {
private final static String vertexShaderCode =
"attribute vec4 vPosition; \n" +
"void main(){ \n" +
" gl_Position = vPosition; \n" +
"} \n";

private final static String fragmentShaderCode =
"precision mediump float; \n" +
"void main(){ \n" +
" gl_FragColor = vec4 (0.63671875, 0.76953125, 0.22265625, 1.0); \n" +
"} \n";

final static int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
final static int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);

private static int loadShader(int type, String shaderCode){

// create a vertex shader type (GLES20.GL_VERTEX_SHADER)
// or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
int shader = GLES20.glCreateShader(type);

// add the source code to the shader and compile it
GLES20.glShaderSource(shader, shaderCode);
GLES20.glCompileShader(shader);

return shader;
}
}

最佳答案

onSurfaceChanged 中,必须设置视口(viewport)。

每次 OpenGL 调用后检查错误!我曾在自定义 ROM 中看到过一些未实现警告;你想追踪到底是哪些电话引发了这些问题。

关于java - 奇怪的 opengl es 2 on android 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10480191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com