123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- (*
- ================================================================================
- == ==
- == ATTENTION: DO NOT LOAD ALL GRAPHICS ON CREATE OR ON SHOW BECAUSE THE ==
- == COMPONENT SDL2FRAME IS NOT YET COMPLETED ==
- == ==
- ================================================================================
- *)
- unit SDL2.Frame;
- interface
- uses
- Winapi.Windows,
- System.SysUtils,
- System.Classes,
- Vcl.Dialogs,
- Vcl.Controls,
- Vcl.ExtCtrls,
- Vcl.Forms,
- SDL2.Import;
- type
- TSDL2Frame = class(TPanel)
- private
- FSDLPantalla: PSDLPantalla;
- FFlags: UInt32;
- FRenderInfo: PSDL_RendererInfo;
- protected
- procedure CreateWnd; override;
- procedure DestroyWnd; override;
- public
- procedure Finalize;
- property SDLPantalla: PSDLPantalla read FSDLPantalla;
- published
- property Flags: UInt32 read FFlags write FFlags;
- end;
- procedure Register;
- // ------------------------------------
- implementation
- // ------------------------------------
- // ******************************************************************************
- procedure Register;
- begin
- RegisterComponents('SDL2', [TSDL2Frame]);
- end;
- // ******************************************************************************
- procedure TSDL2Frame.CreateWnd;
- begin
- inherited;
- if SDL_WasInit(SDL_INIT_VIDEO) <> SDL_INIT_VIDEO then
- SDL_InitSubSystem(SDL_INIT_VIDEO);
- New(FSDLPantalla);
- FSDLPantalla.Window := SDL_CreateWindowFrom(Pointer(WindowHandle));
- if FSDLPantalla.Window <> nil then
- begin
- FSDLPantalla.Renderer := SDL_CreateRenderer(FSDLPantalla.Window, -1, 0);
- // no forzamos ningún tipo de render (0) para que el sistema coja el que pueda Hard-Soft
- if FSDLPantalla.Renderer <> nil then
- begin
- New(FRenderInfo);
- if SDL_GetRendererInfo(FSDLPantalla.Renderer, FRenderInfo) = 0 then
- begin
- FSDLPantalla.max_texture_width := FRenderInfo.max_texture_width;
- FSDLPantalla.max_texture_height := FRenderInfo.max_texture_height;
- FSDLPantalla.hardware :=
- ((FRenderInfo.Flags and SDL_RENDERER_ACCELERATED) > 0);
- FSDLPantalla.render_name := FRenderInfo.name;
- // PAnsiChar(FRenderInfo.name);
- SDL_ShowWindow(FSDLPantalla.Window);
- if SDL_SetRenderDrawColor(FSDLPantalla.Renderer, 0, 0, 0,
- SDL_ALPHA_OPAQUE) = 0 then
- begin
- if SDL_RenderFillRect(FSDLPantalla.Renderer, nil) = 0 then
- FFlags := SDL_GetWindowFlags(FSDLPantalla.Window)
- else
- ShowMessage('Error clearing render context');
- end
- else
- ShowMessage('Error setting render draw color');
- end
- else
- ShowMessage('Error getting information about rendering context');
- end
- else
- ShowMessage('Error crearting SDL2 Render');
- end
- else
- ShowMessage('Error creating SDL2 Window.')
- end;
- // ******************************************************************************
- procedure TSDL2Frame.Finalize;
- begin
- if FSDLPantalla.Renderer <> nil then
- begin
- SDL_DestroyRenderer(FSDLPantalla.Renderer);
- FSDLPantalla.Renderer := nil;
- end;
- if FSDLPantalla.Window <> nil then
- begin
- SDL_DestroyWindow(FSDLPantalla.Window);
- FSDLPantalla.Window := nil;
- end;
- Dispose(FSDLPantalla);
- end;
- // ******************************************************************************
- procedure TSDL2Frame.DestroyWnd;
- begin
- Finalize;
- inherited;
- end;
- end.
|