Простейший пример pixel shader на HLSL

Тема в разделе "WASM.DirectX", создана пользователем _DEN_, 10 мар 2010.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Покажите пожалуйста, как выглядит простейший пример pixel shader на HLSL. У меня есть минимальное приложение, которое создает D3D9 контекст и рендерит треугольник. Мне нужно на этот треугольник натянуть HLSL пиксельный шейдер. Вертексный не нужен. Интересует: создание и загрузка из файла на стороне C++, получение текста ошибки компиляции, вид простейшего пиксельного шейдера, возвращающего черный цвет.

    Гуглил, смотрел SDK, но, как ни странно - ничего не нашел. Везде только монстрообразные примеры где юзаются много-pass-ные эффекты в которых оба типа шейдера, и все поверх MFC/ATL/прочий гуан фреймворков. Ковыряться в 10000 строчках ради того чтобы найти 10 нужных - не хочется. Поможите кто чем смогёт.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Как-то так. В SDK всё есть, смотри внимательней.
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Все это конечно великолепно, но главный гемор - это как загрузить и зааплаить это со стороны C++. В SDK-то все есть, только у меня нет недели для процеживания over9000 сорцов в поиках 5-ти нужных вызовов.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Cказанул тоже, неделя. Прочить раз и написать. Если с DirectX проблемы, то я вряд ли смогу тут в чём-то помочь.

    З.Ы Что такое зааплаить?
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Сам-то пробовал? :)))

    Потому что лень, или потому что сам не знаешь D3D?

    To apply :)
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ещё одному надо что-то доказывать, хренею с народа. Читай SDK.
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Спасибо, К.О.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Всегда пожалуйста.
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Вот ответ на мой вопрос.

    Код (Text):
    1. IDirect3DPixelShader9* shader = 0;
    2. LPD3DXBUFFER code = 0;
    3. LPD3DXBUFFER error = 0;
    4. D3DXCompileShaderFromFileA("shader.ps", 0, 0, "main", "ps_3_0", 0, &code, &error, 0); // Загрузка и компиляция (имя, функция, профайл)
    5. if(error)
    6. {
    7.     MessageBoxA(0, reinterpret_cast<char const*>(error->GetBufferPointer()), 0, 0); // Сообщение об ощибке, если таковая была
    8.     return 0;
    9. }
    10. d3d_device->CreatePixelShader(reinterpret_cast<DWORD*>(code->GetBufferPointer()), &shader); // Создание, собственно, шейдера
    11. code->Release();
    Далее, HLSL (файл shader.ps):

    Код (Text):
    1. float4 main() : COLOR
    2. {
    3.     return float4(0, 0, 0, 0);
    4. }
    Booster, спасибо за увлекательный разговор на отвлеченные темы.
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Не спрашивай о том, о чём информации море и не будет отвлечённых тем.