el siguiente simple código creará una ventana (secundaria al Formulario) con sólo las funciones externas de la librería SDL.
La ventana contendrá una imagen, un cuadrado de color amarillo y un texto.
Public Struct SDL_Rect
x As Short
y As Short
w As Short
h As Short
End Struct
Private Const SDL_INIT_VIDEO As Byte = 32
Private Const SDL_HWSURFACE As Byte = 1
Private Const SDL_DOUBLEBUF As Integer = 1073741824
Private video As Pointer
Library "libSDL-1.2:0.11.4"
Private Extern SDL_Init(flags As Integer) As Integer
Private Extern SDL_SetVideoMode(width As Integer, height As Integer, bitsperpixel As Integer, flags As Integer) As Pointer
Private Extern SDL_Delay(ms As Integer)
Private Extern SDL_FreeSurface(surface As Pointer)
Private Extern SDL_Quit()
Private Extern SDL_RWFromFile($file As String, mode As String) As Pointer
Private Extern SDL_LoadBMP_RW(image As Pointer, freesrc As Integer) As Pointer
Private Extern SDL_UpperBlit(image As Pointer, srcrect As Pointer, dst As Pointer, dstrect As SDL_Rect) As Integer In "libSDL_image-1.2:0.8.4"
Private Extern SDL_UpdateRect(sdlsurface As Pointer, x As Integer, y As Integer, w As Integer, h As Integer)
Private Extern SDL_Flip(sdlsurface As Pointer)
Private Extern SDL_FillRect(sdlsurface As Pointer, dstrect As SDL_Rect, color As Integer)
Library "libSDL_ttf-2.0:0.10.1"
Private Extern TTF_Init() As Integer
Private Extern TTF_OpenFont(nomefont As String, ptsize As Integer) As Pointer
Private Extern TTF_RenderText_Blended(fontP As Pointer, text As String, fg As Integer) As Pointer
Private Extern SDL_WM_SetCaption(title As String, icon As String)
Private Extern TTF_Quit()
Public Sub Button1_Click()
Dim fl, imago, font, testo As Pointer
Dim riquadro As New SDL_Rect
SDL_Init(SDL_INIT_VIDEO)
video = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE Or SDL_DOUBLEBUF)
' Carga un imagen en la ventana:
fl = SDL_RWFromFile("/direccion/de/la/imagen.bmp", "rb")
imago = SDL_LoadBMP_RW(fl, 1)
SDL_UpperBlit(imago, Null, video, Null)
SDL_UpdateRect(video, 0, 0, 0, 0)
' Fija un titulo textual a la ventana:
SDL_WM_SetCaption("Titulo de la ventana", Null)
' Se procede con la configuración de un texto sobre la superficie de la ventana:
TTF_Init()
font = TTF_OpenFont("/direccion/del/font.ttf", 15)
testo = TTF_RenderText_Blended(font, "texto cualquier", 3329329)
' Se procede a la fijación de 300x300 píxeles en la ventana y por encima de la imagen:
With riquadro
.x = 0
.y = 0
.w = 300
.h = 300
End With
' El cuadrado será de color amarillo:
SDL_FillRect(video, riquadro, &FFFF00)
' El cuadrado que contiene el texto, sin embargo, se colocará en la superficie de la ventana a una posición determinada por las coordenadas X e Y:
With riquadro
.x = 30
.y = 50
End With
SDL_UpperBlit(testo, Null, video, riquadro)
SDL_Flip(video)
End
Public Sub Button2_Click() ' Cierra todas las interfaces de SDL y destruye la ventana
TTF_Quit()
SDL_FreeSurface(video)
SDL_Quit()
End
x As Short
y As Short
w As Short
h As Short
End Struct
Private Const SDL_INIT_VIDEO As Byte = 32
Private Const SDL_HWSURFACE As Byte = 1
Private Const SDL_DOUBLEBUF As Integer = 1073741824
Private video As Pointer
Library "libSDL-1.2:0.11.4"
Private Extern SDL_Init(flags As Integer) As Integer
Private Extern SDL_SetVideoMode(width As Integer, height As Integer, bitsperpixel As Integer, flags As Integer) As Pointer
Private Extern SDL_Delay(ms As Integer)
Private Extern SDL_FreeSurface(surface As Pointer)
Private Extern SDL_Quit()
Private Extern SDL_RWFromFile($file As String, mode As String) As Pointer
Private Extern SDL_LoadBMP_RW(image As Pointer, freesrc As Integer) As Pointer
Private Extern SDL_UpperBlit(image As Pointer, srcrect As Pointer, dst As Pointer, dstrect As SDL_Rect) As Integer In "libSDL_image-1.2:0.8.4"
Private Extern SDL_UpdateRect(sdlsurface As Pointer, x As Integer, y As Integer, w As Integer, h As Integer)
Private Extern SDL_Flip(sdlsurface As Pointer)
Private Extern SDL_FillRect(sdlsurface As Pointer, dstrect As SDL_Rect, color As Integer)
Library "libSDL_ttf-2.0:0.10.1"
Private Extern TTF_Init() As Integer
Private Extern TTF_OpenFont(nomefont As String, ptsize As Integer) As Pointer
Private Extern TTF_RenderText_Blended(fontP As Pointer, text As String, fg As Integer) As Pointer
Private Extern SDL_WM_SetCaption(title As String, icon As String)
Private Extern TTF_Quit()
Public Sub Button1_Click()
Dim fl, imago, font, testo As Pointer
Dim riquadro As New SDL_Rect
SDL_Init(SDL_INIT_VIDEO)
video = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE Or SDL_DOUBLEBUF)
' Carga un imagen en la ventana:
fl = SDL_RWFromFile("/direccion/de/la/imagen.bmp", "rb")
imago = SDL_LoadBMP_RW(fl, 1)
SDL_UpperBlit(imago, Null, video, Null)
SDL_UpdateRect(video, 0, 0, 0, 0)
' Fija un titulo textual a la ventana:
SDL_WM_SetCaption("Titulo de la ventana", Null)
' Se procede con la configuración de un texto sobre la superficie de la ventana:
TTF_Init()
font = TTF_OpenFont("/direccion/del/font.ttf", 15)
testo = TTF_RenderText_Blended(font, "texto cualquier", 3329329)
' Se procede a la fijación de 300x300 píxeles en la ventana y por encima de la imagen:
With riquadro
.x = 0
.y = 0
.w = 300
.h = 300
End With
' El cuadrado será de color amarillo:
SDL_FillRect(video, riquadro, &FFFF00)
' El cuadrado que contiene el texto, sin embargo, se colocará en la superficie de la ventana a una posición determinada por las coordenadas X e Y:
With riquadro
.x = 30
.y = 50
End With
SDL_UpperBlit(testo, Null, video, riquadro)
SDL_Flip(video)
End
Public Sub Button2_Click() ' Cierra todas las interfaces de SDL y destruye la ventana
TTF_Quit()
SDL_FreeSurface(video)
SDL_Quit()
End
Referencias:
La página que escribí (en italiano) en la wiki de gambas-it.org:
http://www.gambas-it.org/wiki/index..._del_API_di_SDL