mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
vi: fix duplicate decl of Indirect service vi: fix style vi: use s32 over int vi: fix argument names for FatalDrawRectangle
130 lines
4.8 KiB
C
130 lines
4.8 KiB
C
/**
|
|
* @file vi.h
|
|
* @brief Display (vi:*) service IPC wrapper.
|
|
* @author yellows8
|
|
* @copyright libnx Authors
|
|
*/
|
|
#pragma once
|
|
#include "../types.h"
|
|
#include "../kernel/event.h"
|
|
#include "../sf/service.h"
|
|
#include "pl.h"
|
|
|
|
typedef struct {
|
|
char data[0x40];
|
|
} ViDisplayName;
|
|
|
|
typedef struct {
|
|
u64 display_id;
|
|
ViDisplayName display_name;
|
|
bool initialized;
|
|
} ViDisplay;
|
|
|
|
typedef struct {
|
|
u64 layer_id;
|
|
u32 igbp_binder_obj_id;
|
|
bool initialized : 1;
|
|
bool stray_layer : 1;
|
|
} ViLayer;
|
|
|
|
typedef enum {
|
|
ViServiceType_Default = -1,
|
|
ViServiceType_Application = 0,
|
|
ViServiceType_System = 1,
|
|
ViServiceType_Manager = 2,
|
|
} ViServiceType;
|
|
|
|
/// Used by viCreateLayer when CreateStrayLayer is used internally.
|
|
typedef enum {
|
|
ViLayerFlags_Default = 0x1,
|
|
} ViLayerFlags;
|
|
|
|
/// Used with viSetLayerScalingMode.
|
|
typedef enum {
|
|
ViScalingMode_None = 0x0,
|
|
ViScalingMode_FitToLayer = 0x2,
|
|
ViScalingMode_PreserveAspectRatio = 0x4,
|
|
|
|
ViScalingMode_Default = ViScalingMode_FitToLayer,
|
|
} ViScalingMode;
|
|
|
|
/// Used with viSetDisplayPowerState.
|
|
typedef enum {
|
|
ViPowerState_Off = 0, ///< Screen is off.
|
|
ViPowerState_NotScanning = 1, ///< [3.0.0+] Screen is on, but not scanning content.
|
|
ViPowerState_On = 2, ///< [3.0.0+] Screen is on.
|
|
|
|
ViPowerState_On_Deprecated = 1, ///< [1.0.0 - 2.3.0] Screen is on.
|
|
} ViPowerState;
|
|
|
|
/// Used as argument to many capture functions.
|
|
typedef enum {
|
|
ViLayerStack_Default = 0, ///< Default layer stack, includes all layers.
|
|
ViLayerStack_Lcd = 1, ///< Includes only layers for the LCD.
|
|
ViLayerStack_Screenshot = 2, ///< Includes only layers for user screenshots.
|
|
ViLayerStack_Recording = 3, ///< Includes only layers for recording videos.
|
|
ViLayerStack_LastFrame = 4, ///< Includes only layers for the last applet-transition frame.
|
|
ViLayerStack_Arbitrary = 5, ///< Captures some arbitrary layer. This is normally only for am.
|
|
ViLayerStack_ApplicationForDebug = 6, ///< Captures layers for the current application. This is normally used by creport/debugging tools.
|
|
ViLayerStack_Null = 10, ///< Layer stack for the empty display.
|
|
} ViLayerStack;
|
|
|
|
/// Used as argument for certain drawing commands.
|
|
typedef u16 ViColorRgba4444;
|
|
typedef u32 ViColorRgba8888;
|
|
|
|
Result viInitialize(ViServiceType service_type);
|
|
void viExit(void);
|
|
|
|
Service* viGetSession_IApplicationDisplayService(void);
|
|
Service* viGetSession_IHOSBinderDriverRelay(void);
|
|
Service* viGetSession_ISystemDisplayService(void);
|
|
Service* viGetSession_IManagerDisplayService(void);
|
|
Service* viGetSession_IHOSBinderDriverIndirect(void);
|
|
|
|
// Misc functions
|
|
Result viSetContentVisibility(bool v);
|
|
|
|
// Display functions
|
|
|
|
Result viOpenDisplay(const char *display_name, ViDisplay *display);
|
|
Result viCloseDisplay(ViDisplay *display);
|
|
|
|
static inline Result viOpenDefaultDisplay(ViDisplay *display)
|
|
{
|
|
return viOpenDisplay("Default", display);
|
|
}
|
|
|
|
Result viGetDisplayResolution(ViDisplay *display, s32 *width, s32 *height);
|
|
Result viGetDisplayLogicalResolution(ViDisplay *display, s32 *width, s32 *height);
|
|
/// Only available on [3.0.0+].
|
|
Result viSetDisplayMagnification(ViDisplay *display, s32 x, s32 y, s32 width, s32 height);
|
|
Result viGetDisplayVsyncEvent(ViDisplay *display, Event *event_out);
|
|
Result viSetDisplayPowerState(ViDisplay *display, ViPowerState state);
|
|
Result viSetDisplayAlpha(ViDisplay *display, float alpha);
|
|
Result viGetZOrderCountMin(ViDisplay *display, s32 *z);
|
|
Result viGetZOrderCountMax(ViDisplay *display, s32 *z);
|
|
|
|
// Layer functions
|
|
|
|
Result viCreateLayer(const ViDisplay *display, ViLayer *layer);
|
|
Result viCreateManagedLayer(const ViDisplay *display, ViLayerFlags layer_flags, u64 aruid, u64 *layer_id);
|
|
Result viSetLayerSize(ViLayer *layer, s32 width, s32 height);
|
|
Result viSetLayerZ(ViLayer *layer, s32 z);
|
|
Result viSetLayerPosition(ViLayer *layer, float x, float y);
|
|
Result viCloseLayer(ViLayer *layer);
|
|
Result viDestroyManagedLayer(ViLayer *layer);
|
|
|
|
Result viSetLayerScalingMode(ViLayer *layer, ViScalingMode scaling_mode);
|
|
|
|
// IndirectLayer functions
|
|
|
|
Result viGetIndirectLayerImageMap(void* buffer, size_t size, s32 width, s32 height, u64 IndirectLayerConsumerHandle, u64 *out_size, u64 *out_stride);
|
|
Result viGetIndirectLayerImageRequiredMemoryInfo(s32 width, s32 height, u64 *out_size, u64 *out_alignment);
|
|
|
|
// Manager functions
|
|
Result viManagerPrepareFatal(void); ///< [16.0.0+]
|
|
Result viManagerShowFatal(void); ///< [16.0.0+]
|
|
Result viManagerDrawFatalRectangle(s32 x, s32 y, s32 end_x, s32 end_y, ViColorRgba4444 color); ///< [16.0.0+]
|
|
Result viManagerDrawFatalText32(s32 *out_advance, s32 x, s32 y, const u32 *utf32_codepoints, size_t num_codepoints, float scale_x, float scale_y, PlSharedFontType font_type, ViColorRgba8888 bg_color, ViColorRgba8888 fg_color, s32 initial_advance); ///< [16.0.0+]
|