У меня очень простая проблема с текстурной картой в GL на iPhone, и мне интересно, какие существуют стратегии для отладки такого рода вещей.
(Честно говоря, просто смотреть на вызовы конечных автоматов и задаться вопросом, является ли какой-либо из них неправильным или неупорядоченным, невозможно жить - есть ли инструменты для этого?)
У меня есть PNG-файл 512x512, который я загружаю с диска (не упакованный специально), создаю CGBitmapContext
, затем вызываю CGContextDrawImage
, чтобы извлечь из него байты. (Этот код, по сути, украден из образца Apple.) Я пытаюсь отобразить текстуру в «квад», с кодом, который выглядит по существу так: все плоские 2D-вещи, ничего особенного:
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
GLfloat vertices[8] = {
viewRect.origin.x, viewRect.size.height,
viewRect.origin.x, viewRect.origin.y,
viewRect.size.width, viewRect.origin.y,
viewRect.size.width, viewRect.size.height
};
GLfloat texCoords[8] = {
0, 1.0,
0, 0,
1.0, 0,
1.0, 1.0
};
glBindTexture(GL_TEXTURE_2D, myTextureRef); // This was previously bound to
glVertexPointer(2, GL_FLOAT , 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
- Моя предположительно текстурированная область получается просто черной.
- Я не вижу отладочных выходов из вызовов CG для настройки текстуры.
glGetError
ничего не сообщает.
- Если я упросту этот блок кода, чтобы просто нарисовать вершины, но установлю чистый цвет, область квадратора загорится точно так, как и ожидалось.
- Если я сразу очищаю весь контекст красным, я не вижу красного - что означает, что там что-то отображается, но не содержимое моего PNG.
Что я мог делать не так? И что еще более важно, каковы правильные инструменты и методы для отладки такого рода вещей, потому что столкновение с такой проблемой и неспособность каким-либо осмысленным образом «пройти через нее» в отладчике - облом.
Спасибо!