Blending stuff

This commit is contained in:
2024-10-27 22:00:03 +01:00
parent 36375c2d15
commit a3e5cf7e4a
8 changed files with 579 additions and 357 deletions

View File

@@ -311,7 +311,7 @@ d3d_compile :: (shader: string, source_name: string, pDefines: []string, pInclud
return bytecode, pCode, errors, hr;
}
compile_shader :: (source: string, entry_point: string, shader_model: string, defines: [] string = string.[]) -> string, *ID3DBlob, HRESULT {
compile_shader :: (name: string, source: string, entry_point: string, shader_model: string, defines: [] string = string.[]) -> string, *ID3DBlob, HRESULT {
flags := D3DCOMPILE.ENABLE_STRICTNESS;
#if DEBUG {
@@ -331,7 +331,7 @@ compile_shader :: (source: string, entry_point: string, shader_model: string, de
if FAILED(hr) {
free(bytecode);
if errors print ("Error msg: %\n", errors);
if errors print ("Shader compilation error in shader '%': %\n", name, errors);
return "", null, hr;
}
@@ -568,13 +568,13 @@ get_shader_info_from_blob :: (blob: *ID3DBlob, shader_type: Shader_Type) -> Shad
return shader_info;
}
create_backend_shader_from_source :: (using renderer: *D3D11_Backend, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[]) -> Backend_Shader #must, Shader_Info, bool {
create_backend_shader_from_source :: (using renderer: *D3D11_Backend, name: string, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[]) -> Backend_Shader #must, Shader_Info, bool {
shader_model : string;
if shader_type == .VERTEX shader_model = "vs_4_0";
else shader_model = "ps_4_0";
bytecode, blob, hr := compile_shader(source, entry_point, shader_model, defines);
bytecode, blob, hr := compile_shader(name, source, entry_point, shader_model, defines);
if FAILED(hr) return .{}, .{}, false;
@@ -610,7 +610,7 @@ create_backend_shader :: (using renderer: *D3D11_Backend, path: string, entry_po
if !content return .{}, .{}, false;
defer free(content);
shader, info, success := create_backend_shader_from_source(renderer, content, entry_point, shader_type, defines);
shader, info, success := create_backend_shader_from_source(renderer, path, content, entry_point, shader_type, defines);
return shader, info, success;
}
@@ -620,18 +620,18 @@ reload_backend_shader :: (using renderer: *D3D11_Backend, path: string, entry_po
if !content return .{}, false;
defer free(content);
shader, success := reload_backend_shader_from_source(renderer, content, entry_point, shader_type, defines);
shader, success := reload_backend_shader_from_source(renderer, path, content, entry_point, shader_type, defines);
return shader, success;
}
reload_backend_shader_from_source :: (using renderer: *D3D11_Backend, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[]) -> Backend_Shader #must, bool {
reload_backend_shader_from_source :: (using renderer: *D3D11_Backend, name: string, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[]) -> Backend_Shader #must, bool {
shader_model : string;
if shader_type == .VERTEX shader_model = "vs_4_0";
else shader_model = "ps_4_0";
bytecode, blob, hr := compile_shader(source, entry_point, shader_model, defines);
bytecode, blob, hr := compile_shader(name, source, entry_point, shader_model, defines);
if FAILED(hr) return .{}, false;
@@ -676,11 +676,12 @@ create_backend_blend_state :: (using renderer: *D3D11_Backend, type: Blend_Type)
rtbd.DestBlend = .D3D11_BLEND_INV_SRC_ALPHA;
rtbd.BlendOp = .D3D11_BLEND_OP_ADD;
rtbd.SrcBlendAlpha = .D3D11_BLEND_ONE;
rtbd.DestBlendAlpha = .D3D11_BLEND_ZERO;
rtbd.BlendOpAlpha = .D3D11_BLEND_OP_ADD;
rtbd.DestBlendAlpha = .D3D11_BLEND_DEST_ALPHA;
rtbd.BlendOpAlpha = .D3D11_BLEND_OP_MAX;
rtbd.RenderTargetWriteMask = xx D3D11_COLOR_WRITE_ENABLE.ALL;
blend_desc.AlphaToCoverageEnable = .FALSE;
blend_desc.IndependentBlendEnable = .FALSE;
blend_desc.RenderTarget[0] = rtbd;
success := !FAILED(ID3D11Device_CreateBlendState(d3d_device, *blend_desc, *blend_state));
@@ -1314,11 +1315,6 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) {
case .OPAQUE;
ID3D11DeviceContext_OMSetBlendState(d3d_context, null, null, 0xffffffff);
case .TRANSPARENT;
blend_factor : [4]float;
blend_factor[0] = 0.0;
blend_factor[1] = 0.0;
blend_factor[2] = 0.0;
blend_factor[3] = 0.0;
ID3D11DeviceContext_OMSetBlendState(d3d_context, it.set_pipeline_state.blend_state, null, 0xffffffff);
}
case .SET_VERTEX_BUFFER;