iOSのOpenGLESに問題があります。Objective-CのGLenumプロパティとしてOpenGL
@property (nonatomic, assign) GLint internalFormat;
@property (nonatomic, assign) GLenum format;
@property (nonatomic, assign) GLenum target;
問題は、それがこのように動作しないということです。私はこのように宣言
if (numberOfMipmaps > 0) {
if (textureData != 0)
glDeleteTextures(1, &textureData);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &textureData);
glBindTexture(GL_TEXTURE_2D, textureData);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
CHECK_GL_ERROR();
for (GLint i = 0; i < numberOfMipmaps; i++) {
unsigned char *data = mipmaps[i].address;
glTexImage2D(GL_TEXTURE_2D, i, internalFormat, width, height, 0, format, target, data);
//glGenerateMipmapOES(GL_TEXTURE_2D);
CHECK_GL_ERROR();
width = MAX(width >> 1, 1);
height = MAX(height >> 1, 1);
}
}
internalFormat、フォーマットとターゲットがsyntesizedされているプロパティを経由して、私はそれを読み込むテクスチャをレンダリングします。私はコンパイルやランタイムエラーが発生しません。私は、テクスチャメモリにデータがロードされていないことを示す白い画面しか表示しません。私は私のコンストラクタこの背後にある考え方は、RGB565のような他のテクスチャフォーマットを提供するために、私のクラスを継承することです
internalFormat = GL_RGBA;
format = GL_RGBA;
target = GL_UNSIGNED_SHORT_5_5_5_1;
にこれら三つの変数を設定します。私は単に私がGLテクスチャを作成する方法をオーバーロードし、私はプロパティを使用する場合、それは働いていない理由を
glTexImage2D(GL_TEXTURE_2D, i, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_SHORT_565, data);
は、誰も私に説明することができglTexImage2D機能をハードコーディングしている場合 は、それが動作するために使用しました。
編集: ちょっとわかりやすく:質問はなぜglTexImage2D関数のパラメータとしてプロパティを使用するのですか?
EDIT 2: 私は問題があると思います。 GL_RGBAとGL_UNSIGNED ...はopenglesヘッダーファイルで定義されているため、ObjCプリコンパイラは16進コードをglTexImage2D関数呼び出しに貼り付けます。変数を使用すると、プリコンパイラは何も変更せず、実行時に値が挿入され、動作しません。
GL_UNSIGNED_SHORT_5_5_5_1またはGL_UNSIGNED_SHORT_565をターゲットとして使用しますか?プロパティとしては1つの値を使用しますが、glTexImage2D関数呼び出しの例では異なる値を使用するためです。 –
どこに割り当てましたか? 'init'メソッドで?あなたはサブクラスで ''スーパーイン。 ''と呼んでいましたか? –
@MārtiņšMožeiko:まあ、両方。私はメインクラスから継承したい。それはポイントではありません。私はプロパティを使用しない場合は、テクスチャの読み込みと使用が機能します。私はメソッドをデバッグし、プロパティが正しい値を持っていることを二重にチェックしました。 – nurbs999