mirror of
https://github.com/yawut/SDL.git
synced 2026-03-21 17:34:36 -05:00
video/wiiu: Add flags to only draw on TV or Gamepad (#1)
This commit is contained in:
parent
b6873f94f4
commit
f814e40fcf
|
|
@ -113,13 +113,15 @@ typedef enum
|
|||
SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported.
|
||||
On macOS NSHighResolutionCapable must be set true in the
|
||||
application's Info.plist for this to have any effect. */
|
||||
SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to INPUT_GRABBED) */
|
||||
SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */
|
||||
SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */
|
||||
SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */
|
||||
SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */
|
||||
SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */
|
||||
SDL_WINDOW_VULKAN = 0x10000000 /**< window usable for Vulkan surface */
|
||||
SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to INPUT_GRABBED) */
|
||||
SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */
|
||||
SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */
|
||||
SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */
|
||||
SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */
|
||||
SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */
|
||||
SDL_WINDOW_WIIU_GAMEPAD_ONLY = 0x01000000, /**< Wii U: window must be drawn only on the Gamepad */
|
||||
SDL_WINDOW_WIIU_TV_ONLY = 0x02000000, /**< Wii U: window must be drawn only on the TV */
|
||||
SDL_WINDOW_VULKAN = 0x10000000 /**< window usable for Vulkan surface */
|
||||
} SDL_WindowFlags;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1351,7 +1351,7 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen)
|
|||
}
|
||||
|
||||
#define CREATE_FLAGS \
|
||||
(SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_POPUP_MENU | SDL_WINDOW_UTILITY | SDL_WINDOW_TOOLTIP | SDL_WINDOW_VULKAN | SDL_WINDOW_MINIMIZED)
|
||||
(SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_POPUP_MENU | SDL_WINDOW_UTILITY | SDL_WINDOW_TOOLTIP | SDL_WINDOW_VULKAN | SDL_WINDOW_MINIMIZED | SDL_WINDOW_WIIU_GAMEPAD_ONLY | SDL_WINDOW_WIIU_TV_ONLY)
|
||||
|
||||
static SDL_INLINE SDL_bool
|
||||
IsAcceptingDragAndDrop(void)
|
||||
|
|
|
|||
|
|
@ -92,6 +92,75 @@ static int WIIU_CreateSDLWindow(_THIS, SDL_Window *window) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
static void render_scene(WIIU_WindowData *data) {
|
||||
WHBGfxClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
wiiuSetTextureShader();
|
||||
|
||||
GX2SetVertexUniformReg(wiiuTextureShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)u_viewSize);
|
||||
GX2SetVertexUniformReg(wiiuTextureShader.vertexShader->uniformVars[1].offset, 4, (uint32_t *)u_texSize);
|
||||
GX2SetPixelUniformReg(wiiuTextureShader.pixelShader->uniformVars[0].offset, 4, (uint32_t*)u_mod);
|
||||
GX2RSetAttributeBuffer(&position_buffer, 0, position_buffer.elemSize, 0);
|
||||
GX2RSetAttributeBuffer(&tex_coord_buffer, 1, tex_coord_buffer.elemSize, 0);
|
||||
|
||||
GX2SetPixelTexture(&data->texture, wiiuTextureShader.pixelShader->samplerVars[0].location);
|
||||
GX2SetPixelSampler(&sampler, wiiuTextureShader.pixelShader->samplerVars[0].location);
|
||||
|
||||
GX2DrawEx(GX2_PRIMITIVE_MODE_QUADS, 4, 0, 1);
|
||||
}
|
||||
|
||||
static int WIIU_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
|
||||
{
|
||||
WIIU_WindowData *data = (WIIU_WindowData *) SDL_GetWindowData(window, WIIU_WINDOW_DATA);
|
||||
Uint32 flags = SDL_GetWindowFlags(window);
|
||||
float a_position[8];
|
||||
float* buffer;
|
||||
int x, y, w, h;
|
||||
|
||||
SDL_GetWindowPosition(window, &x, &y);
|
||||
SDL_GetWindowSize(window, &w, &h);
|
||||
a_position[0] = (float)x; a_position[1] = (float)y;
|
||||
a_position[2] = (float)(x + w); a_position[3] = (float)y;
|
||||
a_position[4] = (float)(x + w); a_position[5] = (float)(y + h);
|
||||
a_position[6] = (float)x; a_position[7] = (float)(y + h);
|
||||
|
||||
buffer = GX2RLockBufferEx(&position_buffer, 0);
|
||||
if (buffer) {
|
||||
memcpy(buffer, a_position, position_buffer.elemSize * position_buffer.elemCount);
|
||||
}
|
||||
GX2RUnlockBufferEx(&position_buffer, 0);
|
||||
|
||||
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_TEXTURE, data->texture.surface.image, data->texture.surface.imageSize);
|
||||
|
||||
WHBGfxBeginRender();
|
||||
|
||||
if (!(flags & SDL_WINDOW_WIIU_GAMEPAD_ONLY)) {
|
||||
WHBGfxBeginRenderTV();
|
||||
render_scene(data);
|
||||
WHBGfxFinishRenderTV();
|
||||
}
|
||||
|
||||
if (!(flags & SDL_WINDOW_WIIU_TV_ONLY)) {
|
||||
WHBGfxBeginRenderDRC();
|
||||
render_scene(data);
|
||||
WHBGfxFinishRenderDRC();
|
||||
}
|
||||
|
||||
WHBGfxFinishRender();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void WIIU_DestroyWindowFramebuffer(_THIS, SDL_Window *window)
|
||||
{
|
||||
WIIU_WindowData *data = (WIIU_WindowData*) SDL_GetWindowData(window, WIIU_WINDOW_DATA);
|
||||
SDL_FreeSurface(data->surface);
|
||||
MEMFreeToDefaultHeap(data->texture.surface.image);
|
||||
SDL_free(data);
|
||||
}
|
||||
|
||||
>>>>>>> video/wiiu: Add flags to only draw on TV or Gamepad (#1)
|
||||
static int WIIU_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode)
|
||||
{
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user