簡體   English   中英

GLenum作為Objective-C OpenGL中的屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM