【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

GLES#

n7shi2009-10-06

GLES#というOpenGL ESのC#ラッパーを作成しました。スクラッチから書いた部分はパブリックドメインVincent ESGLUT|ESから流用した部分は元のライセンスです。Windows Mobile対応のためid:n7shi:20090106の方法により無料のVC# Expressで開発しています。

libGLES_CM.dllとglutes.dllが動く環境に対応します。id:n7shi:20091001x86/x64/ARMバイナリを同梱しています。EXEをC#で書くとプラットフォームに依存しない共通バイナリになるため、プラットフォームごとにビルドする手間が省けます。ラッパーにはid:n7shi:20091002で実装したglBegin(), glEnd(), glFrustum()が含まれます。

継承を利用した書き方

ラッパークラスを継承すればC言語のように関数名だけで呼び出せるため、C言語からの移植が比較的容易になります。オブジェクト指向的には問題がありますが、移植の簡単さを優先した書き方です。以下に例を示します。

class Program : GlesSharp.GL
{
    static void reshape(int width, int height)
    {
        float h = (float)height / (float)width;

        glViewport(0, 0, (int)width, (int)height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glFrustum(-1, 1, -h, h, 5, 200);
        glMatrixMode(GL_MODELVIEW);
    }
}

継承せずに利用することも可能です。ラッパーとしては普通の書き方です。

using GlesSharp;

class Program
{
    static void reshape(int width, int height)
    {
        float h = (float)height / (float)width;

        GL.glViewport(0, 0, (int)width, (int)height);
        GL.glMatrixMode(GL.GL_PROJECTION);
        GL.glLoadIdentity();
        GL.glFrustum(-1, 1, -h, h, 5, 200);
        GL.glMatrixMode(GL.GL_MODELVIEW);
    }
}

OpenGLからの移植

OpenGLから移植する際にESで削られた関数への対応が問題となります。手順としては、OpenGLのままC#に移植してからESに移植する方法と、C言語のままESに移植してからC#に移植する方法が考えられます。

サンプルとして同梱しているgearsは先にC#に移植しました。参考までに途中経過のソースを置いておきます。

先にC#に移植した理由は、ESへの移植でC#の機能が使えるためです。gearsではglBegin(), glEnd()をC#で実装しています。