У меня проблема с 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. если я использую переменные, прекомпилятор ничего не меняет, а значения вставляются во время выполнения, и ЭТО не работает.