vrclient: Use templates for IVRRenderModels unix side thunks.

This commit is contained in:
Rémi Bernon 2025-01-21 11:22:52 +01:00 committed by Arkadiusz Hiler
parent b38b8e062f
commit ad86a3029e
2 changed files with 65 additions and 132 deletions

View File

@ -4,159 +4,77 @@
#pragma makedep unix
#endif
/* LoadRenderModel(_Async) / FreeRenderModel */
NTSTATUS IVRRenderModels_IVRRenderModels_002_LoadRenderModel( void *args )
template< typename Iface, typename Params >
static NTSTATUS IVRRenderModels_LoadRenderModel( Iface *iface, Params *params, bool wow64 )
{
struct IVRRenderModels_IVRRenderModels_002_LoadRenderModel_params *params = (struct IVRRenderModels_IVRRenderModels_002_LoadRenderModel_params *)args;
struct u_IVRRenderModels_IVRRenderModels_002 *iface = (struct u_IVRRenderModels_IVRRenderModels_002 *)params->u_iface;
struct render_model *model = params->ppRenderModel ? CONTAINING_RECORD( *params->ppRenderModel, struct render_model, w_0912 ) : NULL;
params->_ret = iface->LoadRenderModel( params->pchRenderModelName, params->ppRenderModel ? &model->u_0912 : nullptr );
if (params->_ret == 0 && model) model->w_0912 = *model->u_0912;
static std::remove_reference_t< decltype(**params->ppRenderModel) > tag;
struct render_model *model = params->ppRenderModel ? render_model::from_w( *params->ppRenderModel ) : NULL;
params->_ret = iface->LoadRenderModel( params->pchRenderModelName, params->ppRenderModel ? &model->u_model( tag ) : nullptr );
if (params->_ret == 0 && model) model->w_model( tag ) = *model->u_model( tag );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_002_FreeRenderModel( void *args )
template< typename Iface, typename Params >
static NTSTATUS IVRRenderModels_FreeRenderModel( Iface *iface, Params *params, bool wow64 )
{
struct IVRRenderModels_IVRRenderModels_002_FreeRenderModel_params *params = (struct IVRRenderModels_IVRRenderModels_002_FreeRenderModel_params *)args;
struct u_IVRRenderModels_IVRRenderModels_002 *iface = (struct u_IVRRenderModels_IVRRenderModels_002 *)params->u_iface;
struct render_model *model = CONTAINING_RECORD( params->pRenderModel, struct render_model, w_0912 );
iface->FreeRenderModel( model->u_0912 );
static std::remove_reference_t< decltype(*params->pRenderModel) > tag;
struct render_model *model = params->pRenderModel ? render_model::from_w( params->pRenderModel ) : NULL;
iface->FreeRenderModel( model->u_model( tag ) );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_004_LoadRenderModel_Async( void *args )
template< typename Iface, typename Params >
static NTSTATUS IVRRenderModels_LoadRenderModel_Async( Iface *iface, Params *params, bool wow64 )
{
struct IVRRenderModels_IVRRenderModels_004_LoadRenderModel_Async_params *params = (struct IVRRenderModels_IVRRenderModels_004_LoadRenderModel_Async_params *)args;
struct u_IVRRenderModels_IVRRenderModels_004 *iface = (struct u_IVRRenderModels_IVRRenderModels_004 *)params->u_iface;
struct render_model *model = params->ppRenderModel ? CONTAINING_RECORD( *params->ppRenderModel, struct render_model, w_0912 ) : NULL;
params->_ret = iface->LoadRenderModel_Async( params->pchRenderModelName, params->ppRenderModel ? &model->u_0912 : nullptr );
if (params->_ret == 0 && model) model->w_0912 = *model->u_0912;
static std::remove_reference_t< decltype(**params->ppRenderModel) > tag;
struct render_model *model = params->ppRenderModel ? render_model::from_w( *params->ppRenderModel ) : NULL;
params->_ret = iface->LoadRenderModel_Async( params->pchRenderModelName, params->ppRenderModel ? &model->u_model( tag ) : nullptr );
if (params->_ret == 0 && model) model->w_model( tag ) = *model->u_model( tag );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_004_FreeRenderModel( void *args )
template< typename Iface, typename Params >
static NTSTATUS IVRRenderModels_LoadTexture( Iface *iface, Params *params, bool wow64 )
{
struct IVRRenderModels_IVRRenderModels_004_FreeRenderModel_params *params = (struct IVRRenderModels_IVRRenderModels_004_FreeRenderModel_params *)args;
struct u_IVRRenderModels_IVRRenderModels_004 *iface = (struct u_IVRRenderModels_IVRRenderModels_004 *)params->u_iface;
struct render_model *model = CONTAINING_RECORD( params->pRenderModel, struct render_model, w_0912 );
iface->FreeRenderModel( model->u_0912 );
static std::remove_reference_t< decltype(**params->ppTexture) > tag;
struct render_model_texture_map *map = params->ppTexture ? render_model_texture_map::from_w( *params->ppTexture ) : NULL;
params->_ret = iface->LoadTexture( params->textureId, params->ppTexture ? &map->u_map( tag ) : nullptr );
if (params->_ret == 0 && map) map->w_map( tag ) = *map->u_map( tag );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_005_LoadRenderModel_Async( void *args )
template< typename Iface, typename Params >
static NTSTATUS IVRRenderModels_FreeTexture( Iface *iface, Params *params, bool wow64 )
{
struct IVRRenderModels_IVRRenderModels_005_LoadRenderModel_Async_params *params = (struct IVRRenderModels_IVRRenderModels_005_LoadRenderModel_Async_params *)args;
struct u_IVRRenderModels_IVRRenderModels_005 *iface = (struct u_IVRRenderModels_IVRRenderModels_005 *)params->u_iface;
struct render_model *model = params->ppRenderModel ? CONTAINING_RECORD( *params->ppRenderModel, struct render_model, w_0912 ) : NULL;
params->_ret = iface->LoadRenderModel_Async( params->pchRenderModelName, params->ppRenderModel ? &model->u_0912 : nullptr );
if (params->_ret == 0 && model) model->w_0912 = *model->u_0912;
static std::remove_reference_t< decltype(*params->pTexture) > tag;
struct render_model_texture_map *map = params->pTexture ? render_model_texture_map::from_w( params->pTexture ) : NULL;
iface->FreeTexture( map->u_map( tag ) );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_005_FreeRenderModel( void *args )
template< typename Iface, typename Params >
static NTSTATUS IVRRenderModels_LoadTexture_Async( Iface *iface, Params *params, bool wow64 )
{
struct IVRRenderModels_IVRRenderModels_005_FreeRenderModel_params *params = (struct IVRRenderModels_IVRRenderModels_005_FreeRenderModel_params *)args;
struct u_IVRRenderModels_IVRRenderModels_005 *iface = (struct u_IVRRenderModels_IVRRenderModels_005 *)params->u_iface;
struct render_model *model = CONTAINING_RECORD( params->pRenderModel, struct render_model, w_0912 );
iface->FreeRenderModel( model->u_0912 );
static std::remove_reference_t< decltype(**params->ppTexture) > tag;
struct render_model_texture_map *map = params->ppTexture ? render_model_texture_map::from_w( *params->ppTexture ) : NULL;
params->_ret = iface->LoadTexture_Async( params->textureId, params->ppTexture ? &map->u_map( tag ) : nullptr );
if (params->_ret == 0 && map) map->w_map( tag ) = *map->u_map( tag );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_006_LoadRenderModel_Async( void *args )
{
struct IVRRenderModels_IVRRenderModels_006_LoadRenderModel_Async_params *params = (struct IVRRenderModels_IVRRenderModels_006_LoadRenderModel_Async_params *)args;
struct u_IVRRenderModels_IVRRenderModels_006 *iface = (struct u_IVRRenderModels_IVRRenderModels_006 *)params->u_iface;
struct render_model *model = params->ppRenderModel ? CONTAINING_RECORD( *params->ppRenderModel, struct render_model, w_0912 ) : NULL;
params->_ret = iface->LoadRenderModel_Async( params->pchRenderModelName, params->ppRenderModel ? &model->u_0912 : nullptr );
if (params->_ret == 0 && model) model->w_0912 = *model->u_0912;
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_006_FreeRenderModel( void *args )
{
struct IVRRenderModels_IVRRenderModels_006_FreeRenderModel_params *params = (struct IVRRenderModels_IVRRenderModels_006_FreeRenderModel_params *)args;
struct u_IVRRenderModels_IVRRenderModels_006 *iface = (struct u_IVRRenderModels_IVRRenderModels_006 *)params->u_iface;
struct render_model *model = CONTAINING_RECORD( params->pRenderModel, struct render_model, w_0912 );
iface->FreeRenderModel( model->u_0912 );
return 0;
}
/* LoadTexture(_Async) / FreeTexture */
NTSTATUS IVRRenderModels_IVRRenderModels_002_LoadTexture( void *args )
{
struct IVRRenderModels_IVRRenderModels_002_LoadTexture_params *params = (struct IVRRenderModels_IVRRenderModels_002_LoadTexture_params *)args;
struct u_IVRRenderModels_IVRRenderModels_002 *iface = (struct u_IVRRenderModels_IVRRenderModels_002 *)params->u_iface;
struct render_model_texture_map *map = params->ppTexture ? CONTAINING_RECORD( *params->ppTexture, struct render_model_texture_map, w_090 ) : NULL;
params->_ret = iface->LoadTexture( params->textureId, params->ppTexture ? &map->u_090 : nullptr );
if (params->_ret == 0 && map) map->w_090 = *map->u_090;
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_002_FreeTexture( void *args )
{
struct IVRRenderModels_IVRRenderModels_002_FreeTexture_params *params = (struct IVRRenderModels_IVRRenderModels_002_FreeTexture_params *)args;
struct u_IVRRenderModels_IVRRenderModels_002 *iface = (struct u_IVRRenderModels_IVRRenderModels_002 *)params->u_iface;
struct render_model_texture_map *map = CONTAINING_RECORD( params->pTexture, struct render_model_texture_map, w_090 );
iface->FreeTexture( map->u_090 );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_004_LoadTexture_Async( void *args )
{
struct IVRRenderModels_IVRRenderModels_004_LoadTexture_Async_params *params = (struct IVRRenderModels_IVRRenderModels_004_LoadTexture_Async_params *)args;
struct u_IVRRenderModels_IVRRenderModels_004 *iface = (struct u_IVRRenderModels_IVRRenderModels_004 *)params->u_iface;
struct render_model_texture_map *map = params->ppTexture ? CONTAINING_RECORD( *params->ppTexture, struct render_model_texture_map, w_090 ) : NULL;
params->_ret = iface->LoadTexture_Async( params->textureId, params->ppTexture ? &map->u_090 : nullptr );
if (params->_ret == 0 && map) map->w_090 = *map->u_090;
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_004_FreeTexture( void *args )
{
struct IVRRenderModels_IVRRenderModels_004_FreeTexture_params *params = (struct IVRRenderModels_IVRRenderModels_004_FreeTexture_params *)args;
struct u_IVRRenderModels_IVRRenderModels_004 *iface = (struct u_IVRRenderModels_IVRRenderModels_004 *)params->u_iface;
struct render_model_texture_map *map = CONTAINING_RECORD( params->pTexture, struct render_model_texture_map, w_090 );
iface->FreeTexture( map->u_090 );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_005_LoadTexture_Async( void *args )
{
struct IVRRenderModels_IVRRenderModels_005_LoadTexture_Async_params *params = (struct IVRRenderModels_IVRRenderModels_005_LoadTexture_Async_params *)args;
struct u_IVRRenderModels_IVRRenderModels_005 *iface = (struct u_IVRRenderModels_IVRRenderModels_005 *)params->u_iface;
struct render_model_texture_map *map = params->ppTexture ? CONTAINING_RECORD( *params->ppTexture, struct render_model_texture_map, w_090 ) : NULL;
params->_ret = iface->LoadTexture_Async( params->textureId, params->ppTexture ? &map->u_090 : nullptr );
if (params->_ret == 0 && map) map->w_090 = *map->u_090;
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_005_FreeTexture( void *args )
{
struct IVRRenderModels_IVRRenderModels_005_FreeTexture_params *params = (struct IVRRenderModels_IVRRenderModels_005_FreeTexture_params *)args;
struct u_IVRRenderModels_IVRRenderModels_005 *iface = (struct u_IVRRenderModels_IVRRenderModels_005 *)params->u_iface;
struct render_model_texture_map *map = CONTAINING_RECORD( params->pTexture, struct render_model_texture_map, w_090 );
iface->FreeTexture( map->u_090 );
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_006_LoadTexture_Async( void *args )
{
struct IVRRenderModels_IVRRenderModels_006_LoadTexture_Async_params *params = (struct IVRRenderModels_IVRRenderModels_006_LoadTexture_Async_params *)args;
struct u_IVRRenderModels_IVRRenderModels_006 *iface = (struct u_IVRRenderModels_IVRRenderModels_006 *)params->u_iface;
struct render_model_texture_map *map = params->ppTexture ? CONTAINING_RECORD( *params->ppTexture, struct render_model_texture_map, w_1237 ) : NULL;
params->_ret = iface->LoadTexture_Async( params->textureId, params->ppTexture ? &map->u_1237 : nullptr );
if (params->_ret == 0 && map) map->w_1237 = *map->u_1237;
return 0;
}
NTSTATUS IVRRenderModels_IVRRenderModels_006_FreeTexture( void *args )
{
struct IVRRenderModels_IVRRenderModels_006_FreeTexture_params *params = (struct IVRRenderModels_IVRRenderModels_006_FreeTexture_params *)args;
struct u_IVRRenderModels_IVRRenderModels_006 *iface = (struct u_IVRRenderModels_IVRRenderModels_006 *)params->u_iface;
struct render_model_texture_map *map = CONTAINING_RECORD( params->pTexture, struct render_model_texture_map, w_1237 );
iface->FreeTexture( map->u_1237 );
return 0;
}
VRCLIENT_UNIX_IMPL( IVRRenderModels, 002, FreeRenderModel );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 002, FreeTexture );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 002, LoadRenderModel );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 002, LoadTexture );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 004, FreeRenderModel );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 004, FreeTexture );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 004, LoadRenderModel_Async );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 004, LoadTexture_Async );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 005, FreeRenderModel );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 005, FreeTexture );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 005, LoadRenderModel_Async );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 005, LoadTexture_Async );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 006, FreeRenderModel );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 006, FreeTexture );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 006, LoadRenderModel_Async );
VRCLIENT_UNIX_IMPL( IVRRenderModels, 006, LoadTexture_Async );

View File

@ -30,6 +30,12 @@ struct render_model
{
u_RenderModel_t_0912 *u_0912;
};
#ifdef __cplusplus
static struct render_model *from_w( w_RenderModel_t_0912 const* w_map ) { return CONTAINING_RECORD( w_map, struct render_model, w_0912 ); }
u_RenderModel_t_0912*& u_model( w_RenderModel_t_0912 const& ) { return this->u_0912; }
w_RenderModel_t_0912& w_model( w_RenderModel_t_0912 const& ) { return this->w_0912; }
#endif /* __cplusplus */
};
struct render_model_texture_map
@ -44,6 +50,15 @@ struct render_model_texture_map
u_RenderModel_TextureMap_t_090 *u_090;
u_RenderModel_TextureMap_t_1237 *u_1237;
};
#ifdef __cplusplus
static struct render_model_texture_map *from_w( const w_RenderModel_TextureMap_t_090* w_map ) { return CONTAINING_RECORD( w_map, struct render_model_texture_map, w_090 ); }
static struct render_model_texture_map *from_w( const w_RenderModel_TextureMap_t_1237* w_map ) { return CONTAINING_RECORD( w_map, struct render_model_texture_map, w_1237 ); }
u_RenderModel_TextureMap_t_090*& u_map( w_RenderModel_TextureMap_t_090 const& ) { return this->u_090; }
u_RenderModel_TextureMap_t_1237*& u_map( w_RenderModel_TextureMap_t_1237 const& ) { return this->u_1237; }
w_RenderModel_TextureMap_t_090& w_map( w_RenderModel_TextureMap_t_090 const& ) { return this->w_090; }
w_RenderModel_TextureMap_t_1237& w_map( w_RenderModel_TextureMap_t_1237 const& ) { return this->w_1237; }
#endif /* __cplusplus */
};
struct vrclient_init_params