parsecer
parsecer

Reputation: 5136

OpenGL textrenderer doesn't display English Latin letters

I have this simple code for displaying a given letter:

minimal reproducible example:

import com.jogamp.opengl.GL4;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.util.awt.TextRenderer;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import static com.jogamp.opengl.GL4.*;

public class Test extends Frame implements GLEventListener {
     private static int[] vao = new int[1];
    private static int[] vbo = new int[4];

    private static GLCanvas canvas;
    private static GL4 gl;
    private static int WIDTH = 750, HEIGHT = 750;

    private TextRenderer textRenderer;

    public Test() {
        canvas = new GLCanvas();
        canvas.addGLEventListener(this);
        this.add(canvas);
        this.setSize(WIDTH, HEIGHT);
        this.setVisible(true);

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                dispose();
                System.exit(0);
            }
        });
     }

    public static void main(String[] args) {
        new Test();
    }

    @Override
    public void init(GLAutoDrawable drawable) {
        gl = (GL4) drawable.getGL();
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

        gl.glGenVertexArrays(vao.length, vao, 0);
        gl.glBindVertexArray(vao[0]);
        gl.glGenBuffers(vbo.length, vbo, 0);
        gl.glEnableVertexAttribArray(0);
        gl.glEnableVertexAttribArray(1);

        textRenderer = new TextRenderer(new Font("Arial", Font.BOLD, 20));
    }

    @Override
    public void display(GLAutoDrawable drawable) {
        gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        String letter = "Й";  // Й works, S doesn't
        textRenderer.beginRendering(WIDTH, HEIGHT);
        textRenderer.setColor(Color.WHITE);
        textRenderer.draw(letter, WIDTH / 2, HEIGHT / 2);
        textRenderer.endRendering();
    }


    @Override
    public void dispose(GLAutoDrawable drawable) {
        textRenderer.dispose();
    }

    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {}
}

When letters is "S", nothing is displayed (only black background). However, if I change letters to "Й", it is displayed (white letter Й on a black background).

I don't understand, what could be causing this behavior, why English letters are not displayed?

Upvotes: 2

Views: 70

Answers (0)

Related Questions