2012-04-22 19 views
3

は、私がGL_APPLE_texture_2D_limited_npot拡張子を使用したい(ゲームはNPOTテクスチャを持っている、と私の現在の実装では私は2つのそれらの電力を作るためにいくつかのパディングを追加します)。iPadの不足しているOpenGLの拡張文字列GL_APPLE_texture_2D_limited_npot

私のiPad(第1世代)でテストしています。私がこれまでに読んだことのすべては、OpenGLES2(iPadを含む)をサポートするすべてのiOSデバイスがGL_APPLE_texture_2D_limited_npot(私のゲームOpenGLES2を使用しているので非常に良い)をサポートしていると言います。私は私のiPadでテストしています(GL_CLAMP_TO_EDGEにラップを設定するとパディングと画像が削除されました)がサポートされますが、glGetString(GL_EXTENSIONS)を呼び出すと表示されません。コード:中

const char *extensions = (const char *)glGetString(GL_EXTENSIONS); 
std::cout << extensions << "\n"; 

結果:

GL_OES_depth_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_texture_float GL_OES_texture_half_float GL_OES_vertex_array_object GL_EXT_blend_minmax GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_separate_shader_objects GL_EXT_shader_texture_lod GL_EXT_texture_filter_anisotropic GL_APPLE_framebuffer_multisample GL_APPLE_rgb_422 GL_APPLE_texture_format_BGRA8888 GL_APPLE_texture_max_level GL_IMG_read_format GL_IMG_texture_compression_pvrtc 

なぜこの拡張はglGetString(GL_EXTENSIONS)と表示されていないのですか?それを確認する適切な方法は何ですか?すべてのOpenGLES2 iOSデバイスが本当にサポートしていますか?

答えて

5

OpenGL ES 2.0は、仕様で非テクスチャ2テクスチャをサポートしています。拡張の必要はありません。ここで仕様は次のとおりhttp://www.khronos.org/registry/gles/specs/2.0/es_full_spec_2.0.25.pdf(ページ69):

重量およびHTは、指定された画像の幅と高さ、及び重量またはHTのいずれかがゼロより 小さい場合、エラーINVALID_VALUEが発生した場合。 2次元テクスチャ画像の最大幅と高さ は、レベル0〜kの画像配列の場合、少なくとも2k-lodでなければなりません。ここで、kは、基数2がMAX_TEXTURE_SIZEのログです。 lodはイメージ配列の詳細レベルです。 詳細レベルの画像配列がkより大きい場合は、ゼロになることがあります。エラー INVALID_VALUEは、指定されたイメージが大きすぎて の条件下に格納できない場合に生成されます。

2つの制限(OpenGL ES 1.x標準)の威力については言及していません。

そして、拡張の仕様 - http://www.khronos.org/registry/gles/extensions/APPLE/APPLE_texture_2D_limited_npot.txtを読んだら、それは再びOpenGL ES 1.1仕様に書かれています。

+0

スペックリンクありがとうございます。私はそれを見て、それは2つのテクスチャの非力を言及することを追加する必要があります。 OpenGLES2はNPOTテクスチャを完全にはサポートしていませんが、OpenGLES1 GL_APPLE_texture_2D_limited_npot拡張はOpenGLES2の一部であるようです(拡張ではなく、glGetString(GL_EXTENSIONS)によって返されません)。 CLAMP_TO_EDGEの制限はOpenGLES2にも適用されます。 – fbafelipe

+0

いいえ、GLES2はNPOTテクスチャを完全にサポートしています。デスクトップGL2とまったく同じです。 –

+2

OpenGLES2仕様(あなたのリンク):3.8.2テクスチャ上のシェーダ実行「フラグメントシェーダからサンプラを呼び出すと(R、G、B、A)=(0,0,0,1) "..."•2次元サンプラが呼び出され、対応するテクスチャ画像が2の非累乗画像である(3.7.7項のミップマッピングの説明を参照)テクスチャ・ラップ・モードがCLAMP_TO_EDGEでないか、または縮小フィルタがNEARESTでもLINEARでもない。 iPadでこの動作を確認できます(つまり、折り返しをREPEATに設定すると、NPOTが黒くなります)。 – fbafelipe

関連する問題