利用Android NDK开发OpenGLES如何利用上层Bitmap生成纹

在网上找了很多的资料,想利用Android上层生成Bitmap,然后把Bitmappixel传递给JNI,然后再C++中生成纹理映射,但是结果都失败了。最后自己想得到了一个方法,在android上层直接生成纹理映射,然后把纹理映射的地址传递给JNI,这样就可以利用上层的Bitmap生成纹理映射了。当然这不是最好的方法,但是由于自己现在的能力有限,暂时只能依靠这个方法了,如果有人知道如何正确的利用BitmapC++中生成纹理映射,欢迎和我交流。(我利用BitmapC++中生成了纹理映射,但是纹理是乱纹,而不是正确的纹理,应该是我生成的Bitmappixel数组有问题。)

下面是我的做法,可供参考,如果有更好的方法,请告知:

我想要在OpenGLES中绘制文字,所以首先我利用Canvas生成想要的Bitmap,然后在android上层生成纹理映射,把纹理映射的绑定地址传递个JNI

public void onSurfaceCreated(GL10 gl10, EGLConfig eglconfig) {
  //从这里开始生成所需Bitmap

  String s = "北京";                                                                         

  Bitmap bitmap;

  //构建Bitmap,它的widthheight必须是2n次方
  bitmap = Bitmap.createBitmap(512, 512, Bitmap.Config.ARGB_8888);   Canvas canvas = new Canvas(bitmap);

 //设置画布背景为透明,这样我们的纹理就只显示文字,而没有颜色背景
  canvas.drawColor(Color.TRANSPARENT);
  Paint p = new Paint();

  //设置字体、字体大小和字体颜色
  String familyName = "宋体";
  Typeface font = Typeface.create(familyName, Typeface.BOLD);
  p.setColor(Color.RED);
  p.setTypeface(font);
  p.setTextSize(50);

  //Bitmap上绘制文字
  canvas.drawText(s, 300, 60, p);                       
  s = "阴,23摄氏度";
  canvas.drawText(s, 0, 120, p);
  s = "高温:26,低温: 18 ";
  canvas.drawText(s, 0, 240, p);       

  //到这里为止,所需Bitmap构建完成

  //从这里开始生成纹理映射

  gl10.glGenTextures(1, TextureString, 0);

  // Create Nearest Filtered Texture and bind it to texture 0
  gl10.glBindTexture(GL10.GL_TEXTURE_2D, TextureString[0]);
  gl10.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
    GL10.GL_NEAREST);
  gl10.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
    GL10.GL_NEAREST);
  GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

  //到这里纹理映射完成

  //把我们的纹理映射地址传递给JNI

  Native_SolarWind.DrawText(TextureString);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzpzs.html