mirror of
https://github.com/lxsang/Diya-API.git
synced 2024-12-26 11:28:22 +01:00
add uniform support to shader
This commit is contained in:
parent
13804205f8
commit
e047a89801
@ -1,15 +1,13 @@
|
||||
Class {
|
||||
#name : #DiyaBoot,
|
||||
#superclass : #DiyaBaseObject,
|
||||
#superclass : #DiyaSingleton,
|
||||
#instVars : [
|
||||
'running',
|
||||
'window',
|
||||
'renderer',
|
||||
'context',
|
||||
'display'
|
||||
],
|
||||
#classVars : [
|
||||
'singleton'
|
||||
'display',
|
||||
'clock'
|
||||
],
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
@ -20,16 +18,6 @@ Class {
|
||||
#category : #'Diya-Runtime'
|
||||
}
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaBoot class >> new [
|
||||
self error: 'Use #uniqueInstance'
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaBoot class >> reset [
|
||||
singleton := nil
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaBoot class >> startUp: status [
|
||||
self startx.
|
||||
@ -40,12 +28,6 @@ DiyaBoot class >> startx [
|
||||
self uniqueInstance run
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaBoot class >> uniqueInstance [
|
||||
singleton ifNil: [ singleton := super new ].
|
||||
^ singleton
|
||||
]
|
||||
|
||||
{ #category : #events }
|
||||
DiyaBoot >> createGLContext [
|
||||
context := SDL2 glCreateContext: window.
|
||||
@ -91,6 +73,7 @@ DiyaBoot >> initialize [
|
||||
display := nil.
|
||||
window := nil.
|
||||
context := nil.
|
||||
clock := DiyaClock uniqueInstance.
|
||||
]
|
||||
|
||||
{ #category : #events }
|
||||
@ -101,6 +84,7 @@ DiyaBoot >> processEvent: event [
|
||||
mappedEvt type = SDL_QUIT ifTrue:[ ^running:= false ].
|
||||
mappedEvt type = SDL_FINGERDOWN ifTrue:[^self setCursorPosition: mappedEvt ].
|
||||
mappedEvt type = SDL_FINGERMOTION ifTrue:[^self setCursorPosition: mappedEvt ].
|
||||
mappedEvt type = SDL_MOUSEMOTION ifTrue:[DiyaRendererContext uniqueInstance mouse: mappedEvt].
|
||||
]
|
||||
|
||||
{ #category : #events }
|
||||
@ -167,6 +151,8 @@ DiyaBoot >> run: screenSize app: application [
|
||||
display h: screenSize y.
|
||||
self startx.
|
||||
self class reset.
|
||||
DiyaClock reset.
|
||||
DiyaRendererContext reset.
|
||||
Smalltalk garbageCollect.
|
||||
]
|
||||
|
||||
@ -220,6 +206,7 @@ DiyaBoot >> startx [
|
||||
self createGLContext.
|
||||
self createRenderer.
|
||||
self showSystemInfo.
|
||||
DiyaRendererContext uniqueInstance display: display.
|
||||
sr := SimpleDiyaRenderer new.
|
||||
sr setup.
|
||||
self render:sr.
|
||||
|
18
Diya/DiyaClock.class.st
Normal file
18
Diya/DiyaClock.class.st
Normal file
@ -0,0 +1,18 @@
|
||||
Class {
|
||||
#name : #DiyaClock,
|
||||
#superclass : #DiyaSingleton,
|
||||
#instVars : [
|
||||
'monotonic'
|
||||
],
|
||||
#category : #'Diya-Runtime'
|
||||
}
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaClock >> elapsedTime [
|
||||
^(DateAndTime now) - monotonic
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaClock >> initialize [
|
||||
monotonic := DateAndTime now.
|
||||
]
|
@ -1,6 +1,9 @@
|
||||
Class {
|
||||
#name : #DiyaRenderer,
|
||||
#superclass : #DiyaBaseObject,
|
||||
#instVars : [
|
||||
'context'
|
||||
],
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
@ -8,11 +11,22 @@ Class {
|
||||
#category : #'Diya-Graphics'
|
||||
}
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaRenderer class >> fromContext: ctx [
|
||||
^self new context: ctx; yourself
|
||||
]
|
||||
|
||||
{ #category : #deleting }
|
||||
DiyaRenderer >> destroy [
|
||||
^ self subclassResponsibility
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
DiyaRenderer >> initialize [
|
||||
super initialize.
|
||||
context := DiyaRendererContext uniqueInstance
|
||||
]
|
||||
|
||||
{ #category : #deleting }
|
||||
DiyaRenderer >> render [
|
||||
^ self subclassResponsibility
|
||||
|
38
Diya/DiyaRendererContext.class.st
Normal file
38
Diya/DiyaRendererContext.class.st
Normal file
@ -0,0 +1,38 @@
|
||||
Class {
|
||||
#name : #DiyaRendererContext,
|
||||
#superclass : #DiyaSingleton,
|
||||
#instVars : [
|
||||
'mouse',
|
||||
'display'
|
||||
],
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-Graphics'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaRendererContext >> display [
|
||||
^ display
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaRendererContext >> display: anObject [
|
||||
display := anObject
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaRendererContext >> mouse [
|
||||
^ mouse
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
DiyaRendererContext >> mouse: anObject [
|
||||
mouse := anObject
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
DiyaRendererContext >> resolution [
|
||||
^ (display w) @ (display h)
|
||||
]
|
37
Diya/DiyaSingleton.class.st
Normal file
37
Diya/DiyaSingleton.class.st
Normal file
@ -0,0 +1,37 @@
|
||||
Class {
|
||||
#name : #DiyaSingleton,
|
||||
#superclass : #DiyaBaseObject,
|
||||
#classVars : [
|
||||
'singletons'
|
||||
],
|
||||
#category : #'Diya-Core'
|
||||
}
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaSingleton class >> cleanUpInstance: singleton [
|
||||
"do nothing for now"
|
||||
]
|
||||
|
||||
{ #category : #'class initialization' }
|
||||
DiyaSingleton class >> initialize [
|
||||
singletons := Dictionary new.
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaSingleton class >> new [
|
||||
self error: 'Use #uniqueInstance'
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaSingleton class >> reset [
|
||||
|singleton|
|
||||
singleton := singletons at: self class ifAbsent: [ ^ self ].
|
||||
self cleanUpInstance: singleton.
|
||||
singletons removeKey: self class
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
DiyaSingleton class >> uniqueInstance [
|
||||
singletons at: self class ifAbsentPut: super new.
|
||||
^ singletons at: self class
|
||||
]
|
6
Diya/Duration.extension.st
Normal file
6
Diya/Duration.extension.st
Normal file
@ -0,0 +1,6 @@
|
||||
Extension { #name : #Duration }
|
||||
|
||||
{ #category : #'*Diya' }
|
||||
Duration >> asFloat [
|
||||
^ seconds asFloat + (nanos / 1e9) asFloat
|
||||
]
|
@ -7,9 +7,16 @@ Class {
|
||||
{ #category : #accessing }
|
||||
GLSimpleShader class >> fragmentShader [
|
||||
^ '
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
#endif
|
||||
uniform vec2 u_resolution;
|
||||
uniform vec2 u_mouse;
|
||||
uniform float u_time;
|
||||
void main()
|
||||
{
|
||||
gl_FragColor = vec4(0.4,0.4,0.8,1.0);
|
||||
vec2 mouse = vec2(u_mouse)/vec2(u_resolution);
|
||||
gl_FragColor = vec4(mouse.x, mouse.y, abs(sin(u_time)), 1.0);
|
||||
}
|
||||
'
|
||||
]
|
||||
|
@ -1,11 +1,9 @@
|
||||
Class {
|
||||
#name : #OpenGLSL,
|
||||
#superclass : #DiyaBaseObject,
|
||||
#superclass : #DiyaSingleton,
|
||||
#instVars : [
|
||||
'programID'
|
||||
],
|
||||
#classVars : [
|
||||
'singleton'
|
||||
'programID',
|
||||
'uniforms'
|
||||
],
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
@ -19,6 +17,11 @@ OpenGLSL class >> attachShader: shader to: program [
|
||||
^self ffiCall: #(void glAttachShader(GLuint program,GLuint shader))
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
OpenGLSL class >> cleanUpInstance: singleton [
|
||||
singleton delete
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSL class >> compileShader: shader [
|
||||
^ self ffiCall: #(void glCompileShader( GLuint shader))
|
||||
@ -74,33 +77,24 @@ OpenGLSL class >> getShaderiv:shader parameterName: pname params: ptr [
|
||||
^ self ffiCall: #(void glGetShaderiv(GLuint shader,GLenum pname,GLint *ptr))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSL class >> getUniformLocation: uname ofProgram: program [
|
||||
^self ffiCall:#(GLint glGetUniformLocation( GLuint program,const GLchar *uname))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSL class >> linkProgram:program [
|
||||
^self ffiCall: #(void glLinkProgram(GLuint program))
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
OpenGLSL class >> new [
|
||||
self error: 'Use #uniqueInstance'
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
OpenGLSL class >> reset [
|
||||
singleton ifNotNil: [
|
||||
singleton delete.
|
||||
].
|
||||
singleton := nil
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSL class >> setShaderSourceFor: shader count: n string: s length: l [
|
||||
^ self ffiCall: #(void glShaderSource( GLuint shader,GLsizei n,const void* s,const GLint *l))
|
||||
]
|
||||
|
||||
{ #category : #'instance creation' }
|
||||
OpenGLSL class >> uniqueInstance [
|
||||
singleton ifNil: [ singleton := super new. singleton compile ].
|
||||
^ singleton
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSL class >> systemUniforms [
|
||||
^#(u_time u_resolution u_mouse)
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
@ -113,6 +107,11 @@ OpenGLSL class >> vertextShader [
|
||||
^ self subclassResponsibility
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
OpenGLSL >> addUniform: uname of: utype [
|
||||
uniforms at:uname put: (utype fromName: uname).
|
||||
]
|
||||
|
||||
{ #category : #compiling }
|
||||
OpenGLSL >> checkStatus:status of: id [
|
||||
|infoLength buffer result|
|
||||
@ -151,7 +150,8 @@ OpenGLSL >> compile [
|
||||
OpenGLSL detachShaderFrom: programID shader: vertexShaderID.
|
||||
OpenGLSL detachShaderFrom: programID shader: fragmentShaderID.
|
||||
OpenGLSL deleteShader: vertexShaderID.
|
||||
OpenGLSL deleteShader: fragmentShaderID
|
||||
OpenGLSL deleteShader: fragmentShaderID.
|
||||
self locateUniforms
|
||||
]
|
||||
|
||||
{ #category : #compiling }
|
||||
@ -184,6 +184,44 @@ OpenGLSL >> getSourcePtr: string for: shaderId [
|
||||
OpenGLSL setShaderSourceFor: shaderId count: 1 string: xarray getHandle length: nil.
|
||||
]
|
||||
|
||||
{ #category : #'submorphs-add/remove' }
|
||||
OpenGLSL >> getUniformLocation:uname [
|
||||
^ self class getUniformLocation: uname asString ofProgram: programID
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
OpenGLSL >> initialize [
|
||||
super initialize.
|
||||
uniforms := Dictionary new.
|
||||
self addUniform: #u_time of: Uniform1F.
|
||||
self addUniform: #u_resolution of: Uniform2F.
|
||||
self addUniform: #u_mouse of: Uniform2F.
|
||||
self setUpUniforms.
|
||||
self compile
|
||||
]
|
||||
|
||||
{ #category : #compiling }
|
||||
OpenGLSL >> locateUniforms [
|
||||
|loc|
|
||||
uniforms valuesDo: [ :uniform|
|
||||
loc := self getUniformLocation: uniform uname.
|
||||
loc = -1 ifFalse:[uniform location: loc]
|
||||
]
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
OpenGLSL >> setUniform: uname value: values [
|
||||
|uniform|
|
||||
uniform := uniforms at: uname asSymbol ifAbsent:[
|
||||
^self error: 'Uniform', uname, 'is not defined in this program'].
|
||||
uniform value: values
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
OpenGLSL >> setUpUniforms [
|
||||
"do nothing, custom uniform can be set up by subclass"
|
||||
]
|
||||
|
||||
{ #category : #'submorphs-add/remove' }
|
||||
OpenGLSL >> use [
|
||||
^OpenGLSL useProgram: programID
|
||||
|
108
Diya/OpenGLSLUniform.class.st
Normal file
108
Diya/OpenGLSLUniform.class.st
Normal file
@ -0,0 +1,108 @@
|
||||
Class {
|
||||
#name : #OpenGLSLUniform,
|
||||
#superclass : #DiyaBaseObject,
|
||||
#instVars : [
|
||||
'uname',
|
||||
'location',
|
||||
'value'
|
||||
],
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> ffiLibraryName [
|
||||
^ OpenGL ffiLibraryName
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> fromName: uname [
|
||||
^self new uname: uname; yourself
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> fromName: uname at: location [
|
||||
^self new uname: uname; location: location; yourself
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> uniform1f: location value: v0 [
|
||||
^self ffiCall: #(void glUniform1f(GLint location,GLfloat v0))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> uniform1i: location value: v0 [
|
||||
^self ffiCall: #(void glUniform1i(GLint location,GLint v0))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> uniform2f: location value: v0 value: v1 [
|
||||
^self ffiCall: #(void glUniform2f(GLint location,GLfloat v0,GLfloat v1))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> uniform2i: location value: v0 value: v1 [
|
||||
^self ffiCall: #(void glUniform2i(GLint location,GLint v0,GLint v1))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> uniform3f: location value: v0 value: v1 value: v2 [
|
||||
^self ffiCall: #(void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> uniform3i: location value: v0 value: v1 value: v2 [
|
||||
^self ffiCall: #(void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> uniform4f: location value: v0 value: v1 value: v2 value: v3 [
|
||||
^self ffiCall: #(void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2, GLfloat v3))
|
||||
]
|
||||
|
||||
{ #category : #'as yet unclassified' }
|
||||
OpenGLSLUniform class >> uniform4i: location value: v0 value: v1 value: v2 value: v3 [
|
||||
^self ffiCall: #(void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2, GLint v3))
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
OpenGLSLUniform >> location [
|
||||
^ location
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
OpenGLSLUniform >> location: anObject [
|
||||
location := anObject
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
OpenGLSLUniform >> setUniformValue [
|
||||
^ self subclassResponsibility
|
||||
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
OpenGLSLUniform >> uname [
|
||||
^ uname
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
OpenGLSLUniform >> uname: anObject [
|
||||
uname := anObject
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
OpenGLSLUniform >> value [
|
||||
^ value
|
||||
]
|
||||
|
||||
{ #category : #accessing }
|
||||
OpenGLSLUniform >> value: values [
|
||||
location = -1 ifTrue: [ ^self ].
|
||||
value := values.
|
||||
self setUniformValue.
|
||||
|
||||
]
|
@ -14,12 +14,12 @@ Class {
|
||||
SimpleDiyaRenderer >> destroy [
|
||||
vertexBuffer delete.
|
||||
arrayBuffer delete.
|
||||
shader delete.
|
||||
GLSimpleShader reset.
|
||||
]
|
||||
|
||||
{ #category : #initialization }
|
||||
SimpleDiyaRenderer >> initialize [
|
||||
SimpleDiyaRenderer >> initialize [
|
||||
super initialize.
|
||||
vertexBuffer := OpenGLVertexBuffer new.
|
||||
arrayBuffer := OpenGLVertexArray new.
|
||||
bufferData := FFIExternalArray externalNewType: GLfloat size: 9.
|
||||
@ -33,6 +33,12 @@ SimpleDiyaRenderer >> render [
|
||||
OpenGL clearColorR: 1.0 G: 0 B: 1.0 A:0.
|
||||
OpenGL clear: GL_COLOR_BUFFER_BIT.
|
||||
shader use.
|
||||
shader setUniform: #u_time value: DiyaClock uniqueInstance elapsedTime asFloat.
|
||||
shader setUniform: #u_resolution value: { context resolution x. context resolution y }.
|
||||
context mouse ifNotNil: [
|
||||
shader setUniform: #u_mouse value: { context mouse x. context mouse y }.
|
||||
].
|
||||
|
||||
arrayBuffer enableAttribute: 0.
|
||||
vertexBuffer bind: GL_ARRAY_BUFFER.
|
||||
OpenGLVertexArray vertexAttributePointerIndex: 0 size:3 type: GL_FLOAT normalized: GL_FALSE stride: 0 pointer: nil .
|
||||
|
14
Diya/Uniform1F.class.st
Normal file
14
Diya/Uniform1F.class.st
Normal file
@ -0,0 +1,14 @@
|
||||
Class {
|
||||
#name : #Uniform1F,
|
||||
#superclass : #OpenGLSLUniform,
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
Uniform1F >> setUniformValue [
|
||||
OpenGLSLUniform uniform1f: location value: value
|
||||
]
|
14
Diya/Uniform1i.class.st
Normal file
14
Diya/Uniform1i.class.st
Normal file
@ -0,0 +1,14 @@
|
||||
Class {
|
||||
#name : #Uniform1i,
|
||||
#superclass : #OpenGLSLUniform,
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
Uniform1i >> setUniformValue [
|
||||
OpenGLSLUniform uniform1i: location value: value
|
||||
]
|
14
Diya/Uniform2F.class.st
Normal file
14
Diya/Uniform2F.class.st
Normal file
@ -0,0 +1,14 @@
|
||||
Class {
|
||||
#name : #Uniform2F,
|
||||
#superclass : #OpenGLSLUniform,
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
Uniform2F >> setUniformValue [
|
||||
OpenGLSLUniform uniform2f: location value: value first value: value last
|
||||
]
|
14
Diya/Uniform2i.class.st
Normal file
14
Diya/Uniform2i.class.st
Normal file
@ -0,0 +1,14 @@
|
||||
Class {
|
||||
#name : #Uniform2i,
|
||||
#superclass : #OpenGLSLUniform,
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
Uniform2i >> setUniformValue [
|
||||
OpenGLSLUniform uniform2i: location value: value first value: value last
|
||||
]
|
14
Diya/Uniform3F.class.st
Normal file
14
Diya/Uniform3F.class.st
Normal file
@ -0,0 +1,14 @@
|
||||
Class {
|
||||
#name : #Uniform3F,
|
||||
#superclass : #OpenGLSLUniform,
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
Uniform3F >> setUniformValue [
|
||||
OpenGLSLUniform uniform3f: location value: value first value: (value at:2) value: value last
|
||||
]
|
14
Diya/Uniform3i.class.st
Normal file
14
Diya/Uniform3i.class.st
Normal file
@ -0,0 +1,14 @@
|
||||
Class {
|
||||
#name : #Uniform3i,
|
||||
#superclass : #OpenGLSLUniform,
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
Uniform3i >> setUniformValue [
|
||||
OpenGLSLUniform uniform3i: location value: value first value: (value at:2) value: value last
|
||||
]
|
18
Diya/Uniform4F.class.st
Normal file
18
Diya/Uniform4F.class.st
Normal file
@ -0,0 +1,18 @@
|
||||
Class {
|
||||
#name : #Uniform4F,
|
||||
#superclass : #OpenGLSLUniform,
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
Uniform4F >> setUniformValue [
|
||||
OpenGLSLUniform uniform4f: location
|
||||
value: value first
|
||||
value: (value at:2)
|
||||
value: (value at:3)
|
||||
value: value last
|
||||
]
|
18
Diya/Uniform4i.class.st
Normal file
18
Diya/Uniform4i.class.st
Normal file
@ -0,0 +1,18 @@
|
||||
Class {
|
||||
#name : #Uniform4i,
|
||||
#superclass : #OpenGLSLUniform,
|
||||
#pools : [
|
||||
'OpenGLConstants',
|
||||
'OpenGLTypes'
|
||||
],
|
||||
#category : #'Diya-OpenGL'
|
||||
}
|
||||
|
||||
{ #category : #accessing }
|
||||
Uniform4i >> setUniformValue [
|
||||
OpenGLSLUniform uniform4i: location
|
||||
value: value first
|
||||
value: (value at:2)
|
||||
value: (value at:3)
|
||||
value: value last
|
||||
]
|
Loading…
Reference in New Issue
Block a user