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?