GLenum как свойство в Objective-C OpenGL - PullRequest
0 голосов
/ 16 февраля 2012

У меня проблема с OpenGLES на iOS. Для рендеринга текстуры я загружаю ее через

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, format и target являются синтаксизированными свойствами, которые я объявил так:

@property (nonatomic, assign) GLint internalFormat;
@property (nonatomic, assign) GLenum format;
@property (nonatomic, assign) GLenum target;

проблема в том, что это не работает таким образом. я не получаю ошибки компиляции или выполнения. я вижу только белый экран, который является индикатором того, что данные не загружаются в память текстур. я установил эти три переменные в своем конструкторе

internalFormat = GL_RGBA;
format = GL_RGBA;
target = GL_UNSIGNED_SHORT_5_5_5_1;

Идея заключается в том, чтобы унаследовать от моего класса другие форматы текстур, например RGB565. Раньше это работало, если я просто перегружал метод, где я создаю текстуру GL и жестко кодировал функцию glTexImage2D

glTexImage2D(GL_TEXTURE_2D, i, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_SHORT_565, data);

Может кто-нибудь объяснить мне, почему он не работает, когда я использую свойства.

EDIT: Просто чтобы быть ясно: вопрос в том, почему я не могу использовать свойства в качестве параметров в функции glTexImage2D?

РЕДАКТИРОВАТЬ 2: Я думаю, у меня проблема. GL_RGBA и GL_UNSIGNED ... определены в заголовочных файлах opengles, поэтому прекомпилятор ObjC вставляет шестнадцатеричные коды в вызов функции glTexImage2D. если я использую переменные, прекомпилятор ничего не меняет, а значения вставляются во время выполнения, и ЭТО не работает.

1 Ответ

0 голосов
/ 25 февраля 2012

Тип GLenum - это просто typdef'd unsigned int на iOS.Вы должны быть в состоянии использовать их как «присваивать» типы свойств, как и любой другой тип unsigned int, который выглядит так же, как и вы, поэтому что-то не так в вашем фактическом назначении / использовании свойств.


Кстати, вы получаете доступ к этим синтезированным иварам непосредственно в вашем реальном коде.Если вы используете свойства, вам, вероятно, следует использовать, например, self.format или [self format] для ясности, даже если это не является строго необходимым здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...