Add initial prototype.
This commit is contained in:
124
3-mid/opengl/source/lean/buffer/opengl-buffer.ads
Normal file
124
3-mid/opengl/source/lean/buffer/opengl-buffer.ads
Normal file
@@ -0,0 +1,124 @@
|
||||
private
|
||||
with
|
||||
GL.lean,
|
||||
ada.unchecked_Conversion;
|
||||
|
||||
package openGL.Buffer
|
||||
--
|
||||
-- Models a buffer object.
|
||||
--
|
||||
is
|
||||
--------------
|
||||
--- Core Types
|
||||
--
|
||||
subtype a_Name is GL.GLuint; -- An openGL vertex buffer 'Name', which is a natural integer.
|
||||
type a_Kind is (array_Buffer, element_array_Buffer);
|
||||
type Usage is (stream_Draw, static_Draw, dynamic_Draw);
|
||||
|
||||
|
||||
-----------------
|
||||
-- Buffer Object
|
||||
--
|
||||
type Object is abstract tagged limited private;
|
||||
type View is access all Object'Class;
|
||||
|
||||
procedure destroy (Self : in out Object'Class);
|
||||
procedure free (Self : in out View);
|
||||
|
||||
|
||||
--------------
|
||||
-- Attributes
|
||||
--
|
||||
|
||||
function Name (Self : in Object) return Buffer.a_Name;
|
||||
function Kind (Self : in Object) return Buffer.a_Kind is abstract;
|
||||
function Length (Self : in Object) return Positive;
|
||||
|
||||
|
||||
--------------
|
||||
-- Operations
|
||||
--
|
||||
|
||||
procedure enable (Self : in Object'Class);
|
||||
|
||||
|
||||
-----------------------------------------------
|
||||
-- Derived 'array' and 'element array' Classes
|
||||
--
|
||||
|
||||
type array_Object is new Object with private;
|
||||
type element_array_Object is new Object with private;
|
||||
|
||||
--
|
||||
-- Refer to child packages, for specific buffers:
|
||||
--
|
||||
-- - gl.Buffer.vertex
|
||||
-- - gl.Buffer.texture_coords
|
||||
-- - gl.Buffer.normals
|
||||
-- - gl.Buffer.indices
|
||||
--
|
||||
-- (TODO: pixel pack/unpack buffers)
|
||||
|
||||
|
||||
----------
|
||||
-- Errors
|
||||
--
|
||||
|
||||
no_platform_Support : exception;
|
||||
--
|
||||
-- Raised by buffer 'Map' functions when OS platform does not
|
||||
-- support GL Buffer objects.
|
||||
|
||||
|
||||
|
||||
private
|
||||
use GL.lean;
|
||||
|
||||
|
||||
-- Buffer Kinds
|
||||
--
|
||||
|
||||
for a_Kind use (array_Buffer => GL_ARRAY_BUFFER,
|
||||
element_array_Buffer => GL_ELEMENT_ARRAY_BUFFER);
|
||||
|
||||
for a_Kind'Size use gl.GLenum'Size;
|
||||
|
||||
function to_GL_Enum is new ada.unchecked_Conversion (a_Kind, gl.GLenum);
|
||||
|
||||
|
||||
-- Usage
|
||||
--
|
||||
for Usage use (stream_Draw => GL_STREAM_DRAW,
|
||||
static_Draw => GL_STATIC_DRAW,
|
||||
dynamic_Draw => GL_DYNAMIC_DRAW);
|
||||
|
||||
for Usage'Size use GL.GLenum'Size;
|
||||
|
||||
function to_GL_Enum is new ada.unchecked_Conversion (Usage, gl.GLenum);
|
||||
|
||||
|
||||
----------
|
||||
-- Object
|
||||
--
|
||||
|
||||
type Object is abstract tagged limited
|
||||
record
|
||||
Name : aliased Buffer.a_Name := 0;
|
||||
Length : Positive;
|
||||
end record;
|
||||
|
||||
overriding
|
||||
function Kind (Self : in array_Object) return Buffer.a_Kind;
|
||||
|
||||
overriding
|
||||
function Kind (Self : in element_array_Object) return Buffer.a_Kind;
|
||||
|
||||
type array_Object is new Object with null record;
|
||||
type element_array_Object is new Object with null record;
|
||||
|
||||
|
||||
-- Support
|
||||
--
|
||||
procedure verify_Name (Self : in out Object'Class);
|
||||
|
||||
end openGL.Buffer;
|
||||
Reference in New Issue
Block a user