OpenGL纹理与Android上下文



我正在尝试创建一个程序,可以纹理多个立方体。我在着色方面很成功,但在纹理方面遇到了一些困难,主要是关于我的Android Activity。

我不知道如何设置2个内容(或者如果这甚至是可能的)或如何设置Renderer到我原来的setContentView(R.layout.activity_my_glsurface_view)

我需要这个,以便在我的GLRenderer中调用mCube.loadTexture(this.context, R.drawable.app_icon_your_company)来将我的纹理应用到我的立方体。我将在下面附上我的代码,如果在Android中有其他方法,请告诉我,但我遇到的所有教程都是这样做的,我也面临同样的问题。

下面是我的主要活动:

public class MainActivity extends Activity implements OnClickListener{
int TriData = (Triangle.triangleCoords.length)/Triangle.COORDS_PER_VERTEX;
int SquData = (Square.squareCoords.length)/Square.COORDS_PER_VERTEX;
int CubeData = Cube.COORDS_PER_VERTEX * 4;
int amount = CubeData;
private GLSurfaceView mGLView;
private TextView mText;
private Button mBTN;


        @Override
        public void onCreate (Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            // Create a GLSurfaceView instance and set it-altered glsurfaceview to contain GL elements
            // as the ContentView for this Activity.
            // mGLView = new MyGLSurfaceView(this);
            setContentView(R.layout.activity_my_glsurface_view);
            FrameLayout surface = (FrameLayout) findViewById(R.id.middleSurface);
            surface.addView(new MyGLSurfaceView(this));
            mGLView = new GLSurfaceView(this); //this is where my error occurs
            mGLView.setRenderer(new MyGLRenderer(this));
            setContentView(mGLView);
            mBTN = (Button) findViewById(R.id.MyButton);
            mBTN.setOnClickListener(MainActivity.this);

            mText = (TextView) findViewById(R.id.MyGl);
            mText.setText("Vertices drawn: " + amount + "rn" + "FPS: " + MyGLRenderer.FPS + "rn" + "Frametime: " + MyGLRenderer.FRAME_TIME_MILLIS + "rn" + "Cube Total: " );

        }
@Override
public void onClick(View v) {
    Intent push = new Intent(MainActivity.this, Test.class);
    //where the 2nd in this case is the class you want to run.
    startActivity(push);
  }
}

我将包括我的Cube.javaloadTexture以及:

public int loadTexture(final Context context, final int resourceId) {
    //Get the texture from the Android resource directory
    final int[] textureHandle = new int[1];
    InputStream is = context.getResources().openRawResource(+ R.drawable.app_icon_your_company);
    Bitmap bitmap = null;
    try {
        //BitmapFactory is an Android graphics utility for images
        bitmap = BitmapFactory.decodeStream(is);
    } finally {
        //Always clear and close
        try {
            is.close();
            is = null;
        } catch (IOException e) {
        }
    }
    //Generate one texture pointer...
    GLES20.glGenTextures(1, textureHandle, 0);
    //...and bind it to our array
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);
    //Create Nearest Filtered Texture
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
    //Accounting for different texture parameters
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
    //Use the Android GLUtils to specify a two-dimensional texture image from our bitmap
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
    //Clean up
    bitmap.recycle();

    if (textureHandle[0] == 0)
    {
        throw new RuntimeException("Error loading texture");
    }
    return textureHandle[0];
}

我错误地调用了loadTexture,应该在onSurfaceCreated中而不是在onSurfaceChanged中如下所示:

TexturedCube.mTextureDataHandle = TexturedCube.loadTexture(context, R.drawable.app_icon_your_company);

此外,我能够通过我的MyGLSurfaceViewFunction正确访问上下文,我忽略了提供,而不是将我的内容视图设置为mGLView。

相关内容

  • 没有找到相关文章

最新更新