[SOLVED] Shader Class, HowTo.


photo

Recommended Posts

Добрый день.

Не подскажите на коротком примере, как пользоваться Shader Class.

Загрузить какой нибудь шейдер из двух строчек, задать параметр, выполнить и удалить.

С Уважением Константин.

Edited by Vasara
Link to post

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, который точно понадобится:

image.png

  • Thanks 1

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to post
On 4/13/2021 at 9:50 AM, silent said:

Если очень не хочется пользоваться материалами

Да с материалами удобно работать для вывода на картинку. Мне нравится как вы это реализовали. Для некоторых вычислений, которые к визуализации вообще никаким боком, не хочется плодить лишние сущности.

On 4/13/2021 at 9:50 AM, silent said:

На UUSL тоже можно попробовать написать шейдеры, но надо знать какие дефайны определять

А есть открытая документация на эту тему? Если нет, ничего страшного, разберусь с HLSL.

Link to post

Документации нет (и когда появится непонятно). Мы даже для простых вычислений стараемся использовать материалы, поэтому про Shader class как-то все подзабыли :)

How to submit a good bug report
---
FTP server for test scenes and user uploads:

Link to post
  • Vasara changed the title to [SOLVED] Shader Class, HowTo.