【发布时间】:2014-10-16 01:55:19
【问题描述】:
我正在尝试渲染两个对象- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect 方法,并且我正在尝试为这两个对象绑定单独的纹理。
对于第一个对象,以下是纹理绑定代码
/************* texture binding for object 1 ****************/
glActiveTexture(GL_TEXTURE0);
err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,
_videoTextureCache,
pixelBuffer,
NULL,
GL_TEXTURE_2D,
GL_RED_EXT,
_textureWidth,
_textureHeight,
GL_RED_EXT,
GL_UNSIGNED_BYTE,
0,
&_lumaTexture);
if (err)
{
NSLog(@"Error at CVOpenGLESTextureCacheCreateTextureFromImage %d", err);
}
glBindTexture(CVOpenGLESTextureGetTarget(_lumaTexture), CVOpenGLESTextureGetName(_lumaTexture));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glActiveTexture(GL_TEXTURE1);
err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,
_videoTextureCache,
pixelBuffer,
NULL,
GL_TEXTURE_2D,
GL_RG_EXT,
_textureWidth/2,
_textureHeight/2,
GL_RG_EXT,
GL_UNSIGNED_BYTE,
1,
&_chromaTexture);
if (err)
{
NSLog(@"Error at CVOpenGLESTextureCacheCreateTextureFromImage %d", err);
}
glBindTexture(CVOpenGLESTextureGetTarget(_chromaTexture), CVOpenGLESTextureGetName(_chromaTexture));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
/************* rendering first object ****************/
[self renderFirstObject];
/************* texture binding for object 2 ****************/
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _texture1);
/************* rendering second object ****************/
[self renderSecondObject];
现在第一个对象的纹理受到干扰,而第二个对象得到正确的纹理绑定。
加载_texture1的代码(在视图控制器启动时执行一次)如下
NSDictionary* options = @{[NSNumber numberWithBool:YES] : GLKTextureLoaderOriginBottomLeft};
NSError* error;
NSString* path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
GLKTextureInfo* texture = [GLKTextureLoader textureWithContentsOfFile:path options:options error:&error];
if(texture == nil)
NSLog(@"Error loading file: %@", [error localizedDescription]);
_texture1 = texture.name;
glUseProgram(_program1);
glBindTexture(GL_TEXTURE_2D, _texture1);
【问题讨论】:
-
我没有看到
_texture1的值在发布的代码中的任何位置设置。但它在接近尾声时使用。 -
@RetoKoradi
_texture1是一个常量纹理,不会在每次渲染对象时都发生变化。所以我只在开始时加载了_texture1。但我不明白“它使用接近尾声”
标签: ios iphone opengl-es textures