Skip to content

Commit 553da61

Browse files
[Rendering] WIP on textures;
1 parent 764b35d commit 553da61

27 files changed

+1204
-665
lines changed
4.81 MB
Binary file not shown.
9.02 MB
Binary file not shown.

Engine/Staple.Core/MessagePackGenerated/MessagePackGenerated.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4372,9 +4372,11 @@ public void Serialize(ref global::MessagePack.MessagePackWriter writer, global::
43724372
}
43734373

43744374
global::MessagePack.IFormatterResolver formatterResolver = options.Resolver;
4375-
writer.WriteArrayHeader(3);
4375+
writer.WriteArrayHeader(5);
43764376
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.TextureMetadata>().Serialize(ref writer, value.metadata, options);
43774377
writer.Write(value.data);
4378+
writer.Write(value.width);
4379+
writer.Write(value.height);
43784380
formatterResolver.GetFormatterWithVerify<global::Staple.Internal.SerializableTextureCPUData>().Serialize(ref writer, value.cpuData, options);
43794381
}
43804382

@@ -4401,6 +4403,12 @@ public void Serialize(ref global::MessagePack.MessagePackWriter writer, global::
44014403
____result.data = reader.ReadBytes()?.ToArray();
44024404
break;
44034405
case 2:
4406+
____result.width = reader.ReadInt32();
4407+
break;
4408+
case 3:
4409+
____result.height = reader.ReadInt32();
4410+
break;
4411+
case 4:
44044412
____result.cpuData = formatterResolver.GetFormatterWithVerify<global::Staple.Internal.SerializableTextureCPUData>().Deserialize(ref reader, options);
44054413
break;
44064414
default:

Engine/Staple.Core/Rendering/Material.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,14 +1050,8 @@ internal void ApplyProperties(ApplyMode applyMode)
10501050
return;
10511051
}
10521052

1053-
var overrideFlags = (TextureFlags)uint.MaxValue;
1054-
10551053
var texture = parameter.textureValue;
10561054

1057-
overrideFlags = 0;
1058-
1059-
Texture.ProcessFlags(ref overrideFlags, texture.metadata, true);
1060-
10611055
if (parameter.relatedParameters.Length == 0)
10621056
{
10631057
parameter.relatedParameters =
@@ -1097,7 +1091,7 @@ internal void ApplyProperties(ApplyMode applyMode)
10971091
EnableShaderKeyword(parameter.shaderHandle.Variant);
10981092
}
10991093

1100-
shader.SetTexture(parameter.shaderHandle, texture, overrideFlags);
1094+
shader.SetTexture(parameter.shaderHandle, texture);
11011095
};
11021096

11031097
break;

Engine/Staple.Core/Rendering/RenderSystem/Backend/IRendererBackend.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,11 @@ IShaderProgram CreateShaderVertexFragment(byte[] vertex, byte[] fragment,
3636

3737
IShaderProgram CreateShaderCompute(byte[] compute, ComputeShaderMetrics computeMetrics);
3838

39+
ITexture CreateTextureAssetTexture(SerializableTexture asset, TextureFlags flags);
40+
41+
ITexture CreatePixelTexture(byte[] data, int width, int height, TextureFormat format, TextureFlags flags);
42+
43+
ITexture CreateEmptyTexture(int width, int height, TextureFormat format, TextureFlags flags);
44+
3945
void Render(IRenderPass pass, RenderState state);
4046
}

Engine/Staple.Core/Rendering/RenderSystem/Backend/Impls/SDLGPU/SDLGPURendererBackend.cs

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,4 +520,99 @@ state.vertexBuffer is not SDLGPUVertexBuffer vertex ||
520520
SDL.SDL_DrawGPUIndexedPrimitives(renderPass.renderPass, (uint)state.indexCount, 1,
521521
(uint)state.startIndex, state.startVertex, 0);
522522
}
523+
524+
public ITexture CreateTextureAssetTexture(SerializableTexture asset, TextureFlags flags)
525+
{
526+
var format = asset.metadata.Format;
527+
528+
if (SDLGPUTexture.TryGetTextureFormat(format, flags, out var textureFormat) == false)
529+
{
530+
return null;
531+
}
532+
533+
var info = new SDL.SDL_GPUTextureCreateInfo()
534+
{
535+
format = textureFormat,
536+
width = (uint)asset.width,
537+
height = (uint)asset.height,
538+
type = SDLGPUTexture.GetTextureType(flags),
539+
usage = SDLGPUTexture.GetTextureUsage(flags),
540+
layer_count_or_depth = 1,
541+
num_levels = 1,
542+
};
543+
544+
var texture = SDL.SDL_CreateGPUTexture(device, in info);
545+
546+
if (texture == nint.Zero)
547+
{
548+
return null;
549+
}
550+
551+
var outValue = new SDLGPUTexture(device, texture, asset.width, asset.height, format, flags,
552+
() => (SDLGPURenderCommand)BeginCommand());
553+
554+
outValue.Update(asset.data);
555+
556+
return outValue;
557+
}
558+
559+
public ITexture CreatePixelTexture(byte[] data, int width, int height, TextureFormat format, TextureFlags flags)
560+
{
561+
if (SDLGPUTexture.TryGetTextureFormat(format, flags, out var textureFormat) == false)
562+
{
563+
return null;
564+
}
565+
566+
var info = new SDL.SDL_GPUTextureCreateInfo()
567+
{
568+
format = textureFormat,
569+
width = (uint)width,
570+
height = (uint)height,
571+
type = SDLGPUTexture.GetTextureType(flags),
572+
usage = SDLGPUTexture.GetTextureUsage(flags),
573+
layer_count_or_depth = 1,
574+
num_levels = 1, //TODO: Support multiple levels
575+
};
576+
577+
var texture = SDL.SDL_CreateGPUTexture(device, in info);
578+
579+
if (texture == nint.Zero)
580+
{
581+
return null;
582+
}
583+
584+
var outValue = new SDLGPUTexture(device, texture, width, height, format, flags, () => (SDLGPURenderCommand)BeginCommand());
585+
586+
outValue.Update(data);
587+
588+
return outValue;
589+
}
590+
591+
public ITexture CreateEmptyTexture(int width, int height, TextureFormat format, TextureFlags flags)
592+
{
593+
if(SDLGPUTexture.TryGetTextureFormat(format, flags, out var textureFormat) == false)
594+
{
595+
return null;
596+
}
597+
598+
var info = new SDL.SDL_GPUTextureCreateInfo()
599+
{
600+
format = textureFormat,
601+
width = (uint)width,
602+
height = (uint)height,
603+
type = SDLGPUTexture.GetTextureType(flags),
604+
usage = SDLGPUTexture.GetTextureUsage(flags),
605+
layer_count_or_depth = 1,
606+
num_levels = 1,
607+
};
608+
609+
var texture = SDL.SDL_CreateGPUTexture(device, in info);
610+
611+
if(texture == nint.Zero)
612+
{
613+
return null;
614+
}
615+
616+
return new SDLGPUTexture(device, texture, width, height, format, flags, () => (SDLGPURenderCommand)BeginCommand());
617+
}
523618
}

0 commit comments

Comments
 (0)