From 26e56261b507c9d1b6afeaea3fad66dd853c02cd Mon Sep 17 00:00:00 2001 From: luboslenco Date: Mon, 3 Mar 2025 20:22:58 +0100 Subject: [PATCH] Cleanup --- base/sources/backends/direct3d12_gpu.c | 87 ----------- base/sources/backends/metal_gpu.m | 96 ------------ base/sources/backends/vulkan_gpu.c | 90 ----------- base/sources/backends/webgpu_gpu.c | 103 ------------- base/sources/iron.h | 201 +++++-------------------- base/sources/iron_draw.c | 5 +- base/sources/iron_draw.h | 3 + base/sources/iron_gpu.h | 85 +---------- base/sources/ts/console.ts | 5 +- base/sources/ts/import_arm.ts | 4 +- base/sources/ts/iron/g2.ts | 24 +-- base/sources/ts/iron/g4.ts | 108 ++++--------- base/sources/ts/iron/iron.ts | 9 +- base/sources/ts/iron/render_path.ts | 30 ++-- base/sources/ts/iron/shader_data.ts | 26 +--- base/sources/ts/iron/sys.ts | 8 +- base/sources/ts/line_draw.ts | 2 +- base/sources/ts/util_render.ts | 6 +- 18 files changed, 124 insertions(+), 768 deletions(-) diff --git a/base/sources/backends/direct3d12_gpu.c b/base/sources/backends/direct3d12_gpu.c index 379feaed..5dfa80c7 100644 --- a/base/sources/backends/direct3d12_gpu.c +++ b/base/sources/backends/direct3d12_gpu.c @@ -1539,102 +1539,15 @@ void kinc_g5_pipeline_compile(kinc_g5_pipeline_t *pipe) { case KINC_G5_VERTEX_DATA_F32_4X: vertexDesc[i].Format = DXGI_FORMAT_R32G32B32A32_FLOAT; break; - case KINC_G5_VERTEX_DATA_I8_1X: - vertexDesc[i].Format = DXGI_FORMAT_R8_SINT; - break; - case KINC_G5_VERTEX_DATA_U8_1X: - vertexDesc[i].Format = DXGI_FORMAT_R8_UINT; - break; - case KINC_G5_VERTEX_DATA_I8_1X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R8_SNORM; - break; - case KINC_G5_VERTEX_DATA_U8_1X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R8_UNORM; - break; - case KINC_G5_VERTEX_DATA_I8_2X: - vertexDesc[i].Format = DXGI_FORMAT_R8G8_SINT; - break; - case KINC_G5_VERTEX_DATA_U8_2X: - vertexDesc[i].Format = DXGI_FORMAT_R8G8_UINT; - break; - case KINC_G5_VERTEX_DATA_I8_2X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R8G8_SNORM; - break; - case KINC_G5_VERTEX_DATA_U8_2X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R8G8_UNORM; - break; - case KINC_G5_VERTEX_DATA_I8_4X: - vertexDesc[i].Format = DXGI_FORMAT_R8G8B8A8_SINT; - break; - case KINC_G5_VERTEX_DATA_U8_4X: - vertexDesc[i].Format = DXGI_FORMAT_R8G8B8A8_UINT; - break; - case KINC_G5_VERTEX_DATA_I8_4X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R8G8B8A8_SNORM; - break; case KINC_G5_VERTEX_DATA_U8_4X_NORMALIZED: vertexDesc[i].Format = DXGI_FORMAT_R8G8B8A8_UNORM; break; - case KINC_G5_VERTEX_DATA_I16_1X: - vertexDesc[i].Format = DXGI_FORMAT_R16_SINT; - break; - case KINC_G5_VERTEX_DATA_U16_1X: - vertexDesc[i].Format = DXGI_FORMAT_R16_UINT; - break; - case KINC_G5_VERTEX_DATA_I16_1X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R16_SNORM; - break; - case KINC_G5_VERTEX_DATA_U16_1X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R16_UNORM; - break; - case KINC_G5_VERTEX_DATA_I16_2X: - vertexDesc[i].Format = DXGI_FORMAT_R16G16_SINT; - break; - case KINC_G5_VERTEX_DATA_U16_2X: - vertexDesc[i].Format = DXGI_FORMAT_R16G16_UINT; - break; case KINC_G5_VERTEX_DATA_I16_2X_NORMALIZED: vertexDesc[i].Format = DXGI_FORMAT_R16G16_SNORM; break; - case KINC_G5_VERTEX_DATA_U16_2X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R16G16_UNORM; - break; - case KINC_G5_VERTEX_DATA_I16_4X: - vertexDesc[i].Format = DXGI_FORMAT_R16G16B16A16_SINT; - break; - case KINC_G5_VERTEX_DATA_U16_4X: - vertexDesc[i].Format = DXGI_FORMAT_R16G16B16A16_UINT; - break; case KINC_G5_VERTEX_DATA_I16_4X_NORMALIZED: vertexDesc[i].Format = DXGI_FORMAT_R16G16B16A16_SNORM; break; - case KINC_G5_VERTEX_DATA_U16_4X_NORMALIZED: - vertexDesc[i].Format = DXGI_FORMAT_R16G16B16A16_UNORM; - break; - case KINC_G5_VERTEX_DATA_I32_1X: - vertexDesc[i].Format = DXGI_FORMAT_R32_SINT; - break; - case KINC_G5_VERTEX_DATA_U32_1X: - vertexDesc[i].Format = DXGI_FORMAT_R32_UINT; - break; - case KINC_G5_VERTEX_DATA_I32_2X: - vertexDesc[i].Format = DXGI_FORMAT_R32G32_SINT; - break; - case KINC_G5_VERTEX_DATA_U32_2X: - vertexDesc[i].Format = DXGI_FORMAT_R32G32_UINT; - break; - case KINC_G5_VERTEX_DATA_I32_3X: - vertexDesc[i].Format = DXGI_FORMAT_R32G32B32_SINT; - break; - case KINC_G5_VERTEX_DATA_U32_3X: - vertexDesc[i].Format = DXGI_FORMAT_R32G32B32_UINT; - break; - case KINC_G5_VERTEX_DATA_I32_4X: - vertexDesc[i].Format = DXGI_FORMAT_R32G32B32A32_SINT; - break; - case KINC_G5_VERTEX_DATA_U32_4X: - vertexDesc[i].Format = DXGI_FORMAT_R32G32B32A32_UINT; - break; default: break; } diff --git a/base/sources/backends/metal_gpu.m b/base/sources/backends/metal_gpu.m index 7b37d49a..8d258fe2 100644 --- a/base/sources/backends/metal_gpu.m +++ b/base/sources/backends/metal_gpu.m @@ -896,9 +896,6 @@ void kinc_g5_pipeline_compile(kinc_g5_pipeline_t *pipeline) { offset += kinc_g5_vertex_data_size(pipeline->input_layout->elements[i].data); if (index >= 0) { switch (pipeline->input_layout->elements[i].data) { - case KINC_G5_VERTEX_DATA_NONE: - assert(false); - break; case KINC_G5_VERTEX_DATA_F32_1X: vertexDescriptor.attributes[index].format = MTLVertexFormatFloat; break; @@ -911,108 +908,15 @@ void kinc_g5_pipeline_compile(kinc_g5_pipeline_t *pipeline) { case KINC_G5_VERTEX_DATA_F32_4X: vertexDescriptor.attributes[index].format = MTLVertexFormatFloat4; break; - case KINC_G5_VERTEX_DATA_F32_4X4: - assert(false); - break; - case KINC_G5_VERTEX_DATA_I8_1X: - vertexDescriptor.attributes[index].format = MTLVertexFormatChar; - break; - case KINC_G5_VERTEX_DATA_U8_1X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUChar; - break; - case KINC_G5_VERTEX_DATA_I8_1X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatCharNormalized; - break; - case KINC_G5_VERTEX_DATA_U8_1X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatUCharNormalized; - break; - case KINC_G5_VERTEX_DATA_I8_2X: - vertexDescriptor.attributes[index].format = MTLVertexFormatChar2; - break; - case KINC_G5_VERTEX_DATA_U8_2X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUChar2; - break; - case KINC_G5_VERTEX_DATA_I8_2X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatChar2Normalized; - break; - case KINC_G5_VERTEX_DATA_U8_2X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatUChar2Normalized; - break; - case KINC_G5_VERTEX_DATA_I8_4X: - vertexDescriptor.attributes[index].format = MTLVertexFormatChar4; - break; - case KINC_G5_VERTEX_DATA_U8_4X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUChar4; - break; - case KINC_G5_VERTEX_DATA_I8_4X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatChar4Normalized; - break; case KINC_G5_VERTEX_DATA_U8_4X_NORMALIZED: vertexDescriptor.attributes[index].format = MTLVertexFormatUChar4Normalized; break; - case KINC_G5_VERTEX_DATA_I16_1X: - vertexDescriptor.attributes[index].format = MTLVertexFormatShort; - break; - case KINC_G5_VERTEX_DATA_U16_1X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUShort; - break; - case KINC_G5_VERTEX_DATA_I16_1X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatShortNormalized; - break; - case KINC_G5_VERTEX_DATA_U16_1X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatUShortNormalized; - break; - case KINC_G5_VERTEX_DATA_I16_2X: - vertexDescriptor.attributes[index].format = MTLVertexFormatShort2; - break; - case KINC_G5_VERTEX_DATA_U16_2X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUShort2; - break; case KINC_G5_VERTEX_DATA_I16_2X_NORMALIZED: vertexDescriptor.attributes[index].format = MTLVertexFormatShort2Normalized; break; - case KINC_G5_VERTEX_DATA_U16_2X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatUShort2Normalized; - break; - case KINC_G5_VERTEX_DATA_I16_4X: - vertexDescriptor.attributes[index].format = MTLVertexFormatShort4; - break; - case KINC_G5_VERTEX_DATA_U16_4X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUShort4; - break; case KINC_G5_VERTEX_DATA_I16_4X_NORMALIZED: vertexDescriptor.attributes[index].format = MTLVertexFormatShort4Normalized; break; - case KINC_G5_VERTEX_DATA_U16_4X_NORMALIZED: - vertexDescriptor.attributes[index].format = MTLVertexFormatUShort4Normalized; - break; - case KINC_G5_VERTEX_DATA_I32_1X: - vertexDescriptor.attributes[index].format = MTLVertexFormatInt; - break; - case KINC_G5_VERTEX_DATA_U32_1X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUInt; - break; - case KINC_G5_VERTEX_DATA_I32_2X: - vertexDescriptor.attributes[index].format = MTLVertexFormatInt2; - break; - case KINC_G5_VERTEX_DATA_U32_2X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUInt2; - break; - case KINC_G5_VERTEX_DATA_I32_3X: - vertexDescriptor.attributes[index].format = MTLVertexFormatInt3; - break; - case KINC_G5_VERTEX_DATA_U32_3X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUInt3; - break; - case KINC_G5_VERTEX_DATA_I32_4X: - vertexDescriptor.attributes[index].format = MTLVertexFormatInt4; - break; - case KINC_G5_VERTEX_DATA_U32_4X: - vertexDescriptor.attributes[index].format = MTLVertexFormatUInt4; - break; - default: - assert(false); - break; } } } diff --git a/base/sources/backends/vulkan_gpu.c b/base/sources/backends/vulkan_gpu.c index e1d076a5..4086a262 100644 --- a/base/sources/backends/vulkan_gpu.c +++ b/base/sources/backends/vulkan_gpu.c @@ -2709,105 +2709,15 @@ void kinc_g5_pipeline_compile(kinc_g5_pipeline_t *pipeline) { case KINC_G5_VERTEX_DATA_F32_4X: vi_attrs[attr].format = VK_FORMAT_R32G32B32A32_SFLOAT; break; - case KINC_G5_VERTEX_DATA_I8_1X: - vi_attrs[attr].format = VK_FORMAT_R8_SINT; - break; - case KINC_G5_VERTEX_DATA_U8_1X: - vi_attrs[attr].format = VK_FORMAT_R8_UINT; - break; - case KINC_G5_VERTEX_DATA_I8_1X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R8_SNORM; - break; - case KINC_G5_VERTEX_DATA_U8_1X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R8_UNORM; - break; - case KINC_G5_VERTEX_DATA_I8_2X: - vi_attrs[attr].format = VK_FORMAT_R8G8_SINT; - break; - case KINC_G5_VERTEX_DATA_U8_2X: - vi_attrs[attr].format = VK_FORMAT_R8G8_UINT; - break; - case KINC_G5_VERTEX_DATA_I8_2X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R8G8_SNORM; - break; - case KINC_G5_VERTEX_DATA_U8_2X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R8G8_UNORM; - break; - case KINC_G5_VERTEX_DATA_I8_4X: - vi_attrs[attr].format = VK_FORMAT_R8G8B8A8_SINT; - break; - case KINC_G5_VERTEX_DATA_U8_4X: - vi_attrs[attr].format = VK_FORMAT_R8G8B8A8_UINT; - break; - case KINC_G5_VERTEX_DATA_I8_4X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R8G8B8A8_SNORM; - break; case KINC_G5_VERTEX_DATA_U8_4X_NORMALIZED: vi_attrs[attr].format = VK_FORMAT_R8G8B8A8_UNORM; break; - case KINC_G5_VERTEX_DATA_I16_1X: - vi_attrs[attr].format = VK_FORMAT_R16_SINT; - break; - case KINC_G5_VERTEX_DATA_U16_1X: - vi_attrs[attr].format = VK_FORMAT_R16_UINT; - break; - case KINC_G5_VERTEX_DATA_I16_1X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R16_SNORM; - break; - case KINC_G5_VERTEX_DATA_U16_1X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R16_UNORM; - break; - case KINC_G5_VERTEX_DATA_I16_2X: - vi_attrs[attr].format = VK_FORMAT_R16G16_SINT; - break; - case KINC_G5_VERTEX_DATA_U16_2X: - vi_attrs[attr].format = VK_FORMAT_R16G16_UINT; - break; case KINC_G5_VERTEX_DATA_I16_2X_NORMALIZED: vi_attrs[attr].format = VK_FORMAT_R16G16_SNORM; break; - case KINC_G5_VERTEX_DATA_U16_2X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R16G16_UNORM; - break; - case KINC_G5_VERTEX_DATA_I16_4X: - vi_attrs[attr].format = VK_FORMAT_R16G16B16A16_SINT; - break; - case KINC_G5_VERTEX_DATA_U16_4X: - vi_attrs[attr].format = VK_FORMAT_R16G16B16A16_UINT; - break; case KINC_G5_VERTEX_DATA_I16_4X_NORMALIZED: vi_attrs[attr].format = VK_FORMAT_R16G16B16A16_SNORM; break; - case KINC_G5_VERTEX_DATA_U16_4X_NORMALIZED: - vi_attrs[attr].format = VK_FORMAT_R16G16B16A16_UNORM; - break; - case KINC_G5_VERTEX_DATA_I32_1X: - vi_attrs[attr].format = VK_FORMAT_R32_SINT; - break; - case KINC_G5_VERTEX_DATA_U32_1X: - vi_attrs[attr].format = VK_FORMAT_R32_UINT; - break; - case KINC_G5_VERTEX_DATA_I32_2X: - vi_attrs[attr].format = VK_FORMAT_R32G32_SINT; - break; - case KINC_G5_VERTEX_DATA_U32_2X: - vi_attrs[attr].format = VK_FORMAT_R32G32_UINT; - break; - case KINC_G5_VERTEX_DATA_I32_3X: - vi_attrs[attr].format = VK_FORMAT_R32G32B32_SINT; - break; - case KINC_G5_VERTEX_DATA_U32_3X: - vi_attrs[attr].format = VK_FORMAT_R32G32B32_UINT; - break; - case KINC_G5_VERTEX_DATA_I32_4X: - vi_attrs[attr].format = VK_FORMAT_R32G32B32A32_SINT; - break; - case KINC_G5_VERTEX_DATA_U32_4X: - vi_attrs[attr].format = VK_FORMAT_R32G32B32A32_UINT; - break; - default: - assert(false); - break; } attr++; } diff --git a/base/sources/backends/webgpu_gpu.c b/base/sources/backends/webgpu_gpu.c index d147b64f..5fe45733 100644 --- a/base/sources/backends/webgpu_gpu.c +++ b/base/sources/backends/webgpu_gpu.c @@ -315,10 +315,6 @@ void kinc_g5_pipeline_compile(kinc_g5_pipeline_t *pipe) { vaDesc[i].offset = offset; offset += kinc_g5_vertex_data_size(pipe->input_layout->elements[i].data); switch (pipe->input_layout->elements[i].data) { - case KINC_G5_VERTEX_DATA_NONE: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; case KINC_G5_VERTEX_DATA_F32_1X: vaDesc[i].format = WGPUVertexFormat_Float32; break; @@ -331,114 +327,15 @@ void kinc_g5_pipeline_compile(kinc_g5_pipeline_t *pipe) { case KINC_G5_VERTEX_DATA_F32_4X: vaDesc[i].format = WGPUVertexFormat_Float32x4; break; - case KINC_G5_VERTEX_DATA_F32_4X4: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_I8_1X: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_U8_1X: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_I8_1X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_U8_1X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_I8_2X: - vaDesc[i].format = WGPUVertexFormat_Sint8x2; - break; - case KINC_G5_VERTEX_DATA_U8_2X: - vaDesc[i].format = WGPUVertexFormat_Uint8x2 ; - break; - case KINC_G5_VERTEX_DATA_I8_2X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Snorm8x2; - break; - case KINC_G5_VERTEX_DATA_U8_2X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Unorm8x2; - break; - case KINC_G5_VERTEX_DATA_I8_4X: - vaDesc[i].format = WGPUVertexFormat_Sint8x4; - break; - case KINC_G5_VERTEX_DATA_U8_4X: - vaDesc[i].format = WGPUVertexFormat_Uint8x4; - break; - case KINC_G5_VERTEX_DATA_I8_4X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Snorm8x4; - break; case KINC_G5_VERTEX_DATA_U8_4X_NORMALIZED: vaDesc[i].format = WGPUVertexFormat_Unorm8x4; break; - case KINC_G5_VERTEX_DATA_I16_1X: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_U16_1X: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_I16_1X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_U16_1X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Undefined; - assert(false); - break; - case KINC_G5_VERTEX_DATA_I16_2X: - vaDesc[i].format = WGPUVertexFormat_Sint16x2; - break; - case KINC_G5_VERTEX_DATA_U16_2X: - vaDesc[i].format = WGPUVertexFormat_Uint16x2; - break; case KINC_G5_VERTEX_DATA_I16_2X_NORMALIZED: vaDesc[i].format = WGPUVertexFormat_Snorm16x2; break; - case KINC_G5_VERTEX_DATA_U16_2X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Unorm16x2; - break; - case KINC_G5_VERTEX_DATA_I16_4X: - vaDesc[i].format = WGPUVertexFormat_Sint16x4; - break; - case KINC_G5_VERTEX_DATA_U16_4X: - vaDesc[i].format = WGPUVertexFormat_Uint16x4; - break; case KINC_G5_VERTEX_DATA_I16_4X_NORMALIZED: vaDesc[i].format = WGPUVertexFormat_Snorm16x4; break; - case KINC_G5_VERTEX_DATA_U16_4X_NORMALIZED: - vaDesc[i].format = WGPUVertexFormat_Unorm16x4; - break; - case KINC_G5_VERTEX_DATA_I32_1X: - vaDesc[i].format = WGPUVertexFormat_Sint32; - break; - case KINC_G5_VERTEX_DATA_U32_1X: - vaDesc[i].format = WGPUVertexFormat_Uint32; - break; - case KINC_G5_VERTEX_DATA_I32_2X: - vaDesc[i].format = WGPUVertexFormat_Sint32x2; - break; - case KINC_G5_VERTEX_DATA_U32_2X: - vaDesc[i].format = WGPUVertexFormat_Uint32x2; - break; - case KINC_G5_VERTEX_DATA_I32_3X: - vaDesc[i].format = WGPUVertexFormat_Sint32x3; - break; - case KINC_G5_VERTEX_DATA_U32_3X: - vaDesc[i].format = WGPUVertexFormat_Uint32x3; - break; - case KINC_G5_VERTEX_DATA_I32_4X: - vaDesc[i].format = WGPUVertexFormat_Sint32x4; - break; - case KINC_G5_VERTEX_DATA_U32_4X: - vaDesc[i].format = WGPUVertexFormat_Uint32x4; - break; } } diff --git a/base/sources/iron.h b/base/sources/iron.h index b7d51132..32a91449 100644 --- a/base/sources/iron.h +++ b/base/sources/iron.h @@ -995,16 +995,18 @@ kinc_g5_shader_t *iron_g4_create_shader(buffer_t *data, i32 shader_type) { return shader; } -kinc_g5_shader_t *iron_g4_create_vertex_shader_from_source(string_t *source) { +kinc_g5_shader_t *iron_g4_create_shader_from_source(string_t *source, kinc_g5_shader_type_t shader_type) { + char *temp_string_s = shader_type == KINC_G5_SHADER_TYPE_VERTEX ? temp_string_vs : temp_string_fs; #ifdef WITH_D3DCOMPILER - strcpy(temp_string_vs, source); + strcpy(temp_string_s, source); ID3DBlob *error_message; ID3DBlob *shader_buffer; - UINT flags = D3DCOMPILE_SKIP_OPTIMIZATION | D3DCOMPILE_SKIP_VALIDATION;// D3DCOMPILE_OPTIMIZATION_LEVEL0 - HRESULT hr = D3DCompile(temp_string_vs, strlen(source) + 1, NULL, NULL, NULL, "main", "vs_5_0", flags, 0, &shader_buffer, &error_message); + UINT flags = D3DCOMPILE_SKIP_OPTIMIZATION | D3DCOMPILE_SKIP_VALIDATION; + HRESULT hr = D3DCompile(temp_string_s, strlen(source) + 1, NULL, NULL, NULL, "main", + shader_type == KINC_G5_SHADER_TYPE_VERTEX ? "vs_5_0" : "ps_5_0", flags, 0, &shader_buffer, &error_message); if (hr != S_OK) { kinc_log("%s", (char *)error_message->lpVtbl->GetBufferPointer(error_message)); return NULL; @@ -1017,31 +1019,37 @@ kinc_g5_shader_t *iron_g4_create_vertex_shader_from_source(string_t *source) { char *file = malloc(size * 2); int output_len = 0; - bool has_bone = strstr(temp_string_vs, " bone :") != NULL; - bool has_col = strstr(temp_string_vs, " col :") != NULL; - bool has_nor = strstr(temp_string_vs, " nor :") != NULL; - bool has_pos = strstr(temp_string_vs, " pos :") != NULL; - bool has_tex = strstr(temp_string_vs, " tex :") != NULL; + if (shader_type == KINC_G5_SHADER_TYPE_VERTEX) { + bool has_bone = strstr(temp_string_s, " bone :") != NULL; + bool has_col = strstr(temp_string_s, " col :") != NULL; + bool has_nor = strstr(temp_string_s, " nor :") != NULL; + bool has_pos = strstr(temp_string_s, " pos :") != NULL; + bool has_tex = strstr(temp_string_s, " tex :") != NULL; - i32_map_t *attributes = i32_map_create(); - int index = 0; - if (has_bone) i32_map_set(attributes, "bone", index++); - if (has_col) i32_map_set(attributes, "col", index++); - if (has_nor) i32_map_set(attributes, "nor", index++); - if (has_pos) i32_map_set(attributes, "pos", index++); - if (has_tex) i32_map_set(attributes, "tex", index++); - if (has_bone) i32_map_set(attributes, "weight", index++); + i32_map_t *attributes = i32_map_create(); + int index = 0; + if (has_bone) i32_map_set(attributes, "bone", index++); + if (has_col) i32_map_set(attributes, "col", index++); + if (has_nor) i32_map_set(attributes, "nor", index++); + if (has_pos) i32_map_set(attributes, "pos", index++); + if (has_tex) i32_map_set(attributes, "tex", index++); + if (has_bone) i32_map_set(attributes, "weight", index++); - file[output_len] = (char)index; - output_len += 1; - - any_array_t *keys = map_keys(attributes); - for (int i = 0; i < keys->length; ++i) { - strcpy(file + output_len, keys->buffer[i]); - output_len += strlen(keys->buffer[i]); - file[output_len] = 0; + file[output_len] = (char)index; output_len += 1; - file[output_len] = i32_map_get(attributes, keys->buffer[i]); + + any_array_t *keys = map_keys(attributes); + for (int i = 0; i < keys->length; ++i) { + strcpy(file + output_len, keys->buffer[i]); + output_len += strlen(keys->buffer[i]); + file[output_len] = 0; + output_len += 1; + file[output_len] = i32_map_get(attributes, keys->buffer[i]); + output_len += 1; + } + } + else { + file[output_len] = 0; output_len += 1; } @@ -1113,152 +1121,23 @@ kinc_g5_shader_t *iron_g4_create_vertex_shader_from_source(string_t *source) { reflector->lpVtbl->Release(reflector); kinc_g5_shader_t *shader = (kinc_g5_shader_t *)malloc(sizeof(kinc_g5_shader_t)); - kinc_g5_shader_init(shader, file, (int)output_len, KINC_G5_SHADER_TYPE_VERTEX); + kinc_g5_shader_init(shader, file, (int)output_len, shader_type); free(file); #elif defined(KINC_METAL) - strcpy(temp_string_vs, "// my_main\n"); - strcat(temp_string_vs, source); + strcpy(temp_string_s, "// my_main\n"); + strcat(temp_string_s, source); kinc_g5_shader_t *shader = (kinc_g5_shader_t *)malloc(sizeof(kinc_g5_shader_t)); - kinc_g5_shader_init(shader, temp_string_vs, strlen(temp_string_vs), KINC_G5_SHADER_TYPE_VERTEX); + kinc_g5_shader_init(shader, temp_string_s, strlen(temp_string_s), shader_type); #elif defined(KINC_VULKAN) && defined(KRAFIX_LIBRARY) char *output = malloc(1024 * 1024); int length; - krafix_compile(source, output, &length, "spirv", "windows", "vert", -1); + krafix_compile(source, output, &length, "spirv", "windows", shader_type == KINC_G5_SHADER_TYPE_VERTEX ? "vert" : "frag", -1); kinc_g5_shader_t *shader = (kinc_g5_shader_t *)malloc(sizeof(kinc_g5_shader_t)); - kinc_g5_shader_init(shader, output, length, KINC_G5_SHADER_TYPE_VERTEX); - - #else - - char *source_ = malloc(strlen(source) + 1); - strcpy(source_, source); - kinc_g5_shader_t *shader = (kinc_g5_shader_t *)malloc(sizeof(kinc_g5_shader_t)); - kinc_g5_shader_init(shader, source_, strlen(source_), KINC_G5_SHADER_TYPE_VERTEX); - - #endif - - return shader; -} - -kinc_g5_shader_t *iron_g4_create_fragment_shader_from_source(string_t *source) { - - #ifdef WITH_D3DCOMPILER - - strcpy(temp_string_fs, source); - - ID3DBlob *error_message; - ID3DBlob *shader_buffer; - UINT flags = D3DCOMPILE_SKIP_OPTIMIZATION | D3DCOMPILE_SKIP_VALIDATION;// D3DCOMPILE_OPTIMIZATION_LEVEL0 - HRESULT hr = D3DCompile(temp_string_fs, strlen(source) + 1, NULL, NULL, NULL, "main", "ps_5_0", flags, 0, &shader_buffer, &error_message); - if (hr != S_OK) { - kinc_log("%s", (char *)error_message->lpVtbl->GetBufferPointer(error_message)); - return NULL; - } - - ID3D11ShaderReflection *reflector = NULL; - D3DReflect(shader_buffer->lpVtbl->GetBufferPointer(shader_buffer), shader_buffer->lpVtbl->GetBufferSize(shader_buffer), &IID_ID3D11ShaderReflection, (void **)&reflector); - - int size = shader_buffer->lpVtbl->GetBufferSize(shader_buffer); - char *file = malloc(size * 2); - int output_len = 0; - file[output_len] = 0; - output_len += 1; - - D3D11_SHADER_DESC desc; - reflector->lpVtbl->GetDesc(reflector, &desc); - - file[output_len] = desc.BoundResources; - output_len += 1; - for (int i = 0; i < desc.BoundResources; ++i) { - D3D11_SHADER_INPUT_BIND_DESC bindDesc; - reflector->lpVtbl->GetResourceBindingDesc(reflector, i, &bindDesc); - strcpy(file + output_len, bindDesc.Name); - output_len += strlen(bindDesc.Name); - file[output_len] = 0; - output_len += 1; - file[output_len] = bindDesc.BindPoint; - output_len += 1; - } - - ID3D11ShaderReflectionConstantBuffer *constants = reflector->lpVtbl->GetConstantBufferByName(reflector, "$Globals"); - D3D11_SHADER_BUFFER_DESC buffer_desc; - hr = constants->lpVtbl->GetDesc(constants, &buffer_desc); - if (hr == S_OK) { - file[output_len] = buffer_desc.Variables; - output_len += 1; - for (int i = 0; i < buffer_desc.Variables; ++i) { - ID3D11ShaderReflectionVariable *variable = constants->lpVtbl->GetVariableByIndex(constants, i); - D3D11_SHADER_VARIABLE_DESC variable_desc; - hr = variable->lpVtbl->GetDesc(variable, &variable_desc); - if (hr == S_OK) { - strcpy(file + output_len, variable_desc.Name); - output_len += strlen(variable_desc.Name); - file[output_len] = 0; - output_len += 1; - - *(uint32_t *)(file + output_len) = variable_desc.StartOffset; - output_len += 4; - - *(uint32_t *)(file + output_len) = variable_desc.Size; - output_len += 4; - - D3D11_SHADER_TYPE_DESC type_desc; - ID3D11ShaderReflectionType *type = variable->lpVtbl->GetType(variable); - hr = type->lpVtbl->GetDesc(type, &type_desc); - if (hr == S_OK) { - file[output_len] = type_desc.Columns; - output_len += 1; - file[output_len] = type_desc.Rows; - output_len += 1; - } - else { - file[output_len] = 0; - output_len += 1; - file[output_len] = 0; - output_len += 1; - } - } - } - } - else { - file[output_len] = 0; - output_len += 1; - } - - memcpy(file + output_len, (char *)shader_buffer->lpVtbl->GetBufferPointer(shader_buffer), shader_buffer->lpVtbl->GetBufferSize(shader_buffer)); - output_len += shader_buffer->lpVtbl->GetBufferSize(shader_buffer); - - shader_buffer->lpVtbl->Release(shader_buffer); - reflector->lpVtbl->Release(reflector); - - kinc_g5_shader_t *shader = (kinc_g5_shader_t *)malloc(sizeof(kinc_g5_shader_t)); - kinc_g5_shader_init(shader, file, (int)output_len, KINC_G5_SHADER_TYPE_FRAGMENT); - free(file); - - #elif defined(KINC_METAL) - - strcpy(temp_string_fs, "// my_main\n"); - strcat(temp_string_fs, source); - kinc_g5_shader_t *shader = (kinc_g5_shader_t *)malloc(sizeof(kinc_g5_shader_t)); - kinc_g5_shader_init(shader, temp_string_fs, strlen(temp_string_fs), KINC_G5_SHADER_TYPE_FRAGMENT); - - #elif defined(KINC_VULKAN) && defined(KRAFIX_LIBRARY) - - char *output = malloc(1024 * 1024); - int length; - krafix_compile(source, output, &length, "spirv", "windows", "frag", -1); - kinc_g5_shader_t *shader = (kinc_g5_shader_t *)malloc(sizeof(kinc_g5_shader_t)); - kinc_g5_shader_init(shader, output, length, KINC_G5_SHADER_TYPE_FRAGMENT); - - #else - - char *source_ = malloc(strlen(source) + 1); - strcpy(source_, source); - kinc_g5_shader_t *shader = (kinc_g5_shader_t *)malloc(sizeof(kinc_g5_shader_t)); - kinc_g5_shader_init(shader, source_, strlen(source_), KINC_G5_SHADER_TYPE_FRAGMENT); + kinc_g5_shader_init(shader, output, length, shader_type); #endif diff --git a/base/sources/iron_draw.c b/base/sources/iron_draw.c index cc661d54..27543d85 100644 --- a/base/sources/iron_draw.c +++ b/base/sources/iron_draw.c @@ -16,11 +16,12 @@ extern bool waitAfterNextDraw; #define MATH_PI 3.14159265358979323846 #define DRAW_BUFFER_SIZE 1000 +draw_font_t *draw_font = NULL; +int draw_font_size; + static kinc_matrix4x4_t draw_projection_matrix; static bool draw_bilinear_filter = true; static uint32_t draw_color = 0; -static draw_font_t *draw_font = NULL; -static int draw_font_size; static bool draw_is_render_target = false; static kinc_g5_pipeline_t *draw_last_pipeline = NULL; static kinc_g5_pipeline_t *draw_custom_pipeline = NULL; diff --git a/base/sources/iron_draw.h b/base/sources/iron_draw.h index c45179b2..0fbc5e70 100644 --- a/base/sources/iron_draw.h +++ b/base/sources/iron_draw.h @@ -78,3 +78,6 @@ void draw_set_render_target(kinc_g5_render_target_t *target); void draw_filled_circle(float cx, float cy, float radius, int segments); void draw_circle(float cx, float cy, float radius, int segments, float strength); void draw_cubic_bezier(f32_array_t *x, f32_array_t *y, int segments, float strength); + +extern int draw_font_size; +extern draw_font_t *draw_font; diff --git a/base/sources/iron_gpu.h b/base/sources/iron_gpu.h index 6ddafd17..4d2f69f6 100644 --- a/base/sources/iron_gpu.h +++ b/base/sources/iron_gpu.h @@ -118,44 +118,13 @@ void kinc_g4_index_buffer_unlock(struct kinc_g5_index_buffer *buffer, int count) #define KINC_G5_MAX_VERTEX_ELEMENTS 16 typedef enum kinc_g5_vertex_data { - KINC_G5_VERTEX_DATA_NONE = 0, - KINC_G5_VERTEX_DATA_F32_1X = 1, - KINC_G5_VERTEX_DATA_F32_2X = 2, - KINC_G5_VERTEX_DATA_F32_3X = 3, - KINC_G5_VERTEX_DATA_F32_4X = 4, - KINC_G5_VERTEX_DATA_F32_4X4 = 5, - KINC_G5_VERTEX_DATA_I8_1X = 6, - KINC_G5_VERTEX_DATA_U8_1X = 7, - KINC_G5_VERTEX_DATA_I8_1X_NORMALIZED = 8, - KINC_G5_VERTEX_DATA_U8_1X_NORMALIZED = 9, - KINC_G5_VERTEX_DATA_I8_2X = 10, - KINC_G5_VERTEX_DATA_U8_2X = 11, - KINC_G5_VERTEX_DATA_I8_2X_NORMALIZED = 12, - KINC_G5_VERTEX_DATA_U8_2X_NORMALIZED = 13, - KINC_G5_VERTEX_DATA_I8_4X = 14, - KINC_G5_VERTEX_DATA_U8_4X = 15, - KINC_G5_VERTEX_DATA_I8_4X_NORMALIZED = 16, - KINC_G5_VERTEX_DATA_U8_4X_NORMALIZED = 17, - KINC_G5_VERTEX_DATA_I16_1X = 18, - KINC_G5_VERTEX_DATA_U16_1X = 19, - KINC_G5_VERTEX_DATA_I16_1X_NORMALIZED = 20, - KINC_G5_VERTEX_DATA_U16_1X_NORMALIZED = 21, - KINC_G5_VERTEX_DATA_I16_2X = 22, - KINC_G5_VERTEX_DATA_U16_2X = 23, - KINC_G5_VERTEX_DATA_I16_2X_NORMALIZED = 24, - KINC_G5_VERTEX_DATA_U16_2X_NORMALIZED = 25, - KINC_G5_VERTEX_DATA_I16_4X = 26, - KINC_G5_VERTEX_DATA_U16_4X = 27, - KINC_G5_VERTEX_DATA_I16_4X_NORMALIZED = 28, - KINC_G5_VERTEX_DATA_U16_4X_NORMALIZED = 29, - KINC_G5_VERTEX_DATA_I32_1X = 30, - KINC_G5_VERTEX_DATA_U32_1X = 31, - KINC_G5_VERTEX_DATA_I32_2X = 32, - KINC_G5_VERTEX_DATA_U32_2X = 33, - KINC_G5_VERTEX_DATA_I32_3X = 34, - KINC_G5_VERTEX_DATA_U32_3X = 35, - KINC_G5_VERTEX_DATA_I32_4X = 36, - KINC_G5_VERTEX_DATA_U32_4X = 37, + KINC_G5_VERTEX_DATA_F32_1X = 0, + KINC_G5_VERTEX_DATA_F32_2X = 1, + KINC_G5_VERTEX_DATA_F32_3X = 2, + KINC_G5_VERTEX_DATA_F32_4X = 3, + KINC_G5_VERTEX_DATA_U8_4X_NORMALIZED = 4, + KINC_G5_VERTEX_DATA_I16_2X_NORMALIZED = 5, + KINC_G5_VERTEX_DATA_I16_4X_NORMALIZED = 6, } kinc_g5_vertex_data_t; typedef struct kinc_g5_vertex_element { @@ -171,8 +140,6 @@ typedef struct kinc_g5_vertex_structure { static inline int kinc_g5_vertex_data_size(kinc_g5_vertex_data_t data) { switch (data) { default: - case KINC_G5_VERTEX_DATA_NONE: - return 0; case KINC_G5_VERTEX_DATA_F32_1X: return 1 * 4; case KINC_G5_VERTEX_DATA_F32_2X: @@ -181,50 +148,12 @@ static inline int kinc_g5_vertex_data_size(kinc_g5_vertex_data_t data) { return 3 * 4; case KINC_G5_VERTEX_DATA_F32_4X: return 4 * 4; - case KINC_G5_VERTEX_DATA_F32_4X4: - return 4 * 4 * 4; - case KINC_G5_VERTEX_DATA_I8_1X: - case KINC_G5_VERTEX_DATA_U8_1X: - case KINC_G5_VERTEX_DATA_I8_1X_NORMALIZED: - case KINC_G5_VERTEX_DATA_U8_1X_NORMALIZED: - return 1 * 1; - case KINC_G5_VERTEX_DATA_I8_2X: - case KINC_G5_VERTEX_DATA_U8_2X: - case KINC_G5_VERTEX_DATA_I8_2X_NORMALIZED: - case KINC_G5_VERTEX_DATA_U8_2X_NORMALIZED: - return 2 * 1; - case KINC_G5_VERTEX_DATA_I8_4X: - case KINC_G5_VERTEX_DATA_U8_4X: - case KINC_G5_VERTEX_DATA_I8_4X_NORMALIZED: case KINC_G5_VERTEX_DATA_U8_4X_NORMALIZED: return 4 * 1; - case KINC_G5_VERTEX_DATA_I16_1X: - case KINC_G5_VERTEX_DATA_U16_1X: - case KINC_G5_VERTEX_DATA_I16_1X_NORMALIZED: - case KINC_G5_VERTEX_DATA_U16_1X_NORMALIZED: - return 1 * 2; - case KINC_G5_VERTEX_DATA_I16_2X: - case KINC_G5_VERTEX_DATA_U16_2X: case KINC_G5_VERTEX_DATA_I16_2X_NORMALIZED: - case KINC_G5_VERTEX_DATA_U16_2X_NORMALIZED: return 2 * 2; - case KINC_G5_VERTEX_DATA_I16_4X: - case KINC_G5_VERTEX_DATA_U16_4X: case KINC_G5_VERTEX_DATA_I16_4X_NORMALIZED: - case KINC_G5_VERTEX_DATA_U16_4X_NORMALIZED: return 4 * 2; - case KINC_G5_VERTEX_DATA_I32_1X: - case KINC_G5_VERTEX_DATA_U32_1X: - return 1 * 4; - case KINC_G5_VERTEX_DATA_I32_2X: - case KINC_G5_VERTEX_DATA_U32_2X: - return 2 * 4; - case KINC_G5_VERTEX_DATA_I32_3X: - case KINC_G5_VERTEX_DATA_U32_3X: - return 3 * 4; - case KINC_G5_VERTEX_DATA_I32_4X: - case KINC_G5_VERTEX_DATA_U32_4X: - return 4 * 4; } } diff --git a/base/sources/ts/console.ts b/base/sources/ts/console.ts index 79cf8ad8..a3b8fc20 100644 --- a/base/sources/ts/console.ts +++ b/base/sources/ts/console.ts @@ -12,10 +12,9 @@ function console_draw_toast(s: string) { let x: f32 = kinc_window_width() / 2; let y: f32 = kinc_window_height() - 200 * scale; draw_filled_rect(x - 200 * scale, y, 400 * scale, 80 * scale); - g2_set_font(base_font); - g2_set_font_size(math_floor(22 * scale)); + g2_set_font(base_font, math_floor(22 * scale)); draw_set_color(0xffffffff); - draw_string(s, x - g2_font_width(_g2_font, _g2_font_size, s) / 2, y + 40 * scale - g2_font_height(_g2_font, _g2_font_size) / 2); + draw_string(s, x - g2_font_width(draw_font, draw_font_size, s) / 2, y + 40 * scale - g2_font_height(draw_font, draw_font_size) / 2); } function _console_toast_render(s: string) { diff --git a/base/sources/ts/import_arm.ts b/base/sources/ts/import_arm.ts index b2d4130d..42e28735 100644 --- a/base/sources/ts/import_arm.ts +++ b/base/sources/ts/import_arm.ts @@ -202,7 +202,7 @@ function import_arm_run_project(path: string) { }, _texpaint_blend0); blend0.width = config_get_texture_res_x(); blend0.height = config_get_texture_res_y(); - blend0._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y(), tex_format_t.R8, depth_format_t.NO_DEPTH); + blend0._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y(), tex_format_t.R8, 0); let blend1: render_target_t = map_get(rts, "texpaint_blend1"); let _texpaint_blend1: image_t = blend1._image; app_notify_on_next_frame(function (_texpaint_blend1: image_t) { @@ -210,7 +210,7 @@ function import_arm_run_project(path: string) { }, _texpaint_blend1); blend1.width = config_get_texture_res_x(); blend1.height = config_get_texture_res_y(); - blend1._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y(), tex_format_t.R8, depth_format_t.NO_DEPTH); + blend1._image = image_create_render_target(config_get_texture_res_x(), config_get_texture_res_y(), tex_format_t.R8, 0); context_raw.brush_blend_dirty = true; } diff --git a/base/sources/ts/iron/g2.ts b/base/sources/ts/iron/g2.ts index daad022c..1d78a067 100644 --- a/base/sources/ts/iron/g2.ts +++ b/base/sources/ts/iron/g2.ts @@ -11,9 +11,6 @@ declare type draw_font_t = { index?: i32; }; -let _g2_font: draw_font_t; -let _g2_font_size: i32 = 0; - let _g2_current: image_t = null; let _g2_in_use: bool = false; let _g2_font_glyphs: i32[] = _g2_make_glyphs(32, 127); @@ -22,23 +19,10 @@ let _g2_thrown: bool = false; let _g2_mat: f32_array_t = f32_array_create(9); let _g2_initialized: bool = false; -function g2_set_font_and_size(font: draw_font_t, font_size: i32) { - g2_font_init(font); - draw_set_font(font, font_size); -} - -function g2_set_font(f: draw_font_t) { - if (_g2_font_size != 0) { - g2_set_font_and_size(f, _g2_font_size); - } - _g2_font = f; -} - -function g2_set_font_size(i: i32) { - if (_g2_font != null) { - g2_set_font_and_size(_g2_font, i); - } - _g2_font_size = i; +function g2_set_font(f: draw_font_t, size: i32) { + g2_font_init(f); + draw_set_font(f, size); + draw_font_size = size; } function g2_set_pipeline(p: pipeline_t) { diff --git a/base/sources/ts/iron/g4.ts b/base/sources/ts/iron/g4.ts index 281ca48b..fac18e55 100644 --- a/base/sources/ts/iron/g4.ts +++ b/base/sources/ts/iron/g4.ts @@ -1,28 +1,7 @@ -function g4_shader_create(buffer: buffer_t, type: shader_type_t): shader_t { - let raw: shader_t = {}; - if (buffer != null) { - raw.shader_ = iron_g4_create_shader(buffer, type); - } - return raw; -} - -function g4_shader_from_source(source: string, type: shader_type_t): shader_t { - let shader: shader_t = g4_shader_create(null, 0); - if (type == shader_type_t.VERTEX) { - shader.shader_ = iron_g4_create_vertex_shader_from_source(source); - } - else if (type == shader_type_t.FRAGMENT) { - shader.shader_ = iron_g4_create_fragment_shader_from_source(source); - } - return shader; -} - -function g4_shader_delete(raw: shader_t) { - kinc_g5_shader_destroy(raw.shader_); -} - function g4_pipeline_create(): pipeline_t { + // return iron_g4_create_pipeline(); + let raw: pipeline_t = {}; raw.cull_mode = cull_mode_t.NONE; raw.depth_write = false; @@ -55,22 +34,12 @@ function g4_pipeline_create(): pipeline_t { for (let i: i32 = 0; i < 8; ++i) { array_push(raw.color_attachments, tex_format_t.RGBA32); } - raw.depth_attachment = depth_format_t.NO_DEPTH; + raw.depth_attachment_bits = 0; raw.pipeline_ = iron_g4_create_pipeline(); return raw; } -function g4_pipeline_get_depth_buffer_bits(format: depth_format_t): i32 { - if (format == depth_format_t.NO_DEPTH) { - return 0; - } - if (format == depth_format_t.DEPTH24) { - return 24; - } - return 0; -} - function g4_pipeline_delete(raw: pipeline_t) { iron_g4_delete_pipeline(raw.pipeline_); } @@ -102,9 +71,9 @@ function g4_pipeline_compile(raw: pipeline_t) { raw.pipeline_.alpha_blend_source = raw.alpha_blend_source; raw.pipeline_.alpha_blend_destination = raw.alpha_blend_dest; raw.pipeline_.color_attachment_count = raw.color_attachment_count; - raw.pipeline_.depth_attachment_bits = g4_pipeline_get_depth_buffer_bits(raw.depth_attachment); - raw.pipeline_.vertex_shader = raw.vertex_shader.shader_; - raw.pipeline_.fragment_shader = raw.fragment_shader.shader_; + raw.pipeline_.depth_attachment_bits = raw.depth_attachment_bits; + raw.pipeline_.vertex_shader = raw.vertex_shader; + raw.pipeline_.fragment_shader = raw.fragment_shader; iron_g4_compile_pipeline(raw.pipeline_, structure0); } @@ -341,13 +310,6 @@ function _image_set_size_from_render_target(image: image_t, _rt: any) { image.height = rt.height; } -function image_get_depth_buffer_bits(format: depth_format_t): i32 { - if (format == depth_format_t.DEPTH24) { - return 24; - } - return -1; -} - function image_from_texture(tex: any): image_t { let image: image_t = _image_create(tex); _image_set_size_from_texture(image, tex); @@ -378,10 +340,10 @@ function image_create(width: i32, height: i32, format: tex_format_t = tex_format return image; } -function image_create_render_target(width: i32, height: i32, format: tex_format_t = tex_format_t.RGBA32, depth_format: depth_format_t = depth_format_t.NO_DEPTH): image_t { +function image_create_render_target(width: i32, height: i32, format: tex_format_t = tex_format_t.RGBA32, depth_buffer_bits: i32 = 0): image_t { let image: image_t = _image_create(null); image.format = format; - image.render_target_ = iron_g4_create_render_target(width, height, format, image_get_depth_buffer_bits(depth_format)); + image.render_target_ = iron_g4_create_render_target(width, height, format, depth_buffer_bits); _image_set_size_from_render_target(image, image.render_target_); return image; } @@ -488,9 +450,10 @@ declare type kinc_g5_pipeline_t = { type pipeline_t = { pipeline_?: kinc_g5_pipeline_t; + input_layout?: vertex_struct_t; - vertex_shader?: shader_t; - fragment_shader?: shader_t; + vertex_shader?: kinc_g5_shader_t; + fragment_shader?: kinc_g5_shader_t; cull_mode?: cull_mode_t; depth_write?: bool; depth_mode?: compare_mode_t; @@ -502,13 +465,22 @@ type pipeline_t = { color_write_masks_green?: bool[]; color_write_masks_blue?: bool[]; color_write_masks_alpha?: bool[]; - color_attachment_count?: i32; color_attachments?: tex_format_t[]; - depth_attachment?: depth_format_t; + color_attachment_count?: i32; + depth_attachment_bits?: i32; }; -type shader_t = { - shader_?: any; +declare type kinc_g5_shader_t = { + impl?: any; +}; + +declare type kinc_vertex_elem_t = { + name?: string; + data?: vertex_data_t; +}; + +declare type vertex_struct_t = { + elements?: kinc_vertex_elem_t[]; }; type vertex_buffer_t = { @@ -516,19 +488,10 @@ type vertex_buffer_t = { vertex_count?: i32; }; -declare type vertex_struct_t = { - elements?: kinc_vertex_elem_t[]; -}; - type index_buffer_t = { buffer_?: any; }; -declare type kinc_vertex_elem_t = { - name?: string; - data?: vertex_data_t; -}; - type kinc_const_loc_t = any; type kinc_tex_unit_t = any; @@ -576,19 +539,14 @@ enum tex_format_t { R32, } -enum depth_format_t { - NO_DEPTH, - DEPTH24, -} - enum vertex_data_t { - F32_1X = 1, - F32_2X = 2, - F32_3X = 3, - F32_4X = 4, - U8_4X_NORM = 17, - I16_2X_NORM = 24, - I16_4X_NORM = 28, + F32_1X, + F32_2X, + F32_3X, + F32_4X, + U8_4X_NORM, + I16_2X_NORM, + I16_4X_NORM, } enum blend_factor_t { @@ -622,6 +580,6 @@ enum cull_mode_t { } enum shader_type_t { - FRAGMENT = 0, - VERTEX = 1, + FRAGMENT, + VERTEX, } diff --git a/base/sources/ts/iron/iron.ts b/base/sources/ts/iron/iron.ts index beb7397a..92fb8653 100644 --- a/base/sources/ts/iron/iron.ts +++ b/base/sources/ts/iron/iron.ts @@ -222,10 +222,9 @@ declare function iron_g4_lock_vertex_buffer(buffer: any): buffer_t; declare function kinc_g4_vertex_buffer_unlock_all(buffer: any): void; declare function kinc_g4_set_vertex_buffer(buffer: any): void; declare function iron_g4_draw_indexed_vertices(start: i32, count: i32): void; -declare function iron_g4_create_shader(data: buffer_t, type: i32): any; -declare function iron_g4_create_vertex_shader_from_source(source: string): any; -declare function iron_g4_create_fragment_shader_from_source(source: string): any; -declare function kinc_g5_shader_destroy(shader: any): void; +declare function iron_g4_create_shader(data: buffer_t, type: i32): kinc_g5_shader_t; +declare function iron_g4_create_shader_from_source(source: string, shader_type: shader_type_t): kinc_g5_shader_t; +declare function kinc_g5_shader_destroy(shader: kinc_g5_shader_t): void; declare function iron_g4_create_pipeline(): any; declare function iron_g4_delete_pipeline(pipeline: any): void; declare function iron_g4_compile_pipeline(pipeline: any, structure0: any, vertex_shader: any, fragment_shader: any): void; @@ -331,6 +330,8 @@ declare function draw_set_transform(matrix: buffer_t): void; declare function draw_filled_circle(cx: f32, cy: f32, radius: f32, segments: i32 = 0): void; declare function draw_circle(cx: f32, cy: f32, radius: f32, segments: i32 = 0, strength: f32 = 1.0): void; declare function draw_cubic_bezier(x: f32[], y: f32[], segments: i32 = 20, strength: f32 = 1.0): void; +declare let draw_font: draw_font_t; +declare let draw_font_size: i32; declare function iron_set_save_and_quit_callback(callback: (save: bool)=>void): void; declare function iron_set_mouse_cursor(id: i32): void; diff --git a/base/sources/ts/iron/render_path.ts b/base/sources/ts/iron/render_path.ts index 4cdbeb34..90f12440 100644 --- a/base/sources/ts/iron/render_path.ts +++ b/base/sources/ts/iron/render_path.ts @@ -9,7 +9,7 @@ type render_target_t = { depth_buffer?: string; // 2D texture mipmaps?: bool; // Runtime - _depth_format?: depth_format_t; + _depth_buffer_bits?: i32; _depth_from?: string; _image?: image_t; // RT or image _has_depth?: bool; @@ -324,7 +324,7 @@ function render_path_resize() { if (rt != null && rt.width == 0) { let _image: image_t = rt._image; app_notify_on_init(_render_path_resize_on_init, _image); - rt._image = render_path_create_image(rt, rt._depth_format); + rt._image = render_path_create_image(rt, rt._depth_buffer_bits); } } @@ -362,28 +362,28 @@ function render_path_create_target(t: render_target_t): render_target_t { let db: depth_buffer_desc_t = _render_path_depth_buffers[i]; if (db.name == t.depth_buffer) { map_set(_render_path_depth_to_render_target, db.name, t); - t._depth_format = render_path_get_depth_format(db.format); - t._image = render_path_create_image(t, t._depth_format); + t._depth_buffer_bits = 24; + t._image = render_path_create_image(t, t._depth_buffer_bits); break; } } } else { // Reuse - t._depth_format = depth_format_t.NO_DEPTH; + t._depth_buffer_bits = 0; t._depth_from = t.depth_buffer; - t._image = render_path_create_image(t, t._depth_format); + t._image = render_path_create_image(t, t._depth_buffer_bits); image_set_depth_from(t._image, depth_target._image); } } else { // No depth buffer t._has_depth = false; - t._depth_format = depth_format_t.NO_DEPTH; - t._image = render_path_create_image(t, t._depth_format); + t._depth_buffer_bits = 0; + t._image = render_path_create_image(t, t._depth_buffer_bits); } return t; } -function render_path_create_image(t: render_target_t, depth_format: depth_format_t): image_t { +function render_path_create_image(t: render_target_t, depth_buffer_bits: i32): image_t { let width: i32 = t.width == 0 ? app_w() : t.width; let height: i32 = t.height == 0 ? app_h() : t.height; width = math_floor(width * t.scale); @@ -396,7 +396,7 @@ function render_path_create_image(t: render_target_t, depth_format: depth_format } return image_create_render_target(width, height, t.format != null ? render_path_get_tex_format(t.format) : tex_format_t.RGBA32, - depth_format); + depth_buffer_bits); } function render_path_get_tex_format(s: string): tex_format_t { @@ -421,16 +421,6 @@ function render_path_get_tex_format(s: string): tex_format_t { return tex_format_t.RGBA32; } -function render_path_get_depth_format(s: string): depth_format_t { - if (s == null || s == "") { - return depth_format_t.DEPTH24; - } - if (s == "DEPTH24") { - return depth_format_t.DEPTH24; - } - return depth_format_t.DEPTH24; -} - function render_target_create(): render_target_t { let raw: render_target_t = {}; raw.scale = 1.0; diff --git a/base/sources/ts/iron/shader_data.ts b/base/sources/ts/iron/shader_data.ts index 0e1124b9..29f1e373 100644 --- a/base/sources/ts/iron/shader_data.ts +++ b/base/sources/ts/iron/shader_data.ts @@ -128,16 +128,16 @@ function shader_context_compile(raw: shader_context_t): shader_context_t { // Depth attachment format if (raw.depth_attachment != null) { - raw._.pipe_state.depth_attachment = shader_context_get_depth_format(raw.depth_attachment); + raw._.pipe_state.depth_attachment_bits = raw.depth_attachment == "NONE" ? 0 : 24; } // Shaders if (raw.shader_from_source) { - raw._.pipe_state.vertex_shader = g4_shader_from_source(raw.vertex_shader, shader_type_t.VERTEX); - raw._.pipe_state.fragment_shader = g4_shader_from_source(raw.fragment_shader, shader_type_t.FRAGMENT); + raw._.pipe_state.vertex_shader = iron_g4_create_shader_from_source(raw.vertex_shader, shader_type_t.VERTEX); + raw._.pipe_state.fragment_shader = iron_g4_create_shader_from_source(raw.fragment_shader, shader_type_t.FRAGMENT); // Shader compile error - if (raw._.pipe_state.vertex_shader.shader_ == null || raw._.pipe_state.fragment_shader.shader_ == null) { + if (raw._.pipe_state.vertex_shader == null || raw._.pipe_state.fragment_shader == null) { return null; } } @@ -149,9 +149,9 @@ function shader_context_compile(raw: shader_context_t): shader_context_t { ///else // Load shaders manually let vs_buffer: buffer_t = data_get_blob(raw.vertex_shader + shader_data_ext()); - raw._.pipe_state.vertex_shader = g4_shader_create(vs_buffer, shader_type_t.VERTEX); + raw._.pipe_state.vertex_shader = iron_g4_create_shader(vs_buffer, shader_type_t.VERTEX); let fs_buffer: buffer_t = data_get_blob(raw.fragment_shader + shader_data_ext()); - raw._.pipe_state.fragment_shader = g4_shader_create(fs_buffer, shader_type_t.FRAGMENT); + raw._.pipe_state.fragment_shader = iron_g4_create_shader(fs_buffer, shader_type_t.FRAGMENT); ///end } @@ -211,10 +211,10 @@ function shader_context_parse_vertex_struct(raw: shader_context_t) { function shader_context_delete(raw: shader_context_t) { if (raw._.pipe_state.fragment_shader != null) { - g4_shader_delete(raw._.pipe_state.fragment_shader); + kinc_g5_shader_destroy(raw._.pipe_state.fragment_shader); } if (raw._.pipe_state.vertex_shader != null) { - g4_shader_delete(raw._.pipe_state.vertex_shader); + kinc_g5_shader_destroy(raw._.pipe_state.vertex_shader); } g4_pipeline_delete(raw._.pipe_state); } @@ -343,16 +343,6 @@ function shader_context_get_tex_format(s: string): tex_format_t { return tex_format_t.RGBA32; } -function shader_context_get_depth_format(s: string): depth_format_t { - if (s == "DEPTH32") { - return depth_format_t.DEPTH24; - } - if (s == "NONE") { - return depth_format_t.NO_DEPTH; - } - return depth_format_t.DEPTH24; -} - function shader_context_add_const(raw: shader_context_t, c: shader_const_t) { array_push(raw._.constants, g4_pipeline_get_const_loc(raw._.pipe_state, c.name)); } diff --git a/base/sources/ts/iron/sys.ts b/base/sources/ts/iron/sys.ts index 61af0092..b071f0d9 100644 --- a/base/sources/ts/iron/sys.ts +++ b/base/sources/ts/iron/sys.ts @@ -20,7 +20,7 @@ let _sys_paste_listener: (data: string)=>void = null; let _sys_start_time: f32; let _sys_window_title: string; -let _sys_shaders: map_t = map_create(); +let _sys_shaders: map_t = map_create(); declare type kinc_window_options_t = { title?: string; @@ -336,10 +336,10 @@ function sys_shader_ext(): string { ///end } -function sys_get_shader(name: string): shader_t { - let shader: shader_t = map_get(_sys_shaders, name); +function sys_get_shader(name: string): kinc_g5_shader_t { + let shader: kinc_g5_shader_t = map_get(_sys_shaders, name); if (shader == null) { - shader = g4_shader_create( + shader = iron_g4_create_shader( iron_load_blob(data_path() + name + sys_shader_ext()), ends_with(name, ".frag") ? shader_type_t.FRAGMENT : shader_type_t.VERTEX ); diff --git a/base/sources/ts/line_draw.ts b/base/sources/ts/line_draw.ts index f4599ff3..a998171e 100644 --- a/base/sources/ts/line_draw.ts +++ b/base/sources/ts/line_draw.ts @@ -53,7 +53,7 @@ function line_draw_init() { line_draw_pipeline.color_attachments[0] = tex_format_t.RGBA64; line_draw_pipeline.color_attachments[1] = tex_format_t.RGBA64; line_draw_pipeline.color_attachments[2] = tex_format_t.RGBA64; - line_draw_pipeline.depth_attachment = depth_format_t.DEPTH24; + line_draw_pipeline.depth_attachment_bits = 24; g4_pipeline_compile(line_draw_pipeline); line_draw_color_loc = g4_pipeline_get_const_loc(line_draw_pipeline, "color"); line_draw_vp_loc = g4_pipeline_get_const_loc(line_draw_pipeline, "VP"); diff --git a/base/sources/ts/util_render.ts b/base/sources/ts/util_render.ts index f0ec8e84..6fe04e59 100644 --- a/base/sources/ts/util_render.ts +++ b/base/sources/ts/util_render.ts @@ -169,8 +169,7 @@ function util_render_make_text_preview() { } g2_begin(context_raw.text_tool_image); g4_clear(0xff000000); - g2_set_font(font); - g2_set_font_size(font_size); + g2_set_font(font, font_size); draw_set_color(0xffffffff); draw_string(text, tex_w / 2 - text_w / 2, tex_w / 2 - text_h / 2); g2_end(); @@ -194,8 +193,7 @@ function util_render_make_font_preview() { } g2_begin(context_raw.font.image); g4_clear(0x00000000); - g2_set_font(font); - g2_set_font_size(font_size); + g2_set_font(font, font_size); draw_set_color(0xffffffff); draw_string(text, tex_w / 2 - text_w / 2, tex_w / 2 - text_h / 2); g2_end();