Нет, там единица (u_pos_modif.w). И выводил в консоль, и изменял вручную на константу. Более того, u_pos_modif можно вообще выкинуть и делать только выборку из текстуры. Баг проявляется и в этом случае.
Вечером прогоню через PVRShaderEditor, посмотрим, что выдаст.
выложи асмовыхлоп того, что получается с прибавлением нулевого вектора и без
Единственный работающий в PVRShaderEditor компилятор - PowerVR GLSLES Series6. Выдаёт одинаковый результат что с прибавлением нулевого вектора, что без.
--------------------- Disassembled HW Code --------------------
0 : fitr.pixel r2, drc0, cf4, cf0, 2;
1 : mov ft0, sh9
mov r0.e0.e1.e2.e3, ft0
mov r1, sh10;
2 : wdf drc0
3 : smp2d.fcnorm drc0, sh4, r2, sh0, _, r6, 1;
4 : wdf drc0
5 : fmul ft0, sh8, r6
mov r2.e0.e1.e2.e3, sh11
mov r3, ft0;А XCode случайно не умеет дебажить OpenGL/GLSL ES непосредственно на iOS-устройстве?
Ты пробовал втыкать свой шейдер в пустое приложение?
Так, минутку. Нажал кнопку "Apply optimizer" - оптимизирует исходный код. Выхлоп поменялся на вот такой:
--------------------- Disassembled HW Code --------------------
0 : fitr.pixel r2, drc0, cf4, cf0, 2;
1 : mov ft0, sh8
mov r0.e0.e1.e2.e3, ft0
mov r1, sh9;
2 : wdf drc0
3 : smp2d.fcnorm drc0, sh4, r2, sh0, _, r6, 1;
4 : wdf drc0
5 : fmul ft0, sh11, r6
mov r2.e0.e1.e2.e3, sh10
mov r3, ft0;Поменялись местами только некоторые регистры (ft*).
Сам исходник:
#version 100
precision mediump float;
uniform sampler2D u_sampler;
varying vec2 v_uv;
uniform vec4 u_pos_modif;
uniform vec3 u_color;
void main ()
{
lowp vec4 tmpvar_1;
tmpvar_1.xyz = u_color;
tmpvar_1.w = (texture2D (u_sampler, v_uv).x * u_pos_modif.w);
gl_FragColor = tmpvar_1;
}И с ним бага нет! о_О
До кучи, раз такая пьянка, недавно столкнулся с такой бедой на Adreno (андроид девайсы)
uniform vec4 joints[MAX_COUNT]; ... if (dot( joints[i], joints[j]) < 0.0) ... // не работает dot == 0.0 всегда if ( dot( joints[i].xyz, joints[j].xyz) + joints[i].w * joints[j].w) < 0.0) ... // работает
А также с тем, что нельзя делать discard до выборки из всех переданных в шейдер семплеров.
Но это всё оффтоп.
XProger
> семплеров.
Не понял, где тут семплер ?
Роман Шувалов
> где искать источник проблемы?
Ответ, как и сам вопрос кроется в названии темы:
> на айфоне и айпаде
XProger
На Qualcomm спрашивал ? https://developer.qualcomm.com/forums/software/adreno-gpu-sdk
Слышал еще жаобы на Adreno.
XProger
> discard
Дискард вообще тупит на некоторых чипах. Кажется от нВидии, не помню, но точно помню, что дискардом лучше не пользоваться.
gammaker
> Ответ, как и сам вопрос кроется в названии темы:
> > на айфоне и айпаде
XCode умеет получать асмо-выхлоп шейдеров? Как? И какие у него еще отладочные средства для данного случая?
Роман Шувалов
> XCode умеет получать асмо-выхлоп шейдеров? Как? И какие у него еще отладочные
> средства для данного случая?
Я не знаю, никогда под них не разрабатывал и MacOS с XCode не юзал.
Тема в архиве.