-1

MonoGameに付属する「サンプル」プロジェクトのいずれかを実行すると、「MonoGameGLException」が発生します。これは、次のコードのTexture2Dコンストラクターで発生します。

GL.CompressedTexImage2D(TextureTarget.Texture2D, 0, glInternalFormat,
    this.width, this.height, 0,
    imageSize, IntPtr.Zero);
GraphicsExtensions.CheckGLError(); <-- Error here

「glInternalFormat」の値は次のとおりです。

OpenTK.Graphics.OpenGL.PixelInternalFormat.CompressedRgbaS3tcDxt3Ext

これは、Intel統合グラフィックカードで実行されているUbuntuLinuxで発生します。

4

1 に答える 1

3

TL; DR

これは、OpenGL実装(Mesa)に内部テクスチャ形式(S3TC )のサポートが含まれていないために発生するエラーです。libtxc_dxtnライブラリをインストールして、この機能をMesaに追加します。

問題

OpenGLは、MonoGameがグラフィックスをレンダリングするために使用するグラフィックスAPIです。OpenGLは単なるAPIであるため、システムで動作させるには、そのAPIの実装が必要です。NVIDIAまたはATIカードをお持ちの場合は、独自のドライバ(OpenGL APIのクローズドソース実装を含む)をダウンロードできます。独自のドライバーを使用していない場合(またはオープンソースドライバーを備えたIntelグラフィックカードのようなカードを使用している場合)、OpenGLAPI標準のオープンソース実装であるMesaを実行している可能性があります。

OpenGLには基本標準がありますが、多くの拡張機能もあります。これらの拡張機能の1つは、EXT_texture_compression_s3tcです。これは、グラフィックカードにロードするテクスチャをS3TCファミリーのアルゴリズムの特定のアルゴリズムを使用して圧縮する必要があることをユーザーが指定できるようにする拡張機能です。これが「GL.CompressedTexImage2D」行が実際に行うことです。DXT3アルゴリズムを使用して圧縮されるテクスチャ用のスペースを確保するように要求します。

Mesaは、OpenGLAPIと拡張機能のリストのすべてを実装しているわけではありません。具体的には、 S3TC拡張機能を実装していません(法的な理由により)。

「無効な列挙型」は、MesaPixelInternalFormat.CompressedRgbaS3tcDxt3Extがサポートしていない拡張機能(列挙値で指定)を使用するようにMesaに指示しようとしているためにMesaがスローするエラーです。これは、OpenGL実装が、サポートされていない値を参照していることを通知する標準的な方法です。

ソリューション

したがって、これを修正するには2つのオプションがあります。

まず、S3TCの使用を停止するようにMonoGameを回避します。これには、MonoGameコードの変更が必要になる場合があります。または、ContentPipelineを使用して、使用するテクスチャ圧縮アルゴリズムを指定するためのより良い方法があるかもしれません。

次に、S3TCアルゴリズムをインストールします。MesaにはデフォルトでS3TCが含まれていませんが、Mesaの外部ライブラリを含めることができます。MesaWikiS3TCページの詳細。Mesaは特定のコンパイラフラグを使用してビルドする必要があり、次にライブラリをインストールする必要があります。私のUbuntuインストール(12.04)では、ライブラリのインストールがうまく機能したため、コンパイル時にMesaパッケージでこのフラグが有効になっていると想定しています。libtxc-dxtn-s2tc0Ubuntuでは、パッケージをインストールしました。

sudo apt-get install libtxc-dxtn-s2tc0

その後、すべてのMonoGameサンプルが機能していました。

于 2012-10-20T15:12:08.197 に答える