0 people like it.

GLTools

  1: 
  2: 
  3: 
  4: 
  5: 
  6: 
  7: 
  8: 
  9: 
 10: 
 11: 
 12: 
 13: 
 14: 
 15: 
 16: 
 17: 
 18: 
 19: 
 20: 
 21: 
 22: 
 23: 
 24: 
 25: 
 26: 
 27: 
 28: 
 29: 
 30: 
 31: 
 32: 
 33: 
 34: 
 35: 
 36: 
 37: 
 38: 
 39: 
 40: 
 41: 
 42: 
 43: 
 44: 
 45: 
 46: 
 47: 
 48: 
 49: 
 50: 
 51: 
 52: 
 53: 
 54: 
 55: 
 56: 
 57: 
 58: 
 59: 
 60: 
 61: 
 62: 
 63: 
 64: 
 65: 
 66: 
 67: 
 68: 
 69: 
 70: 
 71: 
 72: 
 73: 
 74: 
 75: 
 76: 
 77: 
 78: 
 79: 
 80: 
 81: 
 82: 
 83: 
 84: 
 85: 
 86: 
 87: 
 88: 
 89: 
 90: 
 91: 
 92: 
 93: 
 94: 
 95: 
 96: 
 97: 
 98: 
 99: 
100: 
101: 
102: 
103: 
104: 
105: 
106: 
107: 
108: 
109: 
110: 
111: 
112: 
113: 
114: 
115: 
116: 
117: 
118: 
119: 
120: 
121: 
122: 
123: 
124: 
125: 
126: 
127: 
128: 
129: 
130: 
131: 
132: 
133: 
134: 
135: 
136: 
137: 
138: 
139: 
140: 
141: 
142: 
143: 
144: 
145: 
146: 
147: 
148: 
149: 
150: 
151: 
152: 
153: 
154: 
155: 
156: 
157: 
158: 
159: 
160: 
161: 
162: 
163: 
164: 
165: 
166: 
167: 
168: 
169: 
170: 
171: 
172: 
173: 
174: 
175: 
176: 
177: 
178: 
179: 
180: 
181: 
182: 
183: 
184: 
185: 
186: 
187: 
188: 
189: 
190: 
191: 
192: 
193: 
194: 
195: 
196: 
197: 
198: 
199: 
200: 
201: 
202: 
203: 
204: 
205: 
206: 
207: 
208: 
209: 
210: 
211: 
212: 
213: 
214: 
215: 
216: 
217: 
218: 
219: 
220: 
221: 
222: 
223: 
224: 
225: 
226: 
227: 
228: 
229: 
230: 
231: 
232: 
233: 
234: 
235: 
236: 
237: 
238: 
239: 
240: 
241: 
242: 
243: 
244: 
245: 
246: 
247: 
248: 
249: 
250: 
251: 
252: 
253: 
254: 
255: 
256: 
257: 
258: 
259: 
260: 
261: 
262: 
263: 
264: 
265: 
266: 
267: 
268: 
269: 
module Varak.UI.GLTools

// Tools for rendering via OpenGL.
// Disposable types in this module must be disposed manually.
// Functions: checkGLError
// Types: GLHandle, Shader, Texture, TextureID, TexArray, IndexArray, RectRenderer, RenderWindow

open Varak
open System
open System.Drawing
open OpenTK
open OpenTK.Graphics
open OpenTK.Graphics.OpenGL4



/// Fails and logs if there is an OpenGL error, including the error itself and the string passed.
let checkGLError where =
    let error = GL.GetError()
    if error <> ErrorCode.NoError then
        let msg = "OGL Error at " + where + ": " + error.ToString()
        IO.File.WriteAllText("zz_OGLERROR.txt", msg)
        failwith msg



/// Manages an OpenGL handle. The !! operator and the GLID member return the raw ID.
type GLHandle (ownerType, glid : int, deleter) =
    let mutable glid = Some(glid)

    member this.GLID =
        match glid with
        | Some(id) -> id
        | None -> failwith ("Tried to access disposed GLHandle created by " + ownerType.ToString())

    interface IDisposable with
        member this.Dispose () =
            glid |> Option.iter (fun i ->
                deleter i
                GC.SuppressFinalize(this)
                glid <- None)
    override this.Finalize () =
        failwith ("GLHandle created by " + ownerType.ToString() + " was not disposed properly.")

    static member (!!) (handle : GLHandle) = handle.GLID



/// GLSL shader routine as a disposable object.
type Shader (shaderType : ShaderType, source : string) as shader =
    inherit GLHandle(typeof<Shader>, GL.CreateShader(shaderType), GL.DeleteShader)
    do
        GL.ShaderSource(!!shader, source)
        GL.CompileShader(!!shader)
        if GL.GetShader(!!shader, ShaderParameter.CompileStatus) = 0 then
            failwith (shaderType.ToString() + " compilation error. Output: " + GL.GetShaderInfoLog(!!shader))
        checkGLError "MShader"



/// A single OpenGL texture
type Texture private (glid_in) =
    inherit GLHandle(typeof<Texture>, glid_in, GL.DeleteTexture)

    /// Factory that takes a Drawing.Bitmap, assuming premultiplied alpha for mipmap generation via OpenGL.
    static member FromBitmapPA (bmp : Bitmap) =
        let id = GL.GenTexture()
        GL.BindTexture(TextureTarget.Texture2D, id)
        // The following Imaging.PixelFormat is probably a lie.
        let bmpData = bmp.LockBits(Rectangle(0, 0, bmp.Width, bmp.Height),
                                   Imaging.ImageLockMode.ReadOnly, Imaging.PixelFormat.Format32bppArgb)
        GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, bmp.Width, bmp.Height,
                      0, PixelFormat.Bgra, PixelType.UnsignedByte, bmpData.Scan0)
        bmp.UnlockBits(bmpData)

        // Enable and generate mipmaps
        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, int TextureMinFilter.LinearMipmapLinear)
        GL.GenerateMipmap(GenerateMipmapTarget.Texture2D)

        GL.BindTexture(TextureTarget.Texture2D, 0)
        checkGLError "Texture.FromBitmapPA"
        new Texture(id)

    /// Shorthand to load file and call FromBitmapPA
    static member FromFilePA (s : string) = new Bitmap(s) |> Texture.FromBitmapPA



/// A texture in a texture array, identified by its index.
type [<Struct>] TextureID (index : uint8) =
    member t.Index = index



/// An OpenGL array of identically sized textures.
type TexArray private (glid_in : int) =
    inherit GLHandle(typeof<TexArray>, glid_in, GL.DeleteTexture)

    /// Factory that takes a Bitmap array, assuming premultiplied alpha for mipmap generation via OpenGL.
    static member FromBitmapsPA (bmps : Bitmap list) =
        if bmps.IsEmpty then failwith "Empty texture arrays are currently not supported." else

        let w, h = bmps.Head.Width, bmps.Head.Height
        let id = GL.GenTexture()
        GL.BindTexture(TextureTarget.Texture2DArray, id)
        GL.TexStorage3D(TextureTarget3d.Texture2DArray, Config.mipmapLevels, SizedInternalFormat.Rgba8, w, h, bmps.Length)

        bmps |> List.iteri (fun i bmp ->
            if bmp.Width <> w || bmp.Height <> h then
                failwith "Bitmap size for texture array generation must not vary."
            // The following Imaging.PixelFormat is probably a lie.
            let bmpData = bmp.LockBits(Rectangle(0, 0, bmp.Width, bmp.Height),
                                       Imaging.ImageLockMode.ReadOnly, Imaging.PixelFormat.Format32bppArgb)
            GL.TexSubImage3D(TextureTarget.Texture2DArray, 0, 0, 0, i, w, h, 1,
                             PixelFormat.Bgra, PixelType.UnsignedByte, bmpData.Scan0)
            bmp.UnlockBits(bmpData)
            )

        // Enable and generate mipmaps
        GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureMinFilter, int TextureMinFilter.LinearMipmapLinear)
        GL.GenerateMipmap(GenerateMipmapTarget.Texture2DArray)

        GL.BindTexture(TextureTarget.Texture2DArray, 0)
        checkGLError "TexArray.FromBitmapPA"
        new TexArray(id)



/// An immutable buffer to hold vertex indices for rendering, also known as Index Buffer Object (IBO).
type IndexArray (data : int []) =
    let handle = new GLHandle(typeof<IndexArray>, GL.GenBuffer(), GL.DeleteBuffer)
    do
        GL.BindBuffer(BufferTarget.ElementArrayBuffer, !!handle)
        GL.BufferData(BufferTarget.ElementArrayBuffer, nativeint (data.Length * sizeof<int>), data, BufferUsageHint.StaticDraw)
        GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0)
        checkGLError "IndexBuffer init"

    member ia.GLID = !!handle

    interface IDisposable with
        member ia.Dispose () = dispose handle



/// Offers a quick way to render a single rectangle.
type RectRenderer () =
    let vertexShaderSrc =
        """ #version 400
            layout(location = 0) in vec2 pos;
            out vec2 texcoord;
            uniform vec4 texRect;
            uniform vec4 transform;

            void main() {
                vec2 tfPos = (pos * 2. - vec2(1., 1.)) * mat2(transform.xy, transform.zw);
                gl_Position = vec4(tfPos, 0, 1);
                texcoord = texRect.xy * (vec2(1.,1.) - pos) + texRect.zw * pos;
            }
        """

    let fragmentShaderSrc =
        """ #version 400
            in vec2 texcoord;
            out vec4 outColor;
            uniform sampler2D tex;

            void main() {
                outColor = texture(tex, texcoord);
            }
        """

    let programHandle =
        use vs = new Shader(ShaderType.VertexShader,     vertexShaderSrc)
        use fs = new Shader(ShaderType.FragmentShader, fragmentShaderSrc)
        let h = new GLHandle(typeof<RectRenderer>, GL.CreateProgram(), GL.DeleteProgram)
        GL.AttachShader(!!h, vs.GLID)
        GL.AttachShader(!!h, fs.GLID)
        GL.LinkProgram(!!h); checkGLError "SimpleRenderer program creation"
        if (GL.GetProgram(!!h, GetProgramParameterName.LinkStatus) <> 1) then
            failwith "SimpleRenderer shader program failed to link."
        h // MShaders get disposed here, but the shader program retains linked shaders until its deletion.
        
    let unLoc_texRect   = GL.GetUniformLocation(!!programHandle, "texRect")
    let unLoc_transform = GL.GetUniformLocation(!!programHandle, "transform")
        
    let vaoHandle = new GLHandle(typeof<RectRenderer>, GL.GenVertexArray(), GL.DeleteVertexArray)
    let vboHandle = new GLHandle(typeof<RectRenderer>, GL.GenBuffer(), GL.DeleteBuffer)
    let vertices = [| 0; 0; 1; 0; 0; 1; 1; 1 |] |> Array.map float32

    do
        GL.BindVertexArray(!!vaoHandle)
        GL.BindBuffer(BufferTarget.ArrayBuffer, !!vboHandle)
        GL.BufferData(BufferTarget.ArrayBuffer, vertices.Length * sizeof<float32> |> nativeint, vertices, BufferUsageHint.StaticDraw)
        GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, 2 * sizeof<float32>, 0)
        GL.EnableVertexAttribArray(0)
        GL.BindBuffer(BufferTarget.ArrayBuffer, 0)
        GL.BindVertexArray(0)

    /// Renders one rectangle. posTransform is applied to the centered maximum-size rectangle and does not affect texture coords.
    member this.Render (texture : Texture, texArea : Rectangle<1>, posTransform : mat2d<1>) =
        GL.BindVertexArray(!!vaoHandle);    checkGLError "Before RectRenderer.Render"
        GL.UseProgram(!!programHandle)
        let lc, hc = texArea.LowCorner, texArea.HighCorner
        GL.Uniform4(unLoc_texRect, lc.x, lc.y, hc.x, hc.y)
        GL.Uniform4(unLoc_transform, posTransform.c11, posTransform.c21, posTransform.c12, posTransform.c22)
        GL.BindTexture(TextureTarget.Texture2D, !!texture)
        GL.DrawArrays(PrimitiveType.TriangleStrip, 0, 4)
        GL.BindTexture(TextureTarget.Texture2D, 0)
        GL.UseProgram(0)
        GL.BindVertexArray(0);              checkGLError "After RectRenderer.Render"
    
    interface IDisposable with
        member this.Dispose () =
            dispose programHandle
            dispose vaoHandle
            dispose vboHandle



/// Manages the OpenGL context and executes the main rendering call. The initializer function is called after
/// OpenGL is set up, but before rendering begins and sets the initial ViewPartition. Derived from the OpenTK GameWindow.
type RenderWindow (initializer, width, height) =
    inherit GameWindow(width, height, GraphicsMode(ColorFormat(32), 0, 0, 4), "ProtoClient running OTK 1.1",
                       GameWindowFlags.Default, DisplayDevice.Default, 4, 0, GraphicsContextFlags.Default)

    let emptyView = {new IView with member v.Render _ = ()}
    member val Partition = ViewArea emptyView with get, set

    new (init) = new RenderWindow(init, 1280, 720)

    override this.OnLoad e =
        checkGLError "Before OnLoad"
        this.VSync <- VSyncMode.Adaptive
        GL.DepthFunc(DepthFunction.Lequal)
        GL.Enable(EnableCap.Blend)
        GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha) // Premultiplied
        GL.ClearColor(Color.Black)
        checkGLError "RenderWindow.OnLoad"
        this.Partition <- initializer this
        checkGLError "RenderWindow.OnLoad initializer call"

    /// <summary>
    /// Called when it is time to render the next frame.
    /// </summary>
    /// <param name="e">Contains timing information.</param>
    override this.OnRenderFrame e =
        checkGLError "Before OnRenderFrame"
        base.OnRenderFrame e
        GL.Clear(ClearBufferMask.ColorBufferBit ||| ClearBufferMask.DepthBufferBit)
        checkGLError "RenderWindow.OnRenderFrame GL.Clear"
        
        let screen = Rect.centered(2., 2.)
        let screenPx = vec2(this.ClientRectangle.Width, this.ClientRectangle.Height)
        let sglPerPx = Config.minScreenEdge / float (min screenPx.x screenPx.y)
        let screenSgl = Vec.d1 screenPx * sglPerPx
        let toPxCoords (v : vec2d<1>) =
            vec2((v.x / 2. + 0.5) * float screenPx.x, (v.y / 2. + 0.5) * float screenPx.y) |> Vec.ir

        for rect, view in this.Partition.Visibles screen do
            match Rect.intersection rect screen with
            | None -> ()
            | Some drawArea ->
                let corner = toPxCoords drawArea.LowCorner
                let sizePx = toPxCoords drawArea.HighCorner - corner
                GL.Viewport(corner.x, corner.y, sizePx.x, sizePx.y); checkGLError "OnRenderFrame GL.Viewport"
                view.Render(drawArea.Diagonal /> 2. .* screenSgl |> Vec.f)

        this.SwapBuffers()
        checkGLError "OnRenderFrame end"
namespace Varak
namespace Varak.UI
module GLTools

from Varak.UI
namespace System
namespace System.Drawing
type Graphics =
  inherit MarshalByRefObject
  member AddMetafileComment : data:byte[] -> unit
  member BeginContainer : unit -> GraphicsContainer + 2 overloads
  member Clear : color:Color -> unit
  member Clip : Region with get, set
  member ClipBounds : RectangleF
  member CompositingMode : CompositingMode with get, set
  member CompositingQuality : CompositingQuality with get, set
  member CopyFromScreen : upperLeftSource:Point * upperLeftDestination:Point * blockRegionSize:Size -> unit + 3 overloads
  member Dispose : unit -> unit
  member DpiX : float32
  ...
  nested type DrawImageAbort
  nested type EnumerateMetafileProc

Full name: System.Drawing.Graphics
val checkGLError : where:string -> unit

Full name: Varak.UI.GLTools.checkGLError


 Fails and logs if there is an OpenGL error, including the error itself and the string passed.
val where : string
val error : obj
val msg : string
Object.ToString() : string
namespace System.IO
type File =
  static member AppendAllLines : path:string * contents:IEnumerable<string> -> unit + 1 overload
  static member AppendAllText : path:string * contents:string -> unit + 1 overload
  static member AppendText : path:string -> StreamWriter
  static member Copy : sourceFileName:string * destFileName:string -> unit + 1 overload
  static member Create : path:string -> FileStream + 3 overloads
  static member CreateText : path:string -> StreamWriter
  static member Decrypt : path:string -> unit
  static member Delete : path:string -> unit
  static member Encrypt : path:string -> unit
  static member Exists : path:string -> bool
  ...

Full name: System.IO.File
IO.File.WriteAllText(path: string, contents: string) : unit
IO.File.WriteAllText(path: string, contents: string, encoding: Text.Encoding) : unit
val failwith : message:string -> 'T

Full name: Microsoft.FSharp.Core.Operators.failwith
Multiple items
type GLHandle =
  interface IDisposable
  new : ownerType:Type * glid:int * deleter:(int -> unit) -> GLHandle
  override Finalize : unit -> unit
  member GLID : int
  static member ( !! ) : handle:GLHandle -> int

Full name: Varak.UI.GLTools.GLHandle


 Manages an OpenGL handle. The !! operator and the GLID member return the raw ID.


--------------------
new : ownerType:Type * glid:int * deleter:(int -> unit) -> GLHandle
val ownerType : Type
val glid : int
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>
val deleter : (int -> unit)
val mutable glid : int option
union case Option.Some: Value: 'T -> Option<'T>
val this : GLHandle
member GLHandle.GLID : int

Full name: Varak.UI.GLTools.GLHandle.GLID
val id : int
union case Option.None: Option<'T>
Type.ToString() : string
type IDisposable =
  member Dispose : unit -> unit

Full name: System.IDisposable
override GLHandle.Dispose : unit -> unit

Full name: Varak.UI.GLTools.GLHandle.Dispose
module Option

from Microsoft.FSharp.Core
val iter : action:('T -> unit) -> option:'T option -> unit

Full name: Microsoft.FSharp.Core.Option.iter
val i : int
type GC =
  static member AddMemoryPressure : bytesAllocated:int64 -> unit
  static member CancelFullGCNotification : unit -> unit
  static member Collect : unit -> unit + 2 overloads
  static member CollectionCount : generation:int -> int
  static member GetGeneration : obj:obj -> int + 1 overload
  static member GetTotalMemory : forceFullCollection:bool -> int64
  static member KeepAlive : obj:obj -> unit
  static member MaxGeneration : int
  static member ReRegisterForFinalize : obj:obj -> unit
  static member RegisterForFullGCNotification : maxGenerationThreshold:int * largeObjectHeapThreshold:int -> unit
  ...

Full name: System.GC
GC.SuppressFinalize(obj: obj) : unit
override GLHandle.Finalize : unit -> unit

Full name: Varak.UI.GLTools.GLHandle.Finalize
val handle : GLHandle
property GLHandle.GLID: int
Multiple items
type Shader =
  inherit GLHandle
  new : shaderType:obj * source:string -> Shader

Full name: Varak.UI.GLTools.Shader


 GLSL shader routine as a disposable object.


--------------------
new : shaderType:obj * source:string -> Shader
val shaderType : obj
val source : string
Multiple items
val string : value:'T -> string

Full name: Microsoft.FSharp.Core.Operators.string

--------------------
type string = String

Full name: Microsoft.FSharp.Core.string
val shader : Shader
val typeof<'T> : Type

Full name: Microsoft.FSharp.Core.Operators.typeof
Multiple items
type Texture =
  inherit GLHandle
  private new : glid_in:int -> Texture
  static member FromBitmapPA : bmp:Bitmap -> Texture
  static member FromFilePA : s:string -> Texture

Full name: Varak.UI.GLTools.Texture


 A single OpenGL texture


--------------------
private new : glid_in:int -> Texture
val glid_in : int
static member Texture.FromBitmapPA : bmp:Bitmap -> Texture

Full name: Varak.UI.GLTools.Texture.FromBitmapPA


 Factory that takes a Drawing.Bitmap, assuming premultiplied alpha for mipmap generation via OpenGL.
val bmp : Bitmap
Multiple items
type Bitmap =
  inherit Image
  new : filename:string -> Bitmap + 11 overloads
  member Clone : rect:Rectangle * format:PixelFormat -> Bitmap + 1 overload
  member GetHbitmap : unit -> nativeint + 1 overload
  member GetHicon : unit -> nativeint
  member GetPixel : x:int * y:int -> Color
  member LockBits : rect:Rectangle * flags:ImageLockMode * format:PixelFormat -> BitmapData + 1 overload
  member MakeTransparent : unit -> unit + 1 overload
  member SetPixel : x:int * y:int * color:Color -> unit
  member SetResolution : xDpi:float32 * yDpi:float32 -> unit
  member UnlockBits : bitmapdata:BitmapData -> unit
  ...

Full name: System.Drawing.Bitmap

--------------------
Bitmap(filename: string) : unit
   (+0 other overloads)
Bitmap(stream: IO.Stream) : unit
   (+0 other overloads)
Bitmap(original: Image) : unit
   (+0 other overloads)
Bitmap(filename: string, useIcm: bool) : unit
   (+0 other overloads)
Bitmap(type: Type, resource: string) : unit
   (+0 other overloads)
Bitmap(stream: IO.Stream, useIcm: bool) : unit
   (+0 other overloads)
Bitmap(width: int, height: int) : unit
   (+0 other overloads)
Bitmap(original: Image, newSize: Size) : unit
   (+0 other overloads)
Bitmap(width: int, height: int, format: Imaging.PixelFormat) : unit
   (+0 other overloads)
Bitmap(width: int, height: int, g: Graphics) : unit
   (+0 other overloads)
val bmpData : Imaging.BitmapData
Bitmap.LockBits(rect: Rectangle, flags: Imaging.ImageLockMode, format: Imaging.PixelFormat) : Imaging.BitmapData
Bitmap.LockBits(rect: Rectangle, flags: Imaging.ImageLockMode, format: Imaging.PixelFormat, bitmapData: Imaging.BitmapData) : Imaging.BitmapData
Multiple items
type Rectangle =
  struct
    new : location:Point * size:Size -> Rectangle + 1 overload
    member Bottom : int
    member Contains : pt:Point -> bool + 2 overloads
    member Equals : obj:obj -> bool
    member GetHashCode : unit -> int
    member Height : int with get, set
    member Inflate : size:Size -> unit + 1 overload
    member Intersect : rect:Rectangle -> unit
    member IntersectsWith : rect:Rectangle -> bool
    member IsEmpty : bool
    ...
  end

Full name: System.Drawing.Rectangle

--------------------
Rectangle()
Rectangle(location: Point, size: Size) : unit
Rectangle(x: int, y: int, width: int, height: int) : unit
property Image.Width: int
property Image.Height: int
namespace System.Drawing.Imaging
type ImageLockMode =
  | ReadOnly = 1
  | WriteOnly = 2
  | ReadWrite = 3
  | UserInputBuffer = 4

Full name: System.Drawing.Imaging.ImageLockMode
field Imaging.ImageLockMode.ReadOnly = 1
type PixelFormat =
  | Indexed = 65536
  | Gdi = 131072
  | Alpha = 262144
  | PAlpha = 524288
  | Extended = 1048576
  | Canonical = 2097152
  | Undefined = 0
  | DontCare = 0
  | Format1bppIndexed = 196865
  | Format4bppIndexed = 197634
  ...

Full name: System.Drawing.Imaging.PixelFormat
field Imaging.PixelFormat.Format32bppArgb = 2498570
property Imaging.BitmapData.Scan0: nativeint
Bitmap.UnlockBits(bitmapdata: Imaging.BitmapData) : unit
static member Texture.FromFilePA : s:string -> Texture

Full name: Varak.UI.GLTools.Texture.FromFilePA


 Shorthand to load file and call FromBitmapPA
val s : string
static member Texture.FromBitmapPA : bmp:Bitmap -> Texture


 Factory that takes a Drawing.Bitmap, assuming premultiplied alpha for mipmap generation via OpenGL.
Multiple items
type StructAttribute =
  inherit Attribute
  new : unit -> StructAttribute

Full name: Microsoft.FSharp.Core.StructAttribute

--------------------
new : unit -> StructAttribute
Multiple items
type TextureID =
  struct
    new : index:uint8 -> TextureID
    member Index : uint8
  end

Full name: Varak.UI.GLTools.TextureID


 A texture in a texture array, identified by its index.


--------------------
TextureID()
new : index:uint8 -> TextureID
val index : uint8
Multiple items
val uint8 : value:'T -> byte (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.uint8

--------------------
type uint8 = Byte

Full name: Microsoft.FSharp.Core.uint8
val t : byref<TextureID>
member TextureID.Index : uint8

Full name: Varak.UI.GLTools.TextureID.Index
Multiple items
type TexArray =
  inherit GLHandle
  private new : glid_in:int -> TexArray
  static member FromBitmapsPA : bmps:Bitmap list -> TexArray

Full name: Varak.UI.GLTools.TexArray


 An OpenGL array of identically sized textures.


--------------------
private new : glid_in:int -> TexArray
static member TexArray.FromBitmapsPA : bmps:Bitmap list -> TexArray

Full name: Varak.UI.GLTools.TexArray.FromBitmapsPA


 Factory that takes a Bitmap array, assuming premultiplied alpha for mipmap generation via OpenGL.
val bmps : Bitmap list
type 'T list = List<'T>

Full name: Microsoft.FSharp.Collections.list<_>
property List.IsEmpty: bool
val w : int
val h : int
property List.Head: Bitmap
property List.Length: int
Multiple items
module List

from Microsoft.FSharp.Collections

--------------------
type List<'T> =
  | ( [] )
  | ( :: ) of Head: 'T * Tail: 'T list
  interface IEnumerable
  interface IEnumerable<'T>
  member Head : 'T
  member IsEmpty : bool
  member Item : index:int -> 'T with get
  member Length : int
  member Tail : 'T list
  static member Cons : head:'T * tail:'T list -> 'T list
  static member Empty : 'T list

Full name: Microsoft.FSharp.Collections.List<_>
val iteri : action:(int -> 'T -> unit) -> list:'T list -> unit

Full name: Microsoft.FSharp.Collections.List.iteri
Multiple items
type IndexArray =
  interface IDisposable
  new : data:int [] -> IndexArray
  member GLID : int

Full name: Varak.UI.GLTools.IndexArray


 An immutable buffer to hold vertex indices for rendering, also known as Index Buffer Object (IBO).


--------------------
new : data:int [] -> IndexArray
val data : int []
Multiple items
val nativeint : value:'T -> nativeint (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.nativeint

--------------------
type nativeint = IntPtr

Full name: Microsoft.FSharp.Core.nativeint
property Array.Length: int
val sizeof<'T> : int

Full name: Microsoft.FSharp.Core.Operators.sizeof
val ia : IndexArray
member IndexArray.GLID : int

Full name: Varak.UI.GLTools.IndexArray.GLID
override IndexArray.Dispose : unit -> unit

Full name: Varak.UI.GLTools.IndexArray.Dispose
Multiple items
type RectRenderer =
  interface IDisposable
  new : unit -> RectRenderer
  member Render : texture:Texture * texArea:'a * posTransform:'b -> unit

Full name: Varak.UI.GLTools.RectRenderer


 Offers a quick way to render a single rectangle.


--------------------
new : unit -> RectRenderer
val vertexShaderSrc : string
val fragmentShaderSrc : string
val programHandle : GLHandle
val vs : Shader
val fs : Shader
val h : GLHandle
val unLoc_texRect : obj
val unLoc_transform : obj
val vaoHandle : GLHandle
val vboHandle : GLHandle
val vertices : float32 []
type Array =
  member Clone : unit -> obj
  member CopyTo : array:Array * index:int -> unit + 1 overload
  member GetEnumerator : unit -> IEnumerator
  member GetLength : dimension:int -> int
  member GetLongLength : dimension:int -> int64
  member GetLowerBound : dimension:int -> int
  member GetUpperBound : dimension:int -> int
  member GetValue : [<ParamArray>] indices:int[] -> obj + 7 overloads
  member Initialize : unit -> unit
  member IsFixedSize : bool
  ...

Full name: System.Array
val map : mapping:('T -> 'U) -> array:'T [] -> 'U []

Full name: Microsoft.FSharp.Collections.Array.map
Multiple items
val float32 : value:'T -> float32 (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.float32

--------------------
type float32 = Single

Full name: Microsoft.FSharp.Core.float32

--------------------
type float32<'Measure> = float32

Full name: Microsoft.FSharp.Core.float32<_>
val this : RectRenderer
member RectRenderer.Render : texture:Texture * texArea:'a * posTransform:'b -> unit

Full name: Varak.UI.GLTools.RectRenderer.Render


 Renders one rectangle. posTransform is applied to the centered maximum-size rectangle and does not affect texture coords.
val texture : Texture
type Texture =
  inherit GLHandle
  private new : glid_in:int -> Texture
  static member FromBitmapPA : bmp:Bitmap -> Texture
  static member FromFilePA : s:string -> Texture

Full name: Varak.UI.GLTools.Texture


 A single OpenGL texture
val texArea : 'a
val posTransform : 'b
val lc : obj
val hc : obj
override RectRenderer.Dispose : unit -> unit

Full name: Varak.UI.GLTools.RectRenderer.Dispose
Multiple items
type RenderWindow =
  inherit obj
  new : init:'a -> RenderWindow
  new : initializer:'a * width:'b * height:'c -> RenderWindow
  override OnLoad : e:'a -> 'b
  override OnRenderFrame : e:'a -> 'b
  member Partition : 'a
  member Partition : 'a with set

Full name: Varak.UI.GLTools.RenderWindow


 Manages the OpenGL context and executes the main rendering call. The initializer function is called after
 OpenGL is set up, but before rendering begins and sets the initial ViewPartition. Derived from the OpenTK GameWindow.


--------------------
new : init:'a -> RenderWindow
new : initializer:'a * width:'b * height:'c -> RenderWindow
val initializer : 'a
val width : 'a
val height : 'a
member RenderWindow.Partition : 'a with set

Full name: Varak.UI.GLTools.RenderWindow.Partition
val set : elements:seq<'T> -> Set<'T> (requires comparison)

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.set
override RenderWindow.OnLoad : e:'a -> 'b

Full name: Varak.UI.GLTools.RenderWindow.OnLoad
type Color =
  struct
    member A : byte
    member B : byte
    member Equals : obj:obj -> bool
    member G : byte
    member GetBrightness : unit -> float32
    member GetHashCode : unit -> int
    member GetHue : unit -> float32
    member GetSaturation : unit -> float32
    member IsEmpty : bool
    member IsKnownColor : bool
    ...
  end

Full name: System.Drawing.Color
property Color.Black: Color
override RenderWindow.OnRenderFrame : e:'a -> 'b

Full name: Varak.UI.GLTools.RenderWindow.OnRenderFrame


 <summary>
 Called when it is time to render the next frame.
 </summary>
 <param name="e">Contains timing information.</param>
Multiple items
val float : value:'T -> float (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.float

--------------------
type float = Double

Full name: Microsoft.FSharp.Core.float

--------------------
type float<'Measure> = float

Full name: Microsoft.FSharp.Core.float<_>
val min : e1:'T -> e2:'T -> 'T (requires comparison)

Full name: Microsoft.FSharp.Core.Operators.min
Raw view Test code New version

More information

Link:http://fssnip.net/ni
Posted:11 years ago
Author:
Tags: