По какой-то причине OpenGL действует очень странно. В моем подклассе NSOpenGLView у меня есть следующий код в методе -prepareOpenGL
:
- (void)prepareOpenGL {
GLfloat lightAmbient[] = { 0.5f, 0.5f, 0.5f, 1.0f };
GLfloat lightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat lightPosition[] = { 0.0f, 0.0f, 2.0f };
quality = 0;
zCoord = -6;
[self loadTextures];
glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.2f, 0.2f, 0.2f, 0.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glLightfv(GL_LIGHT1, GL_AMBIENT, lightAmbient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, lightDiffuse);
glLightfv(GL_LIGHT1, GL_POSITION, lightPosition);
glEnable(GL_LIGHT1);
gameState = kGameStateRunning;
int i = 0; // HERE ********
[NSTimer scheduledTimerWithTimeInterval:0.03f target:self
selector:@selector(processKeys) userInfo:nil repeats:YES];
// Synchronize buffer swaps with vertical refresh rate
GLint swapInt = 1;
[[self openGLContext] setValues:&swapInt forParameter:NSOpenGLCPSwapInterval];
// Setup and start displayLink
[self setupDisplayLink];
}
Я хотел назначить таймер, который обрабатывает ввод ключа, на иваре, чтобы я мог сделать его недействительным, когда игра приостановлена (и восстановить его при возобновлении), однако, когда я сделал это (в отличие от того, чтобы оставить его в [NSTimer scheduleTimer) …), OpenGL не отображает куб, который я рисую. Когда я забираю это, это нормально. Поэтому я попытался просто добавить безобидное утверждение, int i = 0;
(помечено // HERE *******
), и это делает освещение неработающим! Когда я убираю это, все хорошо, но когда я возвращаю это, все темно. Может кто-нибудь придумать рациональное объяснение этому? Просто создание любой переменной делает это, даже если уже объявлено несколько.
Спасибо.