0xd34df00d
06.12.2012 17:37 Azoth_primary
Слева виден образец применения шейдеров в кутях.
Recommended by:
@pooq: моча съела говно
and @nekoexmachina
> неумелого применения шейдеров в кутях
Скопипастил из примеров.
— посмотри как у нормальных посонов
хуйня у тебя слева вместо шейдеров
А как надо?
ShaderEffectItem {
property variant source: ShaderEffectSource { sourceItem: tcButton; hideSource: true }
property real wiggleAmount: 0.05
anchors.fill: tcButton
smooth: true
fragmentShader: "
varying highp vec2 qt_TexCoord0;
uniform sampler2D source;
uniform highp float wiggleAmount;
void main(void)
{
highp vec2 wiggledTexCoord = qt_TexCoord0;
wiggledTexCoord.s += sin(4.0 * 3.141592653589 * wiggledTexCoord.t) * wiggleAmount;
gl_FragColor = texture2D(source, wiggledTexCoord.st);
}
"
}
ну посмотри как делается liquid flow и запили при наведение на виджет мышкой такую хуерду.
Че блядь. Я вообще отсюда скопипастил → http://doc.qt.digia.com/qt/qml-shadereff...
ты решил наложить такой эффект на картинку?
Да. Опенглу должно быть похуй, просто в случае картинки текстура сразу идет на GPU, а в случае некартинки qml engine сначала это дело рендерит.
ЭФФЕКТ ТРЕУГОЛЬНИКА
Ч.
Че.
бял, да посмотри на скриншот который ты запостил
А, не, посоны, все ок, я мудак просто и случайно сделал шейдер чайлдом самого айтема, поэтому шейдер шел по пизде, применяя себя к своему результату.
Я не в теме, что за эффект?
вот именно, что говно, а не эффект.
c каждым днем в личкрафтах все больше свистоперделок и все меньше юзабилити и полезных вещей...
охуенно же. как мне сделать такое же в емаксе?
Слых, а как размытие сделать средствами шейдеров? Типа как под картинкой слева здесь →
google://gaussian blur
Да нихрена. Я просто хочу уйти от QGraphicsEffect'а для размытия/colorize картинок, потому что QGraphicsEffect феерически тормозит, и у меня баттхерт, когда я смотрю на профайлер и вижу, что 20% времени проводится в наложении эффекта.
Ты мне шейдер дай, а то я не шарю в них.
тоесть смысль о том, что бы нахуй убрать свистоперделку тебе даже в голову не пришла. Кутим головного мозга
вертексный шейдер:
varying vec2 vTexCoord;
// remember that you should draw a screen aligned quad
void main(void)
{
gl_Position = ftransform();;
// Clean up inaccuracies
vec2 Pos;
Pos = sign(gl_Vertex.xy);
gl_Position = vec4(Pos, 0.0, 1.0);
// Image-space
vTexCoord = Pos * 0.5 + 0.5;
}
пиксельный:
uniform sampler2D RTScene; // the texture with the scene you want to blur
varying vec2 vTexCoord;
const float blurSize = 1.0/512.0; // I've chosen this size because this will result in that every step will be one pixel wide if the RTScene texture is of size 512x512
void main(void)
{
vec4 sum = vec4(0.0);
// blur in y (vertical)
// take nine samples, with the distance blurSize between them
sum += texture2D(RTScene, vec2(vTexCoord.x — 4.0*blurSize, vTexCoord.y)) * 0.05;
sum += texture2D(RTScene, vec2(vTexCoord.x — 3.0*blurSize, vTexCoord.y)) * 0.09;
sum += texture2D(RTScene, vec2(vTexCoord.x — 2.0*blurSize, vTexCoord.y)) * 0.12;
sum += texture2D(RTScene, vec2(vTexCoord.x — blurSize, vTexCoord.y)) * 0.15;
sum += texture2D(RTScene, vec2(vTexCoord.x, vTexCoord.y)) * 0.16;
sum += texture2D(RTScene, vec2(vTexCoord.x + blurSize, vTexCoord.y)) * 0.15;
sum += texture2D(RTScene, vec2(vTexCoord.x + 2.0*blurSize, vTexCoord.y)) * 0.12;
sum += texture2D(RTScene, vec2(vTexCoord.x + 3.0*blurSize, vTexCoord.y)) * 0.09;
sum += texture2D(RTScene, vec2(vTexCoord.x + 4.0*blurSize, vTexCoord.y)) * 0.05;
gl_FragColor = sum;
}
ну расскажи тогда, как мне визуально выделять лончеры для неактивных вкладок.
вообще-то лучше сделать convolution kernel и несколько раз применять для нормального размытия.
Че.
в твоем qml можно указать чтобы шейдер несколько раз применялся к фрагменту?
Хм, хуй знает. Похоже, что нет.
ну попробуй это тогда
01 uniform sampler2D image;
02
03 out vec4 FragmentColor;
04
05 uniform float offset[5] = float[]( 0.0, 1.0, 2.0, 3.0, 4.0 );
06 uniform float weight[5] = float[]( 0.2270270270, 0.1945945946, 0.1216216216,
07 0.0540540541, 0.0162162162 );
08
09 void main(void)
10 {
11 FragmentColor = texture2D( image, vec2(gl_FragCoord)/1024.0 ) * weight[0];
12 for (int i=1; i<5; i++) {
13 FragmentColor +=
14 texture2D( image, ( vec2(gl_FragCoord)+vec2(0.0, offset[i]) )/1024.0 )
15 * weight[i];
16 FragmentColor +=
17 texture2D( image, ( vec2(gl_FragCoord)-vec2(0.0, offset[i]) )/1024.0 )
18 * weight[i];
19 }
20 }
Эм, стоп. Похоже. кути не умеют в пиксельные шейдеры, только вершинные и фрагментные. Этот чо какой?
а смысл, если по клику они становятся активными, не смотря на то, что может бытьт октрыто куча вкладок этого типа
пиксельный и есть фрагментный. просто фрагменты почему-то называют пикселями, хотя пикселями они становятся после растеризации
сделай в конце main gl_FragColor = FragmentColor
Гм, а матрицу свертки тут можно свести как-то к типам из таблички на http://doc.qt.digia.com/qt/qml-shadereff... ? А то мне из остального куэмеля надо периодически менять силу размытия.
И ваще, приходи в конфочку, там тебя заебывать удобнее будет :3
не вижу такого.
можешь либо до отрисовки вижета передавать параметры при помощи glProgramUniform***,
либо понахуярить разных шейдеров для разных уровней с вшитыми параметрами.
У меня там континуум уровней в общем случае (с точностью до машинной точности), неприятно хуярить. Подумаю еще. А в конфочку приходи, да.