我是一个 openGL 新手,我正在尝试让纹理共享在两个 openGL 视图之间工作。我创建了两个 NSOpenGL 视图类,然后在界面构建器中创建了一个窗口,每个窗口都有一个 openGL 视图。第一个视图在其 prepareOpenGl 中有代码,用于设置纹理并将其分配给全局变量,第二个视图将其 openGlContext 重新初始化为与创建纹理的原始视图共享的代码,然后在第二个视图我在全局纹理上调用 glBindTexture。当我运行我的应用程序时,我只在第一个视图上看到一个纹理,而第二个视图只显示一个无纹理的对象。看来我的纹理共享不起作用。我想知道我的总体策略是否有缺陷,或者我是否只是遗漏了一些细节。
-(void)prepareOpenGL {
//prepareOPenGL of the first view
glEnable( GL_TEXTURE_2D );
glEnable(GL_DEPTH_TEST);
//makeImage() creates a silly little texture pattern
makeImage();
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, &texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
glShadeModel(GL_SMOOTH);
}
-(void)prepareOpenGL {
//prepareOpenGL of the second view
glEnable( GL_TEXTURE_2D );
glEnable(GL_DEPTH_TEST);
glBindTexture(GL_TEXTURE_2D, &texName);
glShadeModel(GL_SMOOTH);
}
- (id)initWithFrame:(NSRect)frame {
if(self = [super initWithFrame:frame])
{
printf("InitWithFrame: \n");
NSOpenGLContext* context = [[[NSOpenGLContext alloc] initWithFormat:[NSOpenGLView defaultPixelFormat] shareContext:[otherView openGLContext]] autorelease];
[self setOpenGLContext:context];
}
return self;
}
当我提到“第二个视图”时,我的意思是试图使用原始视图的纹理。