私は少し openGL 初心者で、2 つの openGL ビュー間でテクスチャ共有を機能させようとしています。2 つの NSOpenGL ビュー クラスを作成し、インターフェイス ビルダーで、各 openGL ビューを 1 つ持つウィンドウを作成しました。最初のビューの prepareOpenGl には、テクスチャを設定してグローバル変数に割り当てるコードが含まれています。 2 番目のビューでは、グローバル テクスチャで glBindTexture を呼び出します。アプリケーションを実行すると、最初のビューにテクスチャしか表示されず、2 番目のビューにはテクスチャのないオブジェクトが表示されます。テクスチャの共有が機能していないようです。私の一般的な戦略に欠陥があるのか 、それとも細部が少し欠けているだけなのか疑問に思っています.
-(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;
}
「2 番目のビュー」とは、元のビューのテクスチャを使用しようとしているビューを意味します。