Vasara Posted April 11, 2021 Share Posted April 11, 2021 (edited) Добрый день. Не подскажите на коротком примере, как пользоваться Shader Class. Загрузить какой нибудь шейдер из двух строчек, задать параметр, выполнить и удалить. С Уважением Константин. Edited April 18, 2021 by Vasara Link to comment
silent Posted April 13, 2021 Share Posted April 13, 2021 Vasara Если очень не хочется пользоваться материалами, то можно поступить примерно так (код на голом HLSL будет такой): ShaderPtr shader; int AppWorldLogic::init() { const auto vertex_shader = R"foo( float4 main(float2 pos : POSITION) : SV_POSITION { return float4(pos, 0.0f, 1.0f); } )foo"; const auto fragment_shader = R"foo( cbuffer vars : register(b0) { float4 color; }; float4 main(float4 fragCoord : SV_POSITION) : SV_TARGET { return color; } )foo"; shader = Shader::create(); shader->loadVertex(vertex_shader, ""); shader->loadFragment(fragment_shader, ""); shader->compile(); Render::addCallback(Render::CALLBACK_END_SCREEN, MakeCallback([&]() { const auto rt = Renderer::getPostRenderTarget(); rt->unbindAll(); rt->bindColorTexture(0, Renderer::getTextureColor()); rt->enable(); shader->bind(); shader->setParameterFloat4("color", Math::vec4(1.0f, 0.0f, 1.0f, 1.0f)); shader->flushParameters(); Ffp::renderScreen(); shader->unbind(); rt->disable(); })); // Write here code to be called on world initialization: initialize resources for your world scene during the world start. return 1; } На UUSL тоже можно попробовать написать шейдеры, но надо знать какие дефайны определять (обычно это разруливает система материалов). Если писать без материалов нужно разбираться какие дефайны передавать в loadVertex()/loadFragment() методы. Вот на скрине, например MATERIAL_VARS_INIT, который точно понадобится: 1 How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN Link to comment
Vasara Posted April 14, 2021 Author Share Posted April 14, 2021 On 4/13/2021 at 9:50 AM, silent said: Если очень не хочется пользоваться материалами Да с материалами удобно работать для вывода на картинку. Мне нравится как вы это реализовали. Для некоторых вычислений, которые к визуализации вообще никаким боком, не хочется плодить лишние сущности. On 4/13/2021 at 9:50 AM, silent said: На UUSL тоже можно попробовать написать шейдеры, но надо знать какие дефайны определять А есть открытая документация на эту тему? Если нет, ничего страшного, разберусь с HLSL. Link to comment
silent Posted April 15, 2021 Share Posted April 15, 2021 Документации нет (и когда появится непонятно). Мы даже для простых вычислений стараемся использовать материалы, поэтому про Shader class как-то все подзабыли :) How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN Link to comment
Recommended Posts