mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
demos/teapot: Add a flat shading toggle.
This commit is contained in:
Notes:
Henri Verbeet
2025-07-21 12:35:29 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1625
@@ -177,6 +177,7 @@ static demo_key demo_key_from_nsevent(id event)
|
||||
enum vkey
|
||||
{
|
||||
kVK_ANSI_A = 0x00,
|
||||
kVK_ANSI_F = 0x03,
|
||||
kVK_ANSI_W = 0x0d,
|
||||
kVK_ANSI_Equal = 0x18,
|
||||
kVK_ANSI_Minus = 0x1b,
|
||||
@@ -199,6 +200,7 @@ static demo_key demo_key_from_nsevent(id event)
|
||||
lookup[] =
|
||||
{
|
||||
{kVK_ANSI_A, 'a'},
|
||||
{kVK_ANSI_F, 'f'},
|
||||
{kVK_ANSI_W, 'w'},
|
||||
{kVK_ANSI_Equal, '='},
|
||||
{kVK_ANSI_Minus, '-'},
|
||||
|
@@ -39,7 +39,7 @@ struct teapot_cb_data
|
||||
{
|
||||
struct demo_matrix mvp_matrix;
|
||||
float level;
|
||||
unsigned int wireframe;
|
||||
unsigned int wireframe, flat;
|
||||
};
|
||||
|
||||
struct demo_text_run
|
||||
@@ -91,7 +91,7 @@ struct teapot
|
||||
unsigned int text_scale;
|
||||
float theta, phi;
|
||||
|
||||
bool display_help, wireframe;
|
||||
bool display_help, flat, wireframe;
|
||||
struct timeval last_text;
|
||||
struct timeval frame_times[16];
|
||||
size_t frame_count;
|
||||
@@ -546,9 +546,10 @@ static void teapot_update_text(struct teapot *teapot, double fps)
|
||||
demo_text_draw(text, &amber, 0, -2 * h, "%.2f fps", fps);
|
||||
if (teapot->display_help)
|
||||
{
|
||||
demo_text_draw(text, &amber, 0, 3 * h, "ESC: Exit");
|
||||
demo_text_draw(text, &amber, 0, 2 * h, " F1: Toggle help");
|
||||
demo_text_draw(text, &amber, 0, 1 * h, "-/+: Tessellation level (%u)", teapot->tessellation_level);
|
||||
demo_text_draw(text, &amber, 0, 4 * h, "ESC: Exit");
|
||||
demo_text_draw(text, &amber, 0, 3 * h, " F1: Toggle help");
|
||||
demo_text_draw(text, &amber, 0, 2 * h, "-/+: Tessellation level (%u)", teapot->tessellation_level);
|
||||
demo_text_draw(text, &amber, 0, 1 * h, " F: Toggle flat shading (%s)", teapot->flat ? "on" : "off");
|
||||
demo_text_draw(text, &amber, 0, 0 * h, " W: Toggle wireframe (%s)", teapot->wireframe ? "on" : "off");
|
||||
}
|
||||
|
||||
@@ -751,8 +752,7 @@ static void teapot_load_assets(struct teapot *teapot)
|
||||
root_signature_desc.NumParameters = 1;
|
||||
root_signature_desc.pParameters = root_parameters;
|
||||
root_signature_desc.Flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT
|
||||
| D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS
|
||||
| D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS;
|
||||
| D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS;
|
||||
hr = demo_create_root_signature(teapot->device, &root_signature_desc, &teapot->root_signature);
|
||||
assert(SUCCEEDED(hr));
|
||||
|
||||
@@ -857,6 +857,7 @@ static void teapot_load_assets(struct teapot *teapot)
|
||||
teapot_update_mvp(teapot);
|
||||
teapot->cb_data->level = teapot->tessellation_level;
|
||||
teapot->cb_data->wireframe = teapot->wireframe;
|
||||
teapot->cb_data->flat = teapot->flat;
|
||||
|
||||
demo_text_init(&teapot->text, teapot->device, teapot->width, teapot->height, teapot->text_scale);
|
||||
teapot_load_mesh(teapot);
|
||||
@@ -881,6 +882,9 @@ static void teapot_key_press(struct demo_window *window, demo_key key, void *use
|
||||
if (teapot->tessellation_level < D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR)
|
||||
teapot->cb_data->level = ++teapot->tessellation_level;
|
||||
break;
|
||||
case 'f':
|
||||
teapot->cb_data->flat = teapot->flat = !teapot->flat;
|
||||
break;
|
||||
case 'w':
|
||||
teapot->cb_data->wireframe = teapot->wireframe = !teapot->wireframe;
|
||||
break;
|
||||
|
@@ -22,7 +22,7 @@ cbuffer teapot_cb : register(b0)
|
||||
{
|
||||
float4x4 mvp_matrix;
|
||||
float level;
|
||||
uint wireframe;
|
||||
uint wireframe, flat;
|
||||
};
|
||||
|
||||
struct control_point
|
||||
@@ -166,6 +166,14 @@ void gs_main(triangle struct gs_in i[3], inout TriangleStream<struct ps_in> stre
|
||||
v[2].normal = i[2].normal;
|
||||
v[2].barycentric = float2(0.0, 0.0);
|
||||
|
||||
if (flat)
|
||||
{
|
||||
n = normalize(cross(i[1].pos - i[0].pos, i[2].pos - i[0].pos));
|
||||
v[0].normal = n;
|
||||
v[1].normal = n;
|
||||
v[2].normal = n;
|
||||
}
|
||||
|
||||
stream.Append(v[0]);
|
||||
stream.Append(v[1]);
|
||||
stream.Append(v[2]);
|
||||
|
Reference in New Issue
Block a user