Расширения OpenGL ES на HTC Hero (Android 1. 5):
Расширения OpenGL ES на Nexus One (Android 2. 1):
расширения OpenGL ES на HTC G1 (Android 1. Версия 6):
OpenGL ES на HTC G1 (Android 1.6):
я включаю версию, как восстановлено:
gl.glGetString (GL10. GL_VERSION)
Это довольно интересно в этом, это не следует спецификации. Профиль должен быть перед номером. Он также необходим для определения возможностей. Например, Droid не сообщает о поддержке VBO в списке расширений. Однако он сообщает о версии OpenGL ES 1.1. Это означает, что он поддерживает VBO, потому что VBO были сделаны обязательными в версии 1.1.
Интернет-планшет Archos 5 под управлением Android 1.6:
GL_VERSION:
GL_EXTENSIONS:
GL_RENDERER:
GL_VENDOR:
GL_ALIASED_POINT_SIZE_RANGE:
GL_SMOOTH_POINT_SIZE_RANGE:
Видимо, это означает отсутствие аппаратного ускорения OpenGL.
Когда я проходил курс компилятора в колледже, я вообще не понимал FIRST и FOLLOWING. Я реализовал алгоритмы, описанные в книге Dragon, но понятия не имел, что происходит. Думаю, сейчас.
Я предполагаю, что у вас есть книга, которая дает формальное определение этих двух наборов, и книга совершенно непонятна. Я постараюсь дать их неофициальное описание, и надеюсь, это поможет вам понять, что в вашей книге.
Аппарат FIRST - это набор терминалов, который можно рассматривать как первую часть расширения нетерминала. Аппарат FOLLOWING - это набор терминалов, который можно увидеть после расширения нетерминала.
В вашей первой грамматике имеется только три типа терминалов: =
, *
и id
. (Можно также считать клеммой символ конца ввода $
.) Единственными нетерминалами являются S
(оператор) и L
(Lvalue - «вещь», которой можно присвоить).
Рассмотрим FIRST (S) как набор нетерминалов, которые могут запустить оператор. Интуитивно известно, что оператор не начинается с =
. Так что вы не ожидаете, что это появится в FIRST (S).
Как начинается утверждение? Существует два правила производства, которые определяют, как выглядит S
, и оба они начинаются с L
. Итак, чтобы выяснить, что в FIRST (S), вы действительно должны посмотреть на то, что в FIRST (L). Существует два правила производства, которые определяют, как выглядит Lvalue: оно либо начинается с *
, либо с id
. Итак, FIRST (S) = FIRST (L) = { *
, id
}.
ДАЛЕЕ (S) легко. Ничто не следует за S
, потому что это символ начала. Таким образом, единственное, что в FOLLOWS (S), это $
, символ конца ввода.
НИЖЕ (L) немного сложнее. Необходимо просмотреть каждое производственное правило, в котором отображается L
, и посмотреть, что наступит после него. В первом правиле видно, что =
может следовать L
. Таким образом, =
находится в СЛЕДУЮЩЕМ (L). Однако в этом правиле также отмечается, что в конце производственного правила имеется еще один L
. Так что другая вещь, которая может следовать за L
, это все, что может следовать за этим производством. Мы уже выяснили, что единственное, что может следовать за производством S
, - это конец ввода. Итак, СЛЕДУЕТ (L) = { =
, $
}. (Если вы посмотрите на другие правила производства, L
всегда появляется в конце их, так что вы просто получите $
из них.)
Посмотрите на это Простое объяснение , и пока игнорировать все вещи о ϵ
, потому что у вас нет производственный, которые содержат пустую строку. В разделе «Правила для первых наборов» правила # 1, # 3 и # 4.1 должны иметь смысл. В разделе «Правила для следующих наборов»правила # 1, # 2 и # 3 должны иметь смысл.
Ситуация усложняется, если в правилах производства имеется ϵ
. Предположим, у вас есть что-то подобное:
D -> S C T id = V // Declaration is [Static] [Const] Type id = Value
S -> static | ϵ // The 'static' keyword is optional
C -> const | ϵ // The 'const' keyword is optional
T -> int | float // The Type is mandatory and is either 'int' or 'float'
V -> ... // The Value gets complicated, not important here.
Теперь, если вы хотите вычислить FIRST (D), вы не можете просто посмотреть на FIRST (S), потому что S может быть «пустым». Интуитивно известно, что FIRST (D) является { статическим
, const
, int
, float
}. Эта интуиция кодифицирована в правиле № 4.2. Рассмотрим SCT
в этом примере как Y1Y2Y3
в правилах «Простое объяснение».
Если вы хотите вычислить FOLLOWES (S), вы не можете просто посмотреть на FIRST (C), потому что это может быть пустым, поэтому вы также должны посмотреть на FIRST (T). Итак, СЛЕДУЕТ (S) = { const
, int
, float
}. Вы получаете это, применяя «Правила для следующих наборов» # 2 и # 4 (более или менее).
Я надеюсь, что это поможет и что вы сможете выяснить ПЕРВЫЙ и СЛЕДУЮЩИЙ для второй грамматики самостоятельно.
Если это помогает, R
представляет значение Rvalue - вещь, которой нельзя присвоить, например константу или литерал. Lvalue также может действовать как Rvalue (но не как другие пути вокруг).
a = 2; // a is an lvalue, 2 is an rvalue
a = b; // a is an lvalue, b is an lvalue, but in this context it's an rvalue
2 = a; // invalid because 2 cannot be an lvalue
2 = 3; // invalid, same reason.
*4 = b; // Valid! You would almost never write code like this, but it is
// grammatically correct: dereferencing an Rvalue gives you an Lvalue.
-121--3802264- Только что получил Droid под управлением Android 2.0.1.
GL_EXTENSIONS:
GL_VERSION:
GL_RENDERER:
GL_VENDOR:
GL_ALIASED_POINT_SIZE_RANGE:
GL_SMOOTH_POINT_SIZE_RANGE:
Информация о OpenGL ES для HTC Desire (AU)
GL_EXTENSIONS:
GL_VERSION:
GL_RENDERER:
GL_VENDOR:
Вот информация для Samsung GT-I5700 (Spica / Galaxy Spica) с Android 1.5:
GL_VERSION:
GL_RENDERER:
GL_VENDOR:
GL_EXTENSIONS:
Вот HTC Evo 4G под управлением Android 2.1-update1 (спасибо Google IO):
GL_VERSION:
GL_EXTENSIONS:
GL_RENDERER:
GL_VENDOR:
GL_ALIASED_POINT_SIZE_RANGE:
GL_SMOOTH_POINT_SIZE_RANGE:
Я думал, что производительность будет дублировать производительность Nexus. В конце концов, у него тот же рендерер/процессор. Экран TFT вместо OLED, но разрешение такое же. Однако одна из моих игр, которая на N1 занимает 16-18 мс на кадр, на этом устройстве занимает 33-34 мс. Я еще не выяснил, почему. Число выглядит подозрительно, как если бы экран работал на частоте 30 Гц, а не 60 Гц. Однако я еще не подтвердил это.
Похоже, Дейв Вебб прав.
Вот что у меня есть с оригинальным Droid с Android 2.1, что отличается от того, что было сообщено здесь для Droid с Android 2.0.1.
Версия GL
GL Vendor
GL Renderer
GL Extensions