2012-05-07 18 views
1

iはhttp://developer.android.com/resources/tutorials/opengl/opengl-es20.html からチュートリアルを実行しようとしました。しかし、私が望んでいたことは容易に編集のための複数のクラスでそれを作成することでした。 私の問題は、Eclipseには何らかのエラーや問題はなく、アプリケーションは実行されますが、白い背景(三角は表示されません)だけが表示され、logcatは常に「実装されていないOpenGL ES API」というエラーをスローします。 私は何が間違っているのか分かりませんし、Eclipseは私にどこにエラーがあるのか​​を教えてくれません。誰かが何が間違っているのかを教えてくれますか?奇妙なOpenGL ESの2

編集:私はアンドロイド2.3.7とHTCの欲望にこのアプリを実行します。 Googleチュートリアルのコードをコピーして貼り付けると、すべてが完璧に実行されました。

私のクラスには、そのようになります。

活動:

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; 
} 
} 
+0

元のサンプルも、_unimplemented_警告を上げていましたか? –

+0

いいえ、それはしませんでした。すべてのエラーや警告なしになっていたとしてレンダリングされます。 –

答えて

1

onSurfaceChangedの内側には、ビューポートを設定する必要があります。 一人ひとり OpenGLの呼び出しの後にエラーの

チェック!私はが実装されていないのを見たことがあるカスタムROMと一度警告;これらのコールを正確に呼び出すコールを特定したいと考えています。