Re: Cheb's Game Engine
Добавлено: 17.04.2017 02:07:49
Бооооль.
Конверсия сишных заголовков. Тысяч их.
Конверсия сишных заголовков. Тысяч их.
- Код: Выделить всё
const
libbcm = 'libbcm_host.so';
procedure TryInitBroadcomEGLExtensionsAndSeeIfThisIsReallyRaspberryPi;
begin
pointer(eglCreateGlobalImageBRCM):= GetEGLProcAddress('eglCreateGlobalImageBRCM');
if not Assigned(pointer(eglCreateGlobalImageBRCM)) then Exit;
Mother^.State.RaspberryPiDetected:= true;
if Mother^.Debug.Verbose then AddLog(' Raspberry Pi detected! Loading the rest of Broadcom extensions...');
if not LoadBroadcomLibrary() then Die(MI_ERROR_OPENGLDLLNOTFOUND, [libbcm]);
pointer(bcm_host_init):= GetBroadcomProcAddress('bcm_host_init');
pointer(bcm_host_deinit):= GetBroadcomProcAddress('bcm_host_deinit');
pointer(graphics_get_display_size):= GetBroadcomProcAddress('graphics_get_display_size');
//pointer(vc_dispman_init):= GetBroadcomProcAddress('vc_dispman_init');
pointer(vc_dispmanx_stop):= GetBroadcomProcAddress('vc_dispmanx_stop');
pointer(vc_dispmanx_rect_set):= GetBroadcomProcAddress('vc_dispmanx_rect_set');
pointer(vc_dispmanx_resource_create):= GetBroadcomProcAddress('vc_dispmanx_resource_create');
pointer(vc_dispmanx_resource_delete):= GetBroadcomProcAddress('vc_dispmanx_resource_delete');
pointer(vc_dispmanx_display_open):= GetBroadcomProcAddress('vc_dispmanx_display_open');
pointer(vc_dispmanx_display_open_mode):= GetBroadcomProcAddress('vc_dispmanx_display_open_mode');
pointer(vc_dispmanx_display_open_offscreen):= GetBroadcomProcAddress('vc_dispmanx_display_open_offscreen');
pointer(vc_dispmanx_display_reconfigure):= GetBroadcomProcAddress('vc_dispmanx_display_reconfigure');
pointer(vc_dispmanx_display_set_destination):= GetBroadcomProcAddress('vc_dispmanx_display_set_destination');
pointer(vc_dispmanx_display_set_background):= GetBroadcomProcAddress('vc_dispmanx_display_set_background');
pointer(vc_dispmanx_display_get_info):= GetBroadcomProcAddress('vc_dispmanx_display_get_info');
pointer(vc_dispmanx_display_close):= GetBroadcomProcAddress('vc_dispmanx_display_close');
pointer(vc_dispmanx_update_start):= GetBroadcomProcAddress('vc_dispmanx_update_start');
pointer(vc_dispmanx_element_add):= GetBroadcomProcAddress('vc_dispmanx_element_add');
pointer(vc_dispmanx_element_change_source):= GetBroadcomProcAddress('vc_dispmanx_element_change_source');
pointer(vc_dispmanx_element_change_layer):= GetBroadcomProcAddress('vc_dispmanx_element_change_layer');
pointer(vc_dispmanx_element_modified):= GetBroadcomProcAddress('vc_dispmanx_element_modified');
pointer(vc_dispmanx_element_remove):= GetBroadcomProcAddress('vc_dispmanx_element_remove');
pointer(vc_dispmanx_update_submit):= GetBroadcomProcAddress('vc_dispmanx_update_submit');
pointer(vc_dispmanx_update_submit_sync):= GetBroadcomProcAddress('vc_dispmanx_update_submit_sync');
pointer(vc_dispmanx_query_image_formats):= GetBroadcomProcAddress('vc_dispmanx_query_image_formats');
pointer(vc_dispmanx_element_change_attributes):= GetBroadcomProcAddress('vc_dispmanx_element_change_attributes');
//pointer(eglCreateCopyGlobalImageBRCM):= GetEGLProcAddress('eglCreateCopyGlobalImageBRCM ');
pointer(eglDestroyGlobalImageBRCM ):= GetEGLProcAddress('eglDestroyGlobalImageBRCM');
pointer(eglQueryGlobalImageBRCM):= GetEGLProcAddress('eglQueryGlobalImageBRCM');
//pointer(eglInitPerfMonitorBRCM):= GetEGLProcAddress('eglInitPerfMonitorBRCM');
//pointer(eglTermPerfMonitorBRCM):= GetEGLProcAddress('eglTermPerfMonitorBRCM');
pointer(eglInitDriverMonitorBRCM ):= GetEGLProcAddress('eglInitDriverMonitorBRCM');
pointer(eglGetDriverMonitorXMLBRCM ):= GetEGLProcAddress('eglGetDriverMonitorXMLBRCM');
pointer(eglTermDriverMonitorBRCM ):= GetEGLProcAddress('eglTermDriverMonitorBRCM');
//pointer(eglPerfStatsResetBRCM):= GetEGLProcAddress('eglPerfStatsResetBRCM');
//pointer(eglPerfStatsGetBRCM ):= GetEGLProcAddress('eglPerfStatsGetBRCM');
pointer(eglProcStateValid):= GetEGLProcAddress('eglProcStateValid');
pointer(eglFlushBRCM ):= GetEGLProcAddress('eglFlushBRCM');
//pointer(eglProcessMemUsageGetBRCM):= GetEGLProcAddress('eglProcessMemUsageGetBRCM');
//pointer(eglDirectRenderingPointer):= GetEGLProcAddress('eglDirectRenderingPointer');
end;
function LoadBroadcomLibrary: boolean;
var
name: TFileNameString;
begin
if '' <> v_glinit_egldir then SetCurrentDir(v_glinit_egldir);
try
name:= v_glinit_egldir + libbcm;
if Mother^.Debug.Verbose then AddLog(' Loading %0...', [name]);
LibBroadcom := dlopen(PAnsiChar(WideToAnsi(FileNameToUnicode(name))), RTLD_NOW);
Result:= Assigned(LibBroadcom);
if result then begin
LibBroadcomName:= GetDLLFileName(LibBroadcom);
//raspbian surprise
if LibBroadcomName = '' then LibBroadcomName:= name;
end;
if Mother^.Debug.Verbose then
if not result then AddLogComment('FAILED.' + LoadLibraryErrorText())
else AddLogComment('Ok, %0', [LibBroadcomName]);
finally
SetCurrentDir(v_glinit_curdir);
end;
end;
function GetBroadcomProcAddress(ProcName: ansistring): Pointer;
var
baseaddr: pointer;
exename: TFileNameString;
begin
Result:=dlsym(LibBroadcom, PAnsiChar(ProcName));
if Mother^.Debug.Verbose then begin
if Assigned(Result) then begin
exename:= GetExeFileName(Result);
if (LibBroadcomName <> exename) and (LibBroadcomName <> '')
then AddLog(' %0() at %1 in %2 (wrapper %3)', [ProcName, Result, exename, LibBroadcomName])
else AddLog(' %0() at %1 in %2', [ProcName, Result, exename]);
end else begin
AddLog(' %0() NOT FOUND in %1', [ProcName, LibBroadcomName]);
//Die(MI_ERROR_GL_FUNCTION_NOT_FOUND, [ProcName, '' + LibBroadcomName, '']);
end;
end;
end;