1 module armos.graphics.bufferbundle;
2
3 import armos.graphics.vao;
4 import armos.graphics.mesh;
5 import armos.graphics.buffer;
6 import armos.math;
7
8 /++
9 +/
10 class BufferBundle {
11 public{
12 ///
13 this(){
14 _vao = new armos.graphics.Vao;
15 }
16
17 ///
18 ~this(){}
19
20 ///
21 Vao vao(){return _vao;}
22
23 ///
24 auto attr(in string name, Buffer buffer){
25 attrs[name] = buffer;
26 return this;
27 }
28
29 ///
30 auto attr(T)(in string name, T[] vectorArray,
31 in BufferUsageFrequency freq = BufferUsageFrequency.Dynamic,
32 in BufferUsageNature nature = BufferUsageNature.Draw)
33 if(isVector!T){
34 attrs[name].array(vectorArray, freq, nature);
35 return this;
36 }
37
38 ///
39 auto attr(V)(in string name, V[] array, in size_t numDimentions = 1,
40 in BufferUsageFrequency freq = BufferUsageFrequency.Dynamic,
41 in BufferUsageNature nature = BufferUsageNature.Draw)
42 if(__traits(isArithmetic, V)){
43 attrs[name].array(array, numDimentions, freq, nature);
44 return this;
45 }
46
47 ///
48 auto attr(in string name){
49 return attrs[name];
50 }
51
52 // alias attrs this;
53 Buffer[string] attrs;
54
55 ///
56 auto begin(){
57 _vao.begin;
58 return this;
59 }
60
61 ///
62 auto end(){
63 _vao.end;
64 return this;
65 }
66 }//public
67
68 private{
69 Vao _vao;
70 }//private
71 }//class BufferBundle