CANDERA開発者コラム
|
はじめに |
|
前回のコラムで、OpenGL ESを用いて何らかの図形を描画する際に必要な作業については想像ができたかと思います。 そこで、より具体的なイメージをつかむため、今回と次回の2回に渡り、OpenGL ESを使い実際に簡単な図形を描画してみたいと思います。 | ![]() |
実践編の目標は? |
実践編の最終的な目標としては、図1のような基本の三角形を描画できるようになることです。ただし、実践編はターゲットの想定などをせず、C/C++を用いてのOpenGL ESやEGLのAPI呼び出しに特化して説明していきます。このため、本編の内容をコピーしただけでは、そのまま動作するアプリケーションにはならないことは予めご了承ください。 |
![]() |
図1. 今回の目標 |
構成 | ||
アプリケーションの構成としては図2の流れを想定とします。各種初期化・終了処理に加えて一定時間経過後にアプリケーションを終了する処理も実装することにします。 | ||
![]() |
||
図2. アプリケーションの流れ | ||
残念ながら、この実装を全て1回分の記事に収めるのは難しいため、今回は図3の青く囲んだ部分をターゲットとしたいと思います。それでは、それぞれについて見ていきましょう。 |
||
![]() |
||
図3. 今回のターゲット | ||
エントリポイント | ||
まずはアプリケーションのエントリポイントを用意します。図2の内容を考慮しつつ、リスト1のように空の関数( または宣言のみ )を用意しておきます。まだ定義していない型や定数などはありますが、後に使いますので、今は図2の内容と大体の対応が取れていることを確認しましょう。 | ||
|
||
リスト1. これから実装する処理の枠組み | ||
プラットフォーム依存部の処理 | ||
プラットフォームに依存する部分の初期化と終了処理を実装します。ここでは主にウィンドウシステムの初期化などを行うことになります。何らかの初期化を行った結果を次のEGLの初期化の処理で使うことになるのですが、こちらはプラットフォームに依存しますので、それらしい空関数を入れておきます( リスト2 )。実装はお使いの環境に合わせて記述する流れとなります。 | ||
|
||
リスト2. プラットフォーム依存部分 | ||
EGLの初期化と終了処理 | ||
EGLの初期化と終了処理を実装します。いくつか関数を呼び出すだけではあるのですが、上記のプラットフォーム依存部で初期化されたAppNativeWindowとAppNativeDisplay型の変数を使います。 EGLの初期化部分では、まずは、引数で渡されたAppNativeDisplay型の変数からEGLDisplayを取得してEGLのシステムを初期化します。次に、これから作成したい描画面やEGLContextに関するオプションを記述し、EGLConfigを取得します。このEGLConfigを使い、描画面( EGLSurface )の作成、EGLContextの作成をそれぞれ行います。描画面の作成時には、AppNativeWindow型の変数も渡すことになります。 終了処理では、EGLContextの破棄、EGLSurfaceの破棄、そして、EGLのシステムの終了処理をそれぞれ行うAPIをコールする流れとなります。リスト3は上記の処理を記述したものになりますが、EGLがプラットフォーム依存部分と連携していることが感じられると思います。 | ||
|
||
リスト3. EGLの初期化と終了処理 |
おわりに |
今回は、OpenGL ESでの簡単な図形描画の実践編の前半として、アプリケーションのメインフローと、プラットフォーム依存部分の仮実装、EGLの初期化部分についてご紹介しました。次回はいよいよ、シェーダや描画処理の本体部分を実装していきます。 |
◆CANDERA(カンデラ)とは? |
加賀FEI株式会社では、CGI StudioとUI Conductorという2つの組み込み向けHMIオーサリングツールを開発~販売しており、車載向けメータークラスター、ヘッドアップディスプレイ、ナビゲーション、周辺監視システム、車載以外にもプリンター、デジタルカメラ、建設機械など、多くの機器で広くご採用頂いております。 |
![]() |
◆バックナンバー 第1回 身の回りにあるHMI 第2回 OpenGL ESを用いた簡単な図形の描画 |