2

クロスプラットフォームの2Dオンラインゲームを作ろうとしていますが、マップはタイルで作られています。タイルをレンダリングする私のタイルセットは非常に巨大です。ハードウェアレンダリングを無効にする方法、または少なくともそれをより機能的にする方法を知りたいと思いました。したがって、私が知る限り、Direct3Dにはテクスチャサイズの制限があります(つまり、2の累乗のテクスチャサイズを意味するわけではありません)。

4

1 に答える 1

0

ソフトウェアレンダラーを使用する場合は、Mesaに対してリンクします。

次の方法を使用して、最大テクスチャサイズの見積もりを取得できます。

21.130デバイスがハードウェアアクセラレーションをレンダリングする最大サイズのテクスチャマップはどれくらいですか?

優れたOpenGL実装は、可能な限りハードウェアアクセラレーションでレンダリングされます。ただし、実装はハードウェアアクセラレーションを自由に実行できません。OpenGLは、アプリケーションがハードウェアアクセラレーションを使用していることを確認したり、ハードウェアアクセラレーションを使用していることを照会したりするメカニズムを提供していません。この情報を念頭に置いて、次のことがまだ役立つ場合があります。

次の呼び出しで、実装がサポートする最大テクスチャサイズの見積もりを取得できます。

GLint texSize;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize);

テクスチャがハードウェアアクセラレーションされていないが、によって返されるサイズ制限の範囲内であるGL_MAX_TEXTURE_SIZE場合でも、正しくレンダリングされるはずです。

glGet*()関数は、特定のテクスチャに使用するフォーマット、内部フォーマット、タイプ、およびその他のパラメータを認識していないため、これは単なる見積もりです。OpenGL 1.1以降では、テクスチャプロキシを許可することでこの問題を解決しています。

テクスチャプロキシの使用例は次のとおりです。

glTexImage2D(GL_PROXY_TEXTURE_2D, level, internalFormat, width, height, border, format, type, NULL);

ターゲットパラメータが。の場合、OpenGLはテクセルデータをロードしないため、ピクセルパラメータがNULLであることに注意してくださいGL_PROXY_TEXTURE_2D。代わりに、OpenGLは、指定されたサイズと説明のテクスチャに対応できるかどうかを考慮するだけです。指定されたテクスチャに対応できない場合、幅と高さのテクスチャ値はゼロに設定されます。テクスチャプロキシ呼び出しを行った後、次のようにこれらの値をクエリする必要があります。

GLint width;
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);

if (width==0) {
   /* Can't use that texture */
}
于 2010-04-10T18:31:39.723 に答える