Я немного новичок в openGL и пытаюсь заставить совместное использование текстур работать между двумя представлениями openGL. Я создал два класса представления NSOpenGL, а затем в конструкторе интерфейса создал окно, в котором было по одному на каждое представление openGL. Первое представление имеет код в своем prepareOpenGl, который устанавливает текстуру и присваивает ее глобальной переменной, второе представление повторно инициализирует свой openGlContext, чтобы оно было разделено с исходным представлением, создавшим текстуру, затем в prepareOpenGL Второе представление я называю 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;
}
Когда я ссылаюсь на «второй вид», я имею в виду тот, который пытается использовать текстуру исходного вида.