2025-04-23 12:00:43 +00:00
|
|
|
|
|
|
|
using Godot;
|
|
|
|
|
|
|
|
namespace Rokojori
|
|
|
|
{
|
|
|
|
public class RDShader: RenderingObject
|
|
|
|
{
|
2025-04-26 20:04:11 +00:00
|
|
|
public RDShader( RDContext context, Rid rid ):base( context, rid )
|
2025-04-23 12:00:43 +00:00
|
|
|
{}
|
|
|
|
|
2025-04-29 19:46:45 +00:00
|
|
|
public static RDShader CreateFromSpirV( RDContext context, RDShaderSpirV rDShaderSpirV, string pathInfo = null )
|
2025-04-23 12:00:43 +00:00
|
|
|
{
|
2025-04-26 20:04:11 +00:00
|
|
|
var shaderID = context.renderingDevice.ShaderCreateFromSpirV( rDShaderSpirV );
|
2025-04-29 19:46:45 +00:00
|
|
|
|
|
|
|
if ( ! shaderID.IsValid )
|
|
|
|
{
|
|
|
|
context.Error( "Couldn't create shader from spirV. PathInfo:", pathInfo );
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2025-04-26 20:04:11 +00:00
|
|
|
return new RDShader( context, shaderID );
|
2025-04-23 12:00:43 +00:00
|
|
|
}
|
2025-04-29 19:46:45 +00:00
|
|
|
|
|
|
|
public static RDShader FromPath( RDContext context, string path )
|
|
|
|
{
|
|
|
|
var glslFile = GD.Load<RDShaderFile>( path );
|
|
|
|
|
|
|
|
if ( glslFile == null )
|
|
|
|
{
|
|
|
|
context.Error( "File not found:", path );
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
var spirV = glslFile.GetSpirV();
|
|
|
|
|
|
|
|
if ( spirV == null )
|
|
|
|
{
|
|
|
|
context.Error( "SpirV is null", path );
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
return CreateFromSpirV( context, spirV, path );
|
|
|
|
}
|
2025-04-23 12:00:43 +00:00
|
|
|
}
|
|
|
|
}
|