indexbuffer.monkey2 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. Namespace mojo.graphics
  2. #rem monkeydoc @hidden
  3. #end
  4. Class IndexBuffer
  5. Method New( capacity:Int )
  6. _capacity=capacity
  7. _data=New UShort[_capacity]
  8. End
  9. Property Capacity:Int()
  10. Return _capacity
  11. End
  12. Property Length:Int()
  13. Return _length
  14. End
  15. Property Pitch:Int()
  16. Return 2
  17. End
  18. Method Clear()
  19. _length=0
  20. _clean=0
  21. End
  22. Method AddIndices:UShort Ptr( count:Int )
  23. If _length+count>_capacity Return Null
  24. Local p:=_data.Data+_length
  25. _length+=count
  26. Return p
  27. End
  28. '***** INTERNAL *****
  29. Method Bind()
  30. If _seq<>glGraphicsSeq
  31. _seq=glGraphicsSeq
  32. _clean=0
  33. glGenBuffers( 1,Varptr _glvbo )
  34. glBindBuffer( GL_ELEMENT_ARRAY_BUFFER,_glvbo )
  35. glBufferData( GL_ELEMENT_ARRAY_BUFFER,_capacity * Pitch,Null,GL_STATIC_DRAW )
  36. Else
  37. glBindBuffer( GL_ELEMENT_ARRAY_BUFFER,_glvbo )
  38. Endif
  39. End
  40. Method Validate()
  41. If _clean=_length Return
  42. _clean=_length
  43. 'mythical 'orphaning'...
  44. ' glBufferData( GL_ELEMENT_ARRAY_BUFFER,_capacity * Pitch,Null,GL_STATIC_DRAW )
  45. ' glBufferSubData( GL_ELEMENT_ARRAY_BUFFER,0,_length*Pitch,_data.Data )
  46. 'lazy - but fastest?
  47. glBufferData( GL_ELEMENT_ARRAY_BUFFER,_length*Pitch,_data.Data,GL_STATIC_DRAW )
  48. End
  49. Private
  50. Field _capacity:Int
  51. Field _length:Int
  52. Field _clean:Int
  53. Field _data:UShort[]
  54. Field _glvbo:GLuint
  55. Field _seq:Int
  56. End