C# openGL(C)中设置统一参数的通用解决方案

C# openGL(C)中设置统一参数的通用解决方案,c#,opengl,generics,opentk,C#,Opengl,Generics,Opentk,我希望有一个通过openTK向着色器添加参数的通用解决方案。OpenTK为不同类型的参数float、int、double。。。穿制服。现在在我的程序中,我想做一些类似ShaderParamstring名称、params T[]值的事情。不幸的是,我有两个问题。我没有看到存储ShaderParam对象的好解决方案,我也不确定将其转换为openTK接口的最优雅的解决方案是什么。我不喜欢使用switchtypeofT,有没有更通用的方法呢?OpenTK-api将OpenGL-api封装在c中,不处理重

我希望有一个通过openTK向着色器添加参数的通用解决方案。OpenTK为不同类型的参数float、int、double。。。穿制服。现在在我的程序中,我想做一些类似ShaderParamstring名称、params T[]值的事情。不幸的是,我有两个问题。我没有看到存储ShaderParam对象的好解决方案,我也不确定将其转换为openTK接口的最优雅的解决方案是什么。我不喜欢使用switchtypeofT,有没有更通用的方法呢?

OpenTK-api将OpenGL-api封装在c中,不处理重载。现在,它剥离OpenGLTYPE并创建重载

编辑:特别适合菲德勒

重载是指声明指向不同入口点的相同函数名,例如:

[AutoGenerated(Category = "ARB_shader_objects", Version = "", EntryPoint = "glUniform1ivARB")]
[CLSCompliant(false)]
public static void Uniform1(Int32 location, Int32 count, Int32[] value);

[AutoGenerated(Category = "ARB_shader_objects", Version = "", EntryPoint = "glUniform1fvARB")]
[CLSCompliant(false)]
public static unsafe void Uniform1(Int32 location, Int32 count, Single* value);

最优雅的方法是改进包装生成器,剥离统一函数的数组和矩阵限定符。

OpenGL规范为每种统一类型提供了:glUniform[1234][fui][v]。实际上,这意味着SwitchTypeSoft是由OpenGL的基本设计强制要求的


然而,一切都没有失去!OpenGL 3.1及更高版本包括允许您使用GL.BufferData或GL.MapBuffer上载制服的。如果您能够接受OpenGL 3.1+的要求,UBOs将带来更干净、更快的代码。

,这是由通用传感器强制执行的,您在我的回答中看到了泛型类型的参考吗?你在哪里看到了?我试图回答最初的问题,其中明确提到了泛型:我希望有一个通过openTK向着色器添加参数的泛型解决方案。请保持建设性,尽量保持话题。好吧,我可能有点生气,对不起。但也要有建设性,用函数替换重载。@Fiddler:我没有提到泛型类型,我说的是扩展实际的gl函数重载,它仅限于gl类型]。原始问题明确询问泛型,而不是重载:ShaderParamstring名称,params T[]值。通过泛型上传制服的唯一方法是UBOs——任何重载都不会改变这一事实。