fix ps1 shader
This commit is contained in:
@@ -651,6 +651,8 @@ function gpupresent()
|
||||
filter:"nearest",
|
||||
load: "clear"
|
||||
});
|
||||
|
||||
imgui.prepend(cmds);
|
||||
|
||||
// now imgui
|
||||
var pass = cmds.render_pass({
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,28 @@
|
||||
#include <metal_stdlib>
|
||||
#include <simd/simd.h>
|
||||
|
||||
using namespace metal;
|
||||
|
||||
struct type_Globals
|
||||
{
|
||||
float4 ditherPattern2x2[4];
|
||||
};
|
||||
|
||||
struct main0_out
|
||||
{
|
||||
float4 out_var_SV_TARGET [[color(0)]];
|
||||
};
|
||||
|
||||
struct main0_in
|
||||
{
|
||||
float2 in_var_TEXCOORD0 [[user(locn0)]];
|
||||
};
|
||||
|
||||
fragment main0_out main0(main0_in in [[stage_in]], constant type_Globals& _Globals [[buffer(0)]], texture2d<float> diffuseTexture [[texture(0)]], sampler smp [[sampler(0)]], float4 gl_FragCoord [[position]])
|
||||
{
|
||||
main0_out out = {};
|
||||
float4 _61 = fast::clamp(diffuseTexture.sample(smp, in.in_var_TEXCOORD0) + float4(0.03125 * _Globals.ditherPattern2x2[((int(gl_FragCoord.y) & 1) * 2) + (int(gl_FragCoord.x) & 1)].x), float4(0.0), float4(1.0));
|
||||
out.out_var_SV_TARGET = float4(rint(_61.xyz * 31.0) * float3(0.0322580635547637939453125), rint(_61.w * 31.0) * 0.0322580635547637939453125);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
#include <metal_stdlib>
|
||||
#include <simd/simd.h>
|
||||
|
||||
using namespace metal;
|
||||
|
||||
struct type_TransformBuffer
|
||||
{
|
||||
float4x4 world_to_projection;
|
||||
float4x4 projection_to_world;
|
||||
float4x4 world_to_view;
|
||||
float4x4 view_to_projection;
|
||||
packed_float3 camera_pos_world;
|
||||
float viewport_min_z;
|
||||
packed_float3 camera_dir_world;
|
||||
float viewport_max_z;
|
||||
float2 viewport_size;
|
||||
float2 viewport_offset;
|
||||
float2 render_size;
|
||||
float time;
|
||||
};
|
||||
|
||||
struct type_model
|
||||
{
|
||||
float4x4 model;
|
||||
float4 color;
|
||||
};
|
||||
|
||||
struct main0_out
|
||||
{
|
||||
float2 out_var_TEXCOORD0 [[user(locn0)]];
|
||||
float4 out_var_COLOR0 [[user(locn1)]];
|
||||
float4 gl_Position [[position]];
|
||||
};
|
||||
|
||||
struct main0_in
|
||||
{
|
||||
float2 in_var_pos [[attribute(0)]];
|
||||
float2 in_var_uv [[attribute(1)]];
|
||||
float4 in_var_color [[attribute(2)]];
|
||||
};
|
||||
|
||||
vertex main0_out main0(main0_in in [[stage_in]], constant type_TransformBuffer& TransformBuffer [[buffer(0)]], constant type_model& model [[buffer(1)]])
|
||||
{
|
||||
main0_out out = {};
|
||||
out.gl_Position = TransformBuffer.world_to_projection * (model.model * float4(in.in_var_pos, 0.0, 1.0));
|
||||
out.out_var_TEXCOORD0 = in.in_var_uv;
|
||||
out.out_var_COLOR0 = in.in_var_color * model.color;
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
SamplerState pointSampler
|
||||
{
|
||||
Filter = MIN_MAG_MIP_POINT; // Nearest-neighbor
|
||||
AddressU = Wrap;
|
||||
AddressV = Wrap;
|
||||
};
|
||||
|
||||
Texture2D diffuseTexture : register(t0);
|
||||
Texture2D diffuseTexture : register(t0,space2);
|
||||
SamplerState smp : register(s0,space2);
|
||||
|
||||
struct PSInput
|
||||
{
|
||||
@@ -18,10 +12,10 @@ float ditherPattern2x2[4] = {
|
||||
0.75, 0.25
|
||||
};
|
||||
|
||||
float4 mainPS(PSInput input) : SV_TARGET
|
||||
float4 main(PSInput input) : SV_TARGET
|
||||
{
|
||||
// Sample texture with nearest-neighbor
|
||||
float4 color = diffuseTexture.Sample(pointSampler, input.texcoord);
|
||||
float4 color = diffuseTexture.Sample(smp, input.texcoord);
|
||||
|
||||
// Optional: Affine distortion effect
|
||||
// If you want to simulate affine warping, you could do some screen-space
|
||||
@@ -40,6 +34,7 @@ float4 mainPS(PSInput input) : SV_TARGET
|
||||
// To simulate PS1 color quantization (e.g. to 5 bits for R,G,B):
|
||||
// We'll quantize each channel.
|
||||
// Suppose colorBitDepth.x = 5 means 5 bits for R/G/B, that’s 32 steps.
|
||||
float3 colorBitDepth = float3(5,5,5);
|
||||
float stepsRGB = pow(2.0, colorBitDepth.x);
|
||||
float stepsA = pow(2.0, colorBitDepth.y);
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#include "common/vertex.hlsl"
|
||||
|
||||
struct VSInput
|
||||
{
|
||||
float3 position : POSITION;
|
||||
@@ -10,6 +12,11 @@ struct VSOutput
|
||||
float2 texcoord : TEXCOORD0;
|
||||
};
|
||||
|
||||
output vertex(output i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
/*
|
||||
VSOutput mainVS(VSInput input)
|
||||
{
|
||||
VSOutput output;
|
||||
@@ -39,3 +46,4 @@ VSOutput mainVS(VSInput input)
|
||||
|
||||
return output;
|
||||
}
|
||||
*/
|
||||
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"entryPoints" : [
|
||||
{
|
||||
"name" : "main",
|
||||
"mode" : "frag"
|
||||
}
|
||||
],
|
||||
"types" : {
|
||||
"_10" : {
|
||||
"name" : "type.$Globals",
|
||||
"members" : [
|
||||
{
|
||||
"name" : "ditherPattern2x2",
|
||||
"type" : "float",
|
||||
"array" : [
|
||||
4
|
||||
],
|
||||
"array_size_is_literal" : [
|
||||
true
|
||||
],
|
||||
"offset" : 0,
|
||||
"array_stride" : 16
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"inputs" : [
|
||||
{
|
||||
"type" : "vec2",
|
||||
"name" : "in.var.TEXCOORD0",
|
||||
"location" : 0
|
||||
}
|
||||
],
|
||||
"outputs" : [
|
||||
{
|
||||
"type" : "vec4",
|
||||
"name" : "out.var.SV_TARGET",
|
||||
"location" : 0
|
||||
}
|
||||
],
|
||||
"separate_images" : [
|
||||
{
|
||||
"type" : "texture2D",
|
||||
"name" : "diffuseTexture",
|
||||
"set" : 2,
|
||||
"binding" : 0
|
||||
}
|
||||
],
|
||||
"separate_samplers" : [
|
||||
{
|
||||
"type" : "sampler",
|
||||
"name" : "smp",
|
||||
"set" : 2,
|
||||
"binding" : 0
|
||||
}
|
||||
],
|
||||
"ubos" : [
|
||||
{
|
||||
"type" : "_10",
|
||||
"name" : "type.$Globals",
|
||||
"block_size" : 64,
|
||||
"set" : 0,
|
||||
"binding" : 0
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"entryPoints" : [
|
||||
{
|
||||
"name" : "main",
|
||||
"mode" : "vert"
|
||||
}
|
||||
],
|
||||
"types" : {
|
||||
"_8" : {
|
||||
"name" : "type.TransformBuffer",
|
||||
"members" : [
|
||||
{
|
||||
"name" : "world_to_projection",
|
||||
"type" : "mat4",
|
||||
"offset" : 0,
|
||||
"matrix_stride" : 16,
|
||||
"row_major" : true
|
||||
},
|
||||
{
|
||||
"name" : "projection_to_world",
|
||||
"type" : "mat4",
|
||||
"offset" : 64,
|
||||
"matrix_stride" : 16,
|
||||
"row_major" : true
|
||||
},
|
||||
{
|
||||
"name" : "world_to_view",
|
||||
"type" : "mat4",
|
||||
"offset" : 128,
|
||||
"matrix_stride" : 16,
|
||||
"row_major" : true
|
||||
},
|
||||
{
|
||||
"name" : "view_to_projection",
|
||||
"type" : "mat4",
|
||||
"offset" : 192,
|
||||
"matrix_stride" : 16,
|
||||
"row_major" : true
|
||||
},
|
||||
{
|
||||
"name" : "camera_pos_world",
|
||||
"type" : "vec3",
|
||||
"offset" : 256
|
||||
},
|
||||
{
|
||||
"name" : "viewport_min_z",
|
||||
"type" : "float",
|
||||
"offset" : 268
|
||||
},
|
||||
{
|
||||
"name" : "camera_dir_world",
|
||||
"type" : "vec3",
|
||||
"offset" : 272
|
||||
},
|
||||
{
|
||||
"name" : "viewport_max_z",
|
||||
"type" : "float",
|
||||
"offset" : 284
|
||||
},
|
||||
{
|
||||
"name" : "viewport_size",
|
||||
"type" : "vec2",
|
||||
"offset" : 288
|
||||
},
|
||||
{
|
||||
"name" : "viewport_offset",
|
||||
"type" : "vec2",
|
||||
"offset" : 296
|
||||
},
|
||||
{
|
||||
"name" : "render_size",
|
||||
"type" : "vec2",
|
||||
"offset" : 304
|
||||
},
|
||||
{
|
||||
"name" : "time",
|
||||
"type" : "float",
|
||||
"offset" : 312
|
||||
}
|
||||
]
|
||||
},
|
||||
"_10" : {
|
||||
"name" : "type.model",
|
||||
"members" : [
|
||||
{
|
||||
"name" : "model",
|
||||
"type" : "mat4",
|
||||
"offset" : 0,
|
||||
"matrix_stride" : 16,
|
||||
"row_major" : true
|
||||
},
|
||||
{
|
||||
"name" : "color",
|
||||
"type" : "vec4",
|
||||
"offset" : 64
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"inputs" : [
|
||||
{
|
||||
"type" : "vec2",
|
||||
"name" : "in.var.pos",
|
||||
"location" : 0
|
||||
},
|
||||
{
|
||||
"type" : "vec2",
|
||||
"name" : "in.var.uv",
|
||||
"location" : 1
|
||||
},
|
||||
{
|
||||
"type" : "vec4",
|
||||
"name" : "in.var.color",
|
||||
"location" : 2
|
||||
}
|
||||
],
|
||||
"outputs" : [
|
||||
{
|
||||
"type" : "vec2",
|
||||
"name" : "out.var.TEXCOORD0",
|
||||
"location" : 0
|
||||
},
|
||||
{
|
||||
"type" : "vec4",
|
||||
"name" : "out.var.COLOR0",
|
||||
"location" : 1
|
||||
}
|
||||
],
|
||||
"ubos" : [
|
||||
{
|
||||
"type" : "_8",
|
||||
"name" : "type.TransformBuffer",
|
||||
"block_size" : 316,
|
||||
"set" : 1,
|
||||
"binding" : 0
|
||||
},
|
||||
{
|
||||
"type" : "_10",
|
||||
"name" : "type.model",
|
||||
"block_size" : 80,
|
||||
"set" : 1,
|
||||
"binding" : 1
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -5,4 +5,3 @@ output vertex(output i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -770,15 +770,16 @@ JSC_CCALL(imgui_newframe,
|
||||
ImGui::NewFrame();
|
||||
)
|
||||
|
||||
JSC_CCALL(imgui_endframe,
|
||||
JSC_CCALL(imgui_prepend,
|
||||
ImGui::Render();
|
||||
ImDrawData *draw_data = ImGui::GetDrawData();
|
||||
|
||||
SDL_GPUCommandBuffer *cmd = js2SDL_GPUCommandBuffer(js,argv[0]);
|
||||
Imgui_ImplSDLGPU3_PrepareDrawData(draw_data,cmd);
|
||||
SDL_GPURenderPass *pass = js2SDL_GPURenderPass(js,argv[1]);
|
||||
SDL_GPUCommandBuffer *cmd = js2SDL_GPUCommandBuffer(js,argv[0]);
|
||||
Imgui_ImplSDLGPU3_PrepareDrawData(ImGui::GetDrawData(),cmd);
|
||||
)
|
||||
|
||||
ImGui_ImplSDLGPU3_RenderDrawData(draw_data, cmd, pass);
|
||||
JSC_CCALL(imgui_endframe,
|
||||
SDL_GPUCommandBuffer *cmd = js2SDL_GPUCommandBuffer(js,argv[0]);
|
||||
SDL_GPURenderPass *pass = js2SDL_GPURenderPass(js,argv[1]);
|
||||
ImGui_ImplSDLGPU3_RenderDrawData(ImGui::GetDrawData(), cmd, pass);
|
||||
ImGui::UpdatePlatformWindows();
|
||||
ImGui::RenderPlatformWindowsDefault();
|
||||
)
|
||||
@@ -862,6 +863,7 @@ static const JSCFunctionListEntry js_imgui_funcs[] = {
|
||||
MIST_FUNC_DEF(imgui, plotmousepos, 0),
|
||||
MIST_FUNC_DEF(imgui, plothovered, 0),
|
||||
MIST_FUNC_DEF(imgui, axeslimits, 4),
|
||||
MIST_FUNC_DEF(imgui, prepend, 1),
|
||||
MIST_FUNC_DEF(imgui, fitaxis, 1),
|
||||
MIST_FUNC_DEF(imgui, columns, 1),
|
||||
MIST_FUNC_DEF(imgui, nextcolumn, 0),
|
||||
|
||||
Reference in New Issue
Block a user