Компоновка OpenGL Uniform Buffer std140, ошибка драйвера или я неправильно понял спецификацию?

Спецификация OpenGL лежит (или это ошибка?)... Ссылаясь на макет для std140 с общими единообразными буферами, он утверждает:

"Набор правил, показанный в Tabl e L-1, используется компилятором GLSL для члены в едином блоке std140. Смещения члены в блоке накапливаются на основе размеров предыдущие члены в блоке (элементы, объявленные перед переменной в вопрос) и начальное смещение. Начальное смещение первого член всегда равен нулю.

Тип скалярной переменной (bool, int, uint, float) - размер скаляра в основные типы машин "

( http://www.opengl-redbook.com/appendices/AppL.pdf )

Поэтому, вооружившись этой информацией, я устанавливаю в шейдере единый блок, который выглядит примерно так:

// Spotlight.

layout (std140) uniform Spotlight
{
    float Light_Intensity;
    vec4  Light_Ambient;
    vec3  Light_Position;   
};

... только для того, чтобы обнаружить, что он не работает с последующей компоновкой std140, которую я устанавливаю на стороне CPU. То есть первые 4 байта являются плавающей точкой (размер скалярного типа машины для GLfloat), следующие 16 байтов являются vec4 и следующие 12 байтов являются vec3 (с 4 байтами, оставшимися на конце, чтобы принять во внимание правило, что vec3 действительно является vec4).

Когда я изменяю сторону CPU, чтобы указать плавающее значение, равное размеру vec4, т.е. 16 байт, и делаю смещения и размер буфера, делая это предположение, шейдер работает так, как и предполагалось.

Таким образом, либо спецификация неверна, либо я неправильно понял значение слова «скаляр» в данном контексте, либо ATI имеет ошибку драйвера. Может ли кто-нибудь пролить свет на эту загадку?

-121--1577362-

JSONObject - Как получить значение? Я использую класс java на http://json.org/javadoc/org/json/JSONObject.html. Ниже приведен мой фрагмент кода. Строка jsonResult = UtilMethods.getJSON (this.jsonURL, null); json = новый JSONObject (...

я использую класс java на http://json.org/javadoc/org/json/JSONObject.html .

Ниже приведен мой фрагмент кода.

String jsonResult = UtilMethods.getJSON(this.jsonURL, null);
json = new JSONObject(jsonResult);

getJSON возвращает следующую последовательность

{"LabelData":{"slogan":"AWAKEN YOUR SENSES","jobsearch":"JOB SEARCH","contact":"CONTACT","video":"ENCHANTING BEACHSCAPES","createprofile":"CREATE PROFILE"}}

Теперь... как получить значение «слоган»?

Я попробовал все методы, перечисленные на странице, но ни один из них не сработал.

61
задан Moon 17 September 2011 в 00:22
поделиться