Class { #name : #DiyaRendererContext, #superclass : #DiyaSingleton, #instVars : [ 'mouse', 'display', 'vbo', 'vao', 'texture0', 'projection', 'assets', 'window', 'vbuffer', 'voffset' ], #pools : [ 'OpenGLConstants', 'OpenGLTypes' ], #category : #'Diya-Graphics' } { #category : #accessing } DiyaRendererContext class >> bufferSize [ ^ 524288 "512Kb" ] { #category : #'instance creation' } DiyaRendererContext class >> cleanUpInstance: singleton [ singleton ifNil:[^self]. singleton destroy ] { #category : #'instance creation' } DiyaRendererContext class >> maxFloatBufferSize [ ^4096 ] { #category : #accessing } DiyaRendererContext >> assets [ ^ assets ] { #category : #accessing } DiyaRendererContext >> assets: anObject [ assets := anObject ] { #category : #accessing } DiyaRendererContext >> destroy [ self disableGLAttribute: 0. vbuffer free. vao delete. vbo delete. texture0 delete. ] { #category : #registration } DiyaRendererContext >> disableGLAttribute: attribute [ vao disableAttribute: attribute ] { #category : #accessing } DiyaRendererContext >> display [ ^ display ] { #category : #accessing } DiyaRendererContext >> display: anObject [ display := anObject ] { #category : #registration } DiyaRendererContext >> enableGLAttribute: attribute [ vao enableAttribute: attribute. ] { #category : #accessing } DiyaRendererContext >> initialize [ super initialize. vbo := OpenGLVertexBuffer new. vao := OpenGLVertexArray new. texture0 := OpenGLTexture fromUnit: 0. vao bind. vbo bind: GL_ARRAY_BUFFER. projection := Array2D identity: 4. assets := AssetManager new. "allocate vbuffer" vbuffer := FFIExternalArray externalNewType: GLfloat size: self class bufferSize. vbuffer autoRelease. voffset := 0. vbo data: GL_ARRAY_BUFFER data: vbuffer usage: GL_STREAM_DRAW. self enableGLAttribute: 0. OpenGLVertexArray vertexAttributePointerIndex: 0 size:4 type: GL_FLOAT normalized: GL_FALSE stride: 16 pointer: nil. ] { #category : #accessing } DiyaRendererContext >> mouse [ ^ mouse ] { #category : #accessing } DiyaRendererContext >> mouse: anObject [ mouse := anObject ] { #category : #accessing } DiyaRendererContext >> projection [ ^ projection ] { #category : #registration } DiyaRendererContext >> resetBuffer [ voffset := 0 ] { #category : #accessing } DiyaRendererContext >> resolution [ ^ (display w) @ (display h) ] { #category : #registration } DiyaRendererContext >> setTexture: texture [ texture setup. texture0 setImage2D: texture. texture0 active. ] { #category : #registration } DiyaRendererContext >> submitData: data [ |n| n := self voffset. voffset := voffset + (data size << 2). voffset > self class bufferSize ifTrue:[ ^ DiyaCoreAPIError signal: 'Out of video buffer memory' ]. vbo subData: GL_ARRAY_BUFFER offset: n data: data. ^ (n >> 4) ] { #category : #accessing } DiyaRendererContext >> texture0 [ ^ texture0 ] { #category : #registration } DiyaRendererContext >> useProjection: aClass [ projection := aClass fromDisplay: self display ] { #category : #accessing } DiyaRendererContext >> vao [ ^ vao ] { #category : #accessing } DiyaRendererContext >> vbo [ ^ vbo ] { #category : #accessing } DiyaRendererContext >> vbuffer [ ^ vbuffer ] { #category : #accessing } DiyaRendererContext >> voffset [ ^ voffset ] { #category : #accessing } DiyaRendererContext >> window [ ^ window ] { #category : #accessing } DiyaRendererContext >> window: anObject [ window := anObject ]