From 13804205f87e6da9d5f689743fd34d2dd2429a42 Mon Sep 17 00:00:00 2001 From: Dany LE Date: Mon, 14 Feb 2022 00:02:14 +0100 Subject: [PATCH] update shader support --- Diya/DiyaBoot.class.st | 1 + Diya/OpenGL.class.st | 7 ++++++- Diya/OpenGLConstants.class.st | 5 ++++- Diya/OpenGLSL.class.st | 6 ++++-- Diya/OpenGLVertexArray.class.st | 4 ++-- Diya/OpenGLVertexBuffer.class.st | 13 +++++++++---- Diya/SimpleDiyaRenderer.class.st | 3 +-- 7 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Diya/DiyaBoot.class.st b/Diya/DiyaBoot.class.st index 49da96c..359f2be 100644 --- a/Diya/DiyaBoot.class.st +++ b/Diya/DiyaBoot.class.st @@ -134,6 +134,7 @@ DiyaBoot >> render:sr [ [ (SDL2 pollEvent: event) > 0 ] whileTrue: [ self processEvent: event ]. + OpenGL viewportX: 0 Y:0 W: display w H: display h . sr render. SDL2 glSwapWindow: window. SDL2 delay: 50. diff --git a/Diya/OpenGL.class.st b/Diya/OpenGL.class.st index c3de808..e9dc7a4 100644 --- a/Diya/OpenGL.class.st +++ b/Diya/OpenGL.class.st @@ -15,7 +15,7 @@ OpenGL class >> begin: mode [ { #category : #accessing } OpenGL class >> checkSymbol [ - ^#glBegin + ^#glDrawArrays ] { #category : #'as yet unclassified' } @@ -43,6 +43,11 @@ OpenGL class >> end [ ^ self ffiCall: #(void glEnd( void )) ] +{ #category : #'as yet unclassified' } +OpenGL class >> getIntegerv: pname data: data [ + ^self ffiCall: #(void glGetIntegerv( GLenum pname,GLint * data)) +] + { #category : #accessing } OpenGL class >> libNames [ ^#('libGL.so.1') diff --git a/Diya/OpenGLConstants.class.st b/Diya/OpenGLConstants.class.st index 544720c..a259e26 100644 --- a/Diya/OpenGLConstants.class.st +++ b/Diya/OpenGLConstants.class.st @@ -8,6 +8,7 @@ Class { 'GL_ACTIVE_UNIFORMS', 'GL_ACTIVE_UNIFORM_MAX_LENGTH', 'GL_ARRAY_BUFFER', + 'GL_ARRAY_BUFFER_BINDING', 'GL_ATTACHED_SHADERS', 'GL_BYTE', 'GL_COLOR_BUFFER_BIT', @@ -77,7 +78,8 @@ OpenGLConstants class >> initCommonConstants [ GL_UNIFORM_BUFFER := 16r8A11. GL_STATIC_DRAW := 16r88E4. GL_FALSE := 0. - GL_TRUE := 1 + GL_TRUE := 1. + GL_ARRAY_BUFFER_BINDING := 16r8894 ] { #category : #'class initialization' } @@ -129,4 +131,5 @@ OpenGLConstants class >> initialize [ self initCommonMode. self initCommonMask. self initCommonShader. + self initCommonConstants ] diff --git a/Diya/OpenGLSL.class.st b/Diya/OpenGLSL.class.st index 0f1f88b..5636d64 100644 --- a/Diya/OpenGLSL.class.st +++ b/Diya/OpenGLSL.class.st @@ -115,10 +115,12 @@ OpenGLSL class >> vertextShader [ { #category : #compiling } OpenGLSL >> checkStatus:status of: id [ - |infoLength buffer| + |infoLength buffer result| + result := FFIExternalArray externalNewType: GLint size: 1. infoLength := FFIExternalArray externalNewType: GLint size: 1. infoLength autoRelease. - OpenGLSL getShaderiv: id parameterName: status params: nil. + result autoRelease. + OpenGLSL getShaderiv: id parameterName: status params: result getHandle. OpenGLSL getShaderiv: id parameterName: GL_INFO_LOG_LENGTH params: infoLength getHandle. (infoLength at:1) > 0 ifTrue: [ "report the error" diff --git a/Diya/OpenGLVertexArray.class.st b/Diya/OpenGLVertexArray.class.st index 2b4cb29..7460a9e 100644 --- a/Diya/OpenGLVertexArray.class.st +++ b/Diya/OpenGLVertexArray.class.st @@ -73,7 +73,7 @@ OpenGLVertexArray >> bind [ { #category : #accessing } OpenGLVertexArray >> delete [ - OpenGLVertexArray deteleVertexArraysSize:1 arrays: vertexArrayID. + OpenGLVertexArray deteleVertexArraysSize:1 arrays: vertexArrayID getHandle. vertexArrayID at: 1 put: -1 ] @@ -92,7 +92,7 @@ OpenGLVertexArray >> initialize [ vertexArrayID := FFIExternalArray externalNewType: GLint size:1. vertexArrayID autoRelease. vertexArrayID at:1 put: -1. - OpenGLVertexArray genVertexArraysSize: 1 arrays: vertexArrayID. + OpenGLVertexArray genVertexArraysSize: 1 arrays: vertexArrayID getHandle. ] diff --git a/Diya/OpenGLVertexBuffer.class.st b/Diya/OpenGLVertexBuffer.class.st index a0fcf35..8a07ad4 100644 --- a/Diya/OpenGLVertexBuffer.class.st +++ b/Diya/OpenGLVertexBuffer.class.st @@ -36,6 +36,11 @@ OpenGLVertexBuffer class >> genVertexBuffersSize:n buffers: buffers [ ^self ffiCall: #(void glGenBuffers( GLsizei n,GLuint * buffers)) ] +{ #category : #'as yet unclassified' } +OpenGLVertexBuffer class >> getBufferData: target offset: offset size: size data: data [ + ^self ffiCall: #(void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,void * data)) +] + { #category : #'as yet unclassified' } OpenGLVertexBuffer class >> namedBufferData:buffer size: size data: data usage: usage [ ^self ffiCall: #(void glNamedBufferData(GLuint buffer,GLsizeiptr size,const void *data,GLenum usage)) @@ -48,20 +53,20 @@ OpenGLVertexBuffer >> bind: target [ { #category : #'as yet unclassified' } OpenGLVertexBuffer >> data:target data: data usage: usage [ - ^OpenGLVertexBuffer bufferData: target size: data size data:data getHandle usage: usage + ^OpenGLVertexBuffer bufferData: target size: data size*4 data:data getHandle usage: usage ] { #category : #'as yet unclassified' } OpenGLVertexBuffer >> delete [ - ^OpenGLVertexBuffer deleteBuffersSize: 1 buffers: vertexBufferID + OpenGLVertexBuffer deleteBuffersSize: 1 buffers: vertexBufferID getHandle. + vertexBufferID free. ] { #category : #initialization } OpenGLVertexBuffer >> initialize [ vertexBufferID := FFIExternalArray externalNewType: GLint size:1. - vertexBufferID autoRelease. vertexBufferID at:1 put: -1. - OpenGLVertexBuffer genVertexBuffersSize: 1 buffers: vertexBufferID + OpenGLVertexBuffer genVertexBuffersSize: 1 buffers: vertexBufferID getHandle ] { #category : #initialization } diff --git a/Diya/SimpleDiyaRenderer.class.st b/Diya/SimpleDiyaRenderer.class.st index 5c629cd..552817d 100644 --- a/Diya/SimpleDiyaRenderer.class.st +++ b/Diya/SimpleDiyaRenderer.class.st @@ -42,7 +42,7 @@ SimpleDiyaRenderer >> render [ { #category : #deleting } SimpleDiyaRenderer >> setup [ - bufferData +bufferData at: 1 put: -1.0; at: 2 put: -1.0; at: 3 put: 0; @@ -55,5 +55,4 @@ SimpleDiyaRenderer >> setup [ arrayBuffer bind. vertexBuffer bind: GL_ARRAY_BUFFER. vertexBuffer data: GL_ARRAY_BUFFER data:bufferData usage: GL_STATIC_DRAW. - shader compile. ]