Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
"OpenGL ES 1.1.12 Спецификации Различия" (PDF), связанный с от OpenGL ES 1. X информационных страниц по Khronos.org проходят различия между OpenGL ES 1. X и OpenGL 1.5. OpenGL ES 1.1 является версией, используемой на iPhone.
спецификация различия не является самым простым документом, который я когда-либо видел, но это - более легкое чтение, чем спецификации OpenGL в целом. Я рекомендую получить список функций OpenGL, которые Вы вызываете и затем поиск документа различия для них. Это покажет Вам, если они будут поддерживаться в OpenGL ES, и если поддержка только неравнодушна, можно перейти к полной спецификации для получения дополнительной информации.
Часть проблемы в ответе на Ваш вопрос существует много вещей пропавшие без вести, и часто это - ряд редко используемых или неприменимых битовых флагов. Лучший документ, описывающий различия, является на самом деле заголовками реализации.
Для платформы я продолжаю работать, я решил сделать ее абсолютно кросс-платформенной между рабочим столом и iPhone. Подход, который я проявляю в понимании его, пишут код в OpenGL и видят, где это повреждается. Затем посмотрите в
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/
System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h
и сравните его с
/Developer/SDKs/MacOSX10.5.sdk/
System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h
, Эти заголовки очень просты и легки следовать.
основное различие, которое я обнаружил до сих пор, нет никакого GLdouble (что-либо с помощью GLdouble, такого как glOrtho и glFrustum имеет версию GLfloat glOrthof и glFrustumf). Также нет никакого gluPerspective или gluPerspectivef по некоторым причинам.
Вот понижение замены:
void gluPerspective( GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar )
{
GLfloat xmin, xmax, ymin, ymax;
ymax = zNear * tan(fovy * M_PI / 360.0);
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
glFrustumf( xmin, xmax, ymin, ymax, zNear, zFar );
}
, Так как у Вас нет glBegin и железы, необходимо сделать все через glDrawArray или (предпочтенный) glDrawElements. Быстрый и грязный пример:
void draw( short x, short y, short w, short h )
{
const GLshort t[8] = { 0, 0, 1, 0, 1, 1, 0, 1 };
const GLshort v[8] = { x, y, x+w, y, x+w, y+h, x, y+h };
glVertexPointer( 2, GL_SHORT, 0, v );
glEnableClientState( GL_VERTEX_ARRAY );
glTexCoordPointer( 2, GL_SHORT, 0, t );
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glDrawArrays( GL_TRIANGLE_FAN, 0, 4 );
}
Техническое примечание Apple Выезда TN2230 "Оптимизация OpenGL ES для iPhone OS" для некоторых других подсказок, которые могли быть полезными в портировании.
Портирование до сих пор было справедливо болью, свободной для меня, и если Ваше приложение не сделает некоторых довольно усовершенствованный материал OGL или использует абсолютно неподдерживаемую функциональность, Вы найдете свои проблемы путем нажатия кнопки сборки, и простая фиксация будет очевидна путем рытья немного в gl.h файлах. На самом деле, портируя на вид ES сил Вас для записи хорошего оптимизированного кода рендеринга.