我正在尝试将TexturedCube
example for monodroid从C#转换为F#并点击此行的C#代码(来自CreateFrameBuffer
类的PaintingView
方法) :
GLContextVersion <- GLContextVersion.Gles1_1
在F#中,我必须明确GLContextVersion
的起源,但我找不到爱情和金钱。例如,如果PaintingView
实现了一个公开此GLContextVersion
属性的接口,那么我相信我必须将this
向上转换为该接口类型才能调用该属性。
根据文档,AndroidGameView
(从中派生PaintingView
)实现此属性,但以下内容因Error FS0039: The field, constructor or member 'GLContextVersion' is not defined (FS0039) (TexturedCube)
而失败:
base.GLContextVersion <- GLContextVersion.Gles1_1
我的F#程序在没有这一行的情况下在我的Nexus 7上运行得很好,但作为一个学究者,我也希望翻译最后一行!
答案 0 :(得分:4)
我刚刚查看了Xamarin中的代码(它有一个非常简洁的汇编浏览器,显示反编译的代码!)。
我认为该属性在OpenTK-1.0中确实不存在(默认情况下在Android OpenGL示例中引用)并且看起来已被ContextRenderingAPI取代(?)。
所以代码可能看起来像
base.ContextRenderingApi <- GLVersion.ES1
查看为C#版本提供的源代码是OpenTK,而不是引用的OpenTK-1.0,因此可能是API更改,而不是C#/ F#问题。
编辑: OpenGL 2.0 Drawing with Monodroid (using OpenTK) 看起来像是同一个问题
答案 1 :(得分:3)
GLContextVersion
可以受到保护吗?
来自F#规范:注意:此版本的F#语言不支持系列和受保护的规范。
你可以用反射来做。
由于F#规范提到您可以在实例化期间使用对象表达式访问受保护的成员。如果使用对象表达式而不是子类进行实例化,它似乎可以工作。使用Windows窗体的示例:
{
new System.Windows.Forms.Form() with
override this.CreateControlsInstance() =
System.Windows.Forms.Control.ControlCollection(this)
}