On 4/28/22 13:40, Ziqing Hui wrote:
+struct d2d_shader +{ + const GUID *id; + void *shader; +}; This could at least use IUnknown, you can probably use a union later to avoid casts.
+ effect_context->shader_count++; + if (effect_context->shaders_size < effect_context->shader_count) + { + if (!d2d_array_reserve((void **)&effect_context->shaders, &effect_context->shaders_size, + effect_context->shader_count, sizeof(*effect_context->shaders))) + { + ERR("Failed to resize shaders array.\n"); + ID3D11VertexShader_Release(vertex_shader); + return E_OUTOFMEMORY; + } + } You should call this to reserve "effect_context->shader_count + 1", no need to check size < count explicitly.
Since this is using GUIDs for keys, I suspect it should check for duplicates? IsShaderLoaded() takes just a GUID, so that implies all shader types are in the same list most likely. By the way, have you figured out how shader objects are used later?