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?