ma2といます。10年前に障害をおってしまい、ようやく復帰に向けてコードを書き始めたものです。
勝手がわからず理解・調べが甘いところがあるかもしれませんがその際は容赦の程お願いします。

さて、本題です。
android携帯・タブレットでOpenGLを使った簡単なゲームを作ろうと思います。
開発をしない人たちに向けて公開する予定があるので独自のフォントを使いたいです。

作るアプリは、
- AppCompatActivity
- GLSurfaceView
- Renderer
を使っています。

また、描画のために
- Bitmap
- Canvas
- Paint
を使っています。この3つは、GLSurfaceView配下です。
フォントを使うために paint.setTypeface( Typeface.createFromAsset(getAssets(), "fonts/ipag.ttf") ); を使いたいのですが、getAssets 解決ができません。
これを解決する方法がわかりません。

どなたか解決方法を教えていただけるとありがたいです。
よろしくお願いします。

[追加]
- MainActivity.java

package com.example.ma2.opengles;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Build;
import android.view.View;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    private GLSurfaceView mGLView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Create a GLSurfaceView instance and set it
        // as the ContentView for this Activity
        mGLView = new MyGLSurfaceView(this);
        setContentView(mGLView);

    }

    @Override
    protected void onPause() {
        super.onPause();
        mGLView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mGLView.onResume();
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                getWindow().getDecorView().setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  //this line is api 19+
            } else {
                getWindow().getDecorView().setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_FULLSCREEN);
            }
        }
    }

}
  • MyGLSurfaceView.java
package com.example.ma2.opengles;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.opengl.GLSurfaceView;


public class MyGLSurfaceView extends GLSurfaceView {

    GLRenderer myRenderer;

    public MyGLSurfaceView(Context context) {
        super(context);
        myRenderer = new GLRenderer();
        setRenderer(myRenderer);
    }

}
  • GLRenderer.java
package com.example.ma2.opengles;

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

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.graphics.Typeface;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLUtils;

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


public class GLRenderer implements Renderer {


    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {

    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        Bitmap bmp;

        gl.glViewport(0, 0, width, height);
        {
            // Canvasを使って、文字をBitMap化
            bmp = createStrImage( "123" );
        }

        gl.glEnable(GL10.GL_TEXTURE_2D);
        int[] buffers = new int[1];
        gl.glGenTextures(1, buffers, 0);
        int textureName = buffers[0];
        gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_NEAREST);

        bmp.recycle();

    }

    @Override
    public void onDrawFrame(GL10 gl) {

        gl.glClearColor(1.0f, 0.50f, 0.50f, 1.0f);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        float uv[] = {
                0.0f, 0.0f,// 左上
                0.0f, 1.0f,// 左下
                1.0f, 0.0f,// 右上
                1.0f, 1.0f,// 右下
        };

        ByteBuffer bbuv = ByteBuffer.allocateDirect(uv.length * 4);
        bbuv.order(ByteOrder.nativeOrder());

        FloatBuffer fbuv = bbuv.asFloatBuffer();
        fbuv.put(uv);
        fbuv.position(0);

        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, fbuv);
        float positions[] = {
                // ! x y z
                -1.0f, 1.0f, 0.0f, // 左上(uv一行目に対応)
                -1.0f,-1.0f, 0.0f, // 左下(uv二行目に対応)
                1.0f, 1.0f, 0.0f, // 右上(uv三行目に対応)
                1.0f,-1.0f, 0.0f, // 右下(uv四行目に対応)
        };

        ByteBuffer bb = ByteBuffer.allocateDirect(positions.length * 4);
        bb.order(ByteOrder.nativeOrder());
        FloatBuffer fb = bb.asFloatBuffer();
        fb.put(positions);
        fb.position(0);

        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fb);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

    }


    public Bitmap createStrImage( String str ) {
        Paint paint = new Paint( Paint.ANTI_ALIAS_FLAG );
        paint.setTypeface( Typeface.DEFAULT );
        paint.setTypeface( Typeface.createFromAsset(getAssets(), "fonts/ipag.ttf") );
        paint.setTextSize( 30 );

        Paint.FontMetrics fm = paint.getFontMetrics();
        paint.setARGB( 255, 255, 255, 0 );

        float width = paint.measureText( str );
        float height = -fm.top + fm.bottom;

        Bitmap bitmap = Bitmap.createBitmap( (int)width, (int)height, Bitmap.Config.ARGB_8888 );
        Canvas canvas = new Canvas( bitmap );
        canvas.drawText( str, 0, -fm.top, paint );

        return bitmap;
    }
}