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

Есть ли хороший отладчик шейдеров для GLSL?

Страницы: 1 2 Следующая »
#0
16:23, 29 июля 2014

Всем доброго дня. Каким софтом можно проследить, как меняется значение переменной в шейдере? Я порылся в gDEBugger и не нашел такой функции, ищу что-то другое.

UPD: для версии 4.3 и выше, для Windows, с гуем, весом до 200 мегабайт.


#1
18:21, 29 июля 2014

1.Nvidia nSight Visual Studio Edition (сам не смотрел)
2. отладить в hlsl а потом утилитой конвертнуть в glsl(тоже не пробовал пока)

#2
20:52, 29 июля 2014

TheOrca
> Всем доброго дня. Каким софтом можно проследить, как меняется значение
> переменной в шейдере?

Если баг в драйвере - поможет вряд ли :)

Какая, конкретно, ситуация ?

#3
12:10, 30 июля 2014

PaulSh
А под AMD карты она бачит?

#4
14:32, 30 июля 2014

TheGrayWolf
> А под AMD карты она бачит?
Нет, судя по тому, что на странице скачивания требуют конкретную версию драйвера NVidia.

#5
14:49, 30 июля 2014

innuendo
> Какая, конкретно, ситуация ?
Мне хотелось иметь над шейдером полный контроль, потому что баги будут вылазить постоянно, и каждый раз разные.
Не создавать же тему под каждый баг. Я рисовал сетку, и почти получилось.
Отладчика я, к сожалению, не нашел. NSight слишком тяжелый, ну да ладно пока.

#6
15:33, 30 июля 2014

TheOrca
> Мне хотелось иметь над шейдером полный контроль, потому что баги будут вылазить
> постоянно, и каждый раз разные.
Обычно выводят промежуточный результат в цвет и так отлаживают.

#7
16:21, 30 июля 2014

TheGrayWolf
под амд карты у амд есть свой деббагер. Название не помню - найдешь на дев портале амд.

TheOrca
> Мне хотелось иметь над шейдером полный контроль, потому что баги будут вылазить
> постоянно, и каждый раз разные.
There are only two debug techniques in the universe - printf and //...

#8
17:30, 30 июля 2014

gammaker
> Обычно выводят промежуточный результат в цвет и так отлаживают.

compute shaders так отлаживать очень тяжело. Надо смотреть что за циферка и на каком этапе. Да и вообще, чтобы нервы экономить.

#9
0:56, 31 июля 2014

gDEBugger

#10
11:06, 31 июля 2014

Bo
он не умеет отлаживать шейдеры

#11
11:14, 31 июля 2014

StiX
> он не умеет отлаживать шейдеры

В каких местах нужна отладка шейдеров ?

#12
11:59, 31 июля 2014

innuendo
> В каких местах нужна отладка шейдеров ?
В каких местах нужна отладка кода на C++?
Зачем в VisualStudio 2012 и выше есть эта фича для DirectX и почему ее нет в родном для OpenGL gDEBugger'e? Намеки на то, что за OpenGL никто не отвечает?

#13
12:10, 31 июля 2014

TheOrca
> > В каких местах нужна отладка шейдеров ?
> В каких местах нужна отладка кода на C++?

В местах где число строк кода очень-очень-очень много ... Ты можешь, конкретно, привести пример когда тебе был нужен отладчик шейдеров ?

> и почему ее нет в родном для OpenGL gDEBugger'e? Намеки на то, что за OpenGL
> никто не отвечает?

Почти так, плюшек как в DX нету - нету вложений от покупок новых  ОС :)

#14
13:53, 31 июля 2014

innuendo
> Ты можешь, конкретно, привести пример когда тебе был нужен отладчик шейдеров ?
Не много, конечно, но отладчик уже бы пригодился. Падает с кодом ошибки 7. Time-out limit. Похоже, где-то бесконечный цикл. Разберешься без отладчика, как говорил? Я, конечно, понимаю, что разберешься, и я сам разберусь. Но у меня на это уйдет еще несколько дней.

#version 430
layout(points) in;
layout(invocations = 1) in;
layout(line_strip, max_vertices = 64) out;
uniform vec4 viewportSize;//[0] pixel width [1] pixel height [2] scene units width [3] scene units height
out vec4 vertexColor;
vec4 majorColor = vec4(0,0,0,1.0f);

bool drawLines(int i, float stride, int direction)
{
    float tx0 = 0.0f;
    float tx1 = 0.0f;
    float ty0 = 0.0f;
    float ty1 = 0.0f;
    float tcoord = (i * stride) * direction;
    if (tcoord > 1.0f)
    {
      return false;
    }
    tx0 = -1;
    tx1 = 1;
    ty0 = tcoord;
    ty1 = tcoord;
    vertexColor = majorColor;

    gl_Position = vec4(tx0,ty0,0,1);
    EmitVertex();
    gl_Position = vec4(tx1,ty1,0,1);
    EmitVertex();
    EndPrimitive();
    return true;
}

void main() {
  int i = 0;
  bool exit = false;
  while(!exit)
  {
    exit = drawLines(i,0.1f,1);
    i++;
  }
}

Updated.

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

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