[英]GLenum as property in Objective-C OpenGL
我在iOS上遇到OpenGLES問題。 要渲染紋理,我通過
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);
誰能向我解釋為什么當我使用屬性時它不起作用。
編輯:只是要清楚:問題是為什么我不能在glTexImage2D函數中使用屬性作為參數?
編輯2:我認為我有問題。 GL_RGBA和GL_UNSIGNED ...在opengles頭文件中定義,因此ObjC預編譯器將十六進制代碼粘貼到glTexImage2D函數調用中。 如果我使用變量,則預編譯器不會更改任何內容,並且值會在運行時插入,並且那是行不通的。
GLenum
類型只是iOS上的typdef'd unsigned int
。 您應該能夠像使用其他未簽名的int一樣將它們用作“分配”屬性類型,這似乎和您所做的一樣,因此在實際分配/使用屬性時出現了問題。
順便說一句,您可以直接在實際代碼中訪問這些綜合的ivars。 如果您正在使用屬性,則可能為了清晰起見應該在其中使用例如self.format
或[self format]
,即使在此處不一定嚴格要求使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.