Войти
ПрограммированиеФорумГрафика

Где здесь dependent texture read?

Страницы: 1 2 3 Следующая »
#0
20:49, 10 окт. 2013

Профайлер ругается, но я в упор не вижу.

+ Vertex Shader
+ Fragment shader

etLowp и все прочее, это просто дефайны типа

#define etLowp lowp


#1
21:10, 10 окт. 2013

странно.
>Dynamic texture lookups, also known as dependent texture reads, occur when a fragment shader computes texture coordinates rather than using the unmodified texture coordinates passed into the shader.
Говорится именно о пиксельном шейдере.

Как пример:

varying vec2 vTexCoord;
uniform sampler textureSampler;
 
void main()
{
    vec2 modifiedTexCoord = vec2(1.0 - vTexCoord.x, 1.0 - vTexCoord.y);
    gl_FragColor = texture2D(textureSampler, modifiedTexCoord);
}

Sergio
у тебя в пиксельном шейдере вообще текстурные координаты не модифицируются. Профайлер точно прав? :)))

#2
21:17, 10 окт. 2013

Так я про это и говорю :)

Правка: скорее всего, это какие-то особенности чипа. Но в доке я вроде не увидел упоминания.

#3
21:40, 10 окт. 2013

А если:
1 - уменьшить число сэмплов?
2 - расписать для dx/dy выражения попроще?

#4
21:43, 10 окт. 2013

Да, я вот грешу как раз на количество varying переменных. Но уменьшить не получится

#5
22:15, 10 окт. 2013

Sergio
Ну vec4 можно взять для одной varying, их сразу станет меньше )).  Или ограничение по скалярам? Я вот не помню.

#6
22:18, 10 окт. 2013

glGetIntegerv( GL_MAX_TEXTURE_IMAGE_UNITS ...Сколько сэмплов даёт?

#7
22:18, 10 окт. 2013

Varying vec4 a;

texture(..., a.xy);
texture(..., a.zw);

Как раз и будет dependent texture read.

#8
22:34, 10 окт. 2013

Kroll
Сори, GL_MAX_TEXTURE_IMAGE_UNITS, не то.

#9
22:41, 10 окт. 2013

Sergio
Так. Ну а если 8 сэмплов извлечь, линкует шейдера?
И я бы всё-таки переписал выражения dx/dy для эксперимента. Точно помню, в hlsl было, при сложном операторе, компилер выдавал хрень, не соответствующую действительности.

#10
0:04, 11 окт. 2013

Попробую ткнуть пальцем в небо: чип не поддерживает выборку при точности highp и все текстурные координаты преобразовывает в mediump.

#11
0:09, 11 окт. 2013

Роман Шувалов
+1, такие же мысли

#12
14:21, 11 окт. 2013

mediump - не помог

Правка:

  etLowp vec4 a00 = etTexture2D(inputTexture, TexCoord0);
  etLowp vec4 a02 = etTexture2D(inputTexture, TexCoord2);
  etLowp vec4 a11 = etTexture2D(inputTexture, TexCoord4);
  etLowp vec4 a20 = etTexture2D(inputTexture, TexCoord6);
  etLowp vec4 a22 = etTexture2D(inputTexture, TexCoord8);
  
  etLowp vec4 x1 = etTexture2D(inputTexture, TexCoord3);
  etLowp vec4 x2 = etTexture2D(inputTexture, TexCoord5);
  etLowp vec4 y1 = etTexture2D(inputTexture, TexCoord1);
  etLowp vec4 y2 = etTexture2D(inputTexture, TexCoord7);
  
  etLowp vec4 dx = 2.0 * (x1 - x2) + (a00 - a02) + (a20 - a22);
  etLowp vec4 dy = 2.0 * (y1 - y2) + (a00 - a20) + (a02 - a22);
  
  etFragmentOut = vec4(1.0 - sqrt(dot(dx, dx) + dot(dy, dy)));

Тоже не помогает.

#13
15:24, 11 окт. 2013

Попробуй передавать в xy vec4.

#14
15:26, 11 окт. 2013

Я вот сел плотнее с этим ковыряться. Действительно, проблема в вычислении dx и dy

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.