1
0
mirror of https://github.com/lxsang/Diya-API.git synced 2024-12-27 03:48:21 +01:00

Extend SDL2 binding API

This commit is contained in:
Dany LE 2021-12-18 22:49:03 +01:00
parent 12a79139d7
commit 7371fd5032
5 changed files with 200 additions and 21 deletions

View File

@ -30,10 +30,10 @@ DiyaBoot class >> startUp: status [
Transcript
show: c className;
cr ].
Transcript show: self tickSinceStart; cr.
self startx.
]
{ #category : #'system startup' }
DiyaBoot class >> tickSinceStart [
^ self ffiCall: #( uint clock() ) module: 'libc.so.6'.
DiyaBoot class >> startx [
DiyaInit uniqueInstance eventLoop
]

48
Diya/DiyaInit.class.st Normal file
View File

@ -0,0 +1,48 @@
Class {
#name : #DiyaInit,
#superclass : #Object,
#classVars : [
'singleton'
],
#pools : [
'SDL2Constants',
'SDL2Types'
],
#category : #'Diya-Core'
}
{ #category : #'instance creation' }
DiyaInit class >> uniqueInstance [
singleton ifNil: [ singleton := self new ].
^ singleton
]
{ #category : #events }
DiyaInit >> checkDrivers [
|ndriver usableDrivers|
ndriver := SDL2 SDLGetNumVideoDrivers.
usableDrivers := OrderedCollection new.
Transcript show: 'Available drivers: '.
0 to: ndriver - 1 do: [ :i | |dname|
dname := SDL2 SDLGetVideoDriver: i.
Transcript show: dname, ' '.
(SDL2 SDLVideoInit: dname) = 0 ifTrue:[
usableDrivers add: dname.
SDL2 SDLVideoQuit
]
].
Transcript cr.
]
{ #category : #events }
DiyaInit >> eventLoop [
|status|
self checkDrivers.
status := SDL2 init: SDL_INIT_EVERYTHING.
status = 0 ifFalse:[
^ self error: SDL2 getErrorMessage.
].
Transcript show: 'Current selected video driver ', (SDL2 SDLGetCurrentVideoDriver); cr.
SDL2 quit
]

View File

@ -1,18 +0,0 @@
Class {
#name : #DiyaSDLBinding,
#superclass : #DiyaFFIBase,
#category : #'Diya-Graphics-SDL'
}
{ #category : #accessing }
DiyaSDLBinding class >> checkSymbol [
^ 'SDL_Init'
]
{ #category : #accessing }
DiyaSDLBinding class >> libNames [
#(
'libSDL2-2.0.so.0' "Linux 1"
'libSDL2-2.0.so.0.2.1' "Linux 2"
)
]

63
Diya/SDL2.extension.st Normal file
View File

@ -0,0 +1,63 @@
Extension { #name : #SDL2 }
{ #category : #'*Diya' }
SDL2 class >> SDLClearError [
^ self ffiCall: #(void SDL_ClearError(void))
]
{ #category : #'*Diya' }
SDL2 class >> SDLGetCurrentDisplayMode: mode from:index [
^ self ffiCall: #(int SDL_GetCurrentDisplayMode(int index, SDL_DisplayMode* mode))
]
{ #category : #'*Diya' }
SDL2 class >> SDLGetCurrentVideoDriver [
^self ffiCall: #(const char* SDL_GetCurrentVideoDriver(void))
]
{ #category : #'*Diya' }
SDL2 class >> SDLGetNumRenderDrivers [
^self ffiCall: #(int SDL_GetNumRenderDrivers(void))
]
{ #category : #'*Diya' }
SDL2 class >> SDLGetNumVideoDrivers [
^ self ffiCall: #(int SDL_GetNumVideoDrivers(void))
]
{ #category : #'*Diya' }
SDL2 class >> SDLGetVideoDriver: index [
^self ffiCall: #(const char* SDL_GetVideoDriver(int index))
]
{ #category : #'*Diya' }
SDL2 class >> SDLVideoInit:driver_name [
^self ffiCall: #(int SDL_VideoInit(const char *driver_name))
]
{ #category : #'*Diya' }
SDL2 class >> SDLVideoQuit [
^ self ffiCall: #(void SDL_VideoQuit(void))
]
{ #category : #'*Diya' }
SDL2 class >> findSDL2 [
"Look for SDL2 using different names."
#(0 "Static"
SDL2
'libSDL2-2.0.0.dylib' "Mac"
'libSDL2-2.0.so.0' "Linux 1"
'libSDL2-2.0.so.0.2.1' "Linux 2"
'SDL2.dll' "Windows"
) do: [ :eachName |
[ (self checkLibraryName: eachName) ifTrue: [ ^ eachName ] ]
ifError: [nil] ].
self error: 'Failed to find SDL2 library.'
]

View File

@ -0,0 +1,86 @@
Class {
#name : #'SDL_DisplayMode',
#superclass : #SDL2Structure,
#classVars : [
'OFFSET_DRIVERDATA',
'OFFSET_FORMAT',
'OFFSET_H',
'OFFSET_REFRESH_RATE',
'OFFSET_W'
],
#pools : [
'SDL2Types'
],
#category : #'Diya-SDL2'
}
{ #category : #'field definition' }
SDL_DisplayMode class >> fieldsDesc [
^#(
Uint32 format;
int w;
int h;
int refresh_rate;
void* driverdata;
)
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> driverdata [
"This method was automatically generated"
^ExternalData fromHandle: (handle pointerAt: OFFSET_DRIVERDATA) type: ExternalType void asPointerType
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> driverdata: anObject [
"This method was automatically generated"
handle pointerAt: OFFSET_DRIVERDATA put: anObject getHandle.
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> format [
"This method was automatically generated"
^handle unsignedLongAt: OFFSET_FORMAT
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> format: anObject [
"This method was automatically generated"
handle unsignedLongAt: OFFSET_FORMAT put: anObject
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> h [
"This method was automatically generated"
^handle signedLongAt: OFFSET_H
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> h: anObject [
"This method was automatically generated"
handle signedLongAt: OFFSET_H put: anObject
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> refresh_rate [
"This method was automatically generated"
^handle signedLongAt: OFFSET_REFRESH_RATE
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> refresh_rate: anObject [
"This method was automatically generated"
handle signedLongAt: OFFSET_REFRESH_RATE put: anObject
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> w [
"This method was automatically generated"
^handle signedLongAt: OFFSET_W
]
{ #category : #'accessing structure variables' }
SDL_DisplayMode >> w: anObject [
"This method was automatically generated"
handle signedLongAt: OFFSET_W put: anObject
]