Merge: doc: fixed some typos and other misc. corrections
[nit.git] / lib / glesv2 / glesv2.nit
index 7b02c8d..c70f631 100644 (file)
@@ -17,8 +17,8 @@
 # OpenGL graphics rendering library for embedded systems, version 2.0
 #
 # This is a low-level wrapper, it can be useful for developers already familiar
-# with the C API of OpenGL. Most developers will prefer to use higher level
-# wrappers such as `mnit` and `gammit`.
+# with the C API of OpenGL. Most developers will prefer to use the higher level
+# graphic API `gammit`.
 #
 # Defines the annotations `glsl_vertex_shader` and `glsl_fragment_shader`
 # applicable on string literals to check shader code using `glslangValidator`.
@@ -31,6 +31,7 @@
 # http://www.khronos.org/opengles/sdk/docs/man/
 module glesv2 is
        pkgconfig
+       no_warning "missing-doc"
        new_annotation glsl_vertex_shader
        new_annotation glsl_fragment_shader
        ldflags("-lGLESv2")@android
@@ -40,7 +41,11 @@ import android::aware
 intrude import c
 
 in "C Header" `{
+#ifdef __APPLE__
+       #include <OpenGLES/ES2/gl.h>
+#else
        #include <GLES2/gl2.h>
+#endif
 `}
 
 # OpenGL ES program to which we attach shaders
@@ -433,12 +438,27 @@ fun glUniform4f(index: Int, x, y, z, w: Float) `{ glUniform4f(index, x, y, z, w)
 
 # Low level array of `Float`
 class GLfloatArray
-       super CArray[Float]
-       redef type NATIVE: NativeGLfloatArray
+       super FinalizableOnce
 
-       redef init(length)
+       var length: Int
+
+       var native_array = new NativeGLfloatArray(length) is lateinit
+
+       fun [](index: Int): Float do return native_array[index]
+
+       fun []=(index: Int, val: Float) do native_array[index] = val
+
+       var add_index = 0
+
+       fun reset_add do add_index = 0
+
+       # Require: `add_index < length`
+       fun add(value: Float)
        do
-               native_array = new NativeGLfloatArray(length)
+               var index = add_index
+               assert index < length
+               native_array[index] = value
+               self.add_index = index + 1
        end
 
        # Create with the content of `array`
@@ -457,26 +477,27 @@ class GLfloatArray
        # Require: `length >= array.length + dst_offset or else 0`
        fun fill_from(array: Array[Float], dst_offset: nullable Int)
        do
-               dst_offset = dst_offset or else 0
+               dst_offset = dst_offset or else add_index
 
                assert length >= array.length + dst_offset
                for k in [0..array.length[ do
                        self[dst_offset+k] = array[k]
                end
        end
+
+       redef fun finalize_once do native_array.free
 end
 
 # An array of `GLfloat` in C (`GLfloat*`)
 extern class NativeGLfloatArray `{ GLfloat* `}
-       super NativeCArray
-       redef type E: Float
 
        new(size: Int) `{ return calloc(size, sizeof(GLfloat)); `}
 
-       redef fun [](index) `{ return self[index]; `}
-       redef fun []=(index, val) `{ self[index] = val; `}
+       fun [](index: Int): Float `{ return self[index]; `}
+
+       fun []=(index: Int, val: Float) `{ self[index] = val; `}
 
-       redef fun +(offset) `{ return self + offset; `}
+       fun +(offset: Int): NativeGLfloatArray `{ return self + offset; `}
 end
 
 # General type for OpenGL enumerations
@@ -1311,7 +1332,13 @@ fun gl_FRAMEBUFFER_BINDING: GLGetParameterName `{ return GL_FRAMEBUFFER_BINDING;
 fun gl_RENDERBUFFER_BINDING: GLGetParameterName `{ return GL_RENDERBUFFER_BINDING; `}
 
 # Return a string describing the current GL configuration
-fun glGetString(name: GLEnum): String do return glGetString_native(name).to_s
+fun glGetString(name: GLEnum): String
+do
+       var cstr = glGetString_native(name)
+       assert not cstr.address_is_null
+       return cstr.to_s
+end
+
 private fun glGetString_native(name: GLEnum): CString `{ return (char*)glGetString(name); `}
 
 # Company responsible for this GL implementation