Show More
Commit Description:
Add missing component and message.
Commit Description:
Add missing component and message.
References:
File last commit:
Show/Diff file:
Action:
FNA/lib/FNA3D/include/FNA3D_SysRenderer.h
155 lines | 3.9 KiB | text/x-c | CLexer
155 lines | 3.9 KiB | text/x-c | CLexer
r690 | /* FNA3D - 3D Graphics Library for FNA | |||
* | ||||
* Copyright (c) 2020-2022 Ethan Lee | ||||
* | ||||
* This software is provided 'as-is', without any express or implied warranty. | ||||
* In no event will the authors be held liable for any damages arising from | ||||
* the use of this software. | ||||
* | ||||
* Permission is granted to anyone to use this software for any purpose, | ||||
* including commercial applications, and to alter it and redistribute it | ||||
* freely, subject to the following restrictions: | ||||
* | ||||
* 1. The origin of this software must not be misrepresented; you must not | ||||
* claim that you wrote the original software. If you use this software in a | ||||
* product, an acknowledgment in the product documentation would be | ||||
* appreciated but is not required. | ||||
* | ||||
* 2. Altered source versions must be plainly marked as such, and must not be | ||||
* misrepresented as being the original software. | ||||
* | ||||
* 3. This notice may not be removed or altered from any source distribution. | ||||
* | ||||
* Ethan "flibitijibibo" Lee <flibitijibibo@flibitijibibo.com> | ||||
* | ||||
*/ | ||||
#ifndef FNA3D_SYSRENDERER_H | ||||
#define FNA3D_SYSRENDERER_H | ||||
#ifdef __cplusplus | ||||
extern "C" { | ||||
#endif /* __cplusplus */ | ||||
/* This header exposes an in-progress extension to access the rendering context | ||||
* of the active FNA3D backend, as well as push texture objects to the backend. | ||||
* | ||||
* In general you do NOT want to use anything in here, in fact this whole | ||||
* extension is skipped unless you explicitly include the header in your | ||||
* application. | ||||
*/ | ||||
#define FNA3D_SYSRENDERER_VERSION_EXT 0 | ||||
typedef enum FNA3D_SysRendererTypeEXT | ||||
{ | ||||
FNA3D_RENDERER_TYPE_OPENGL_EXT, | ||||
FNA3D_RENDERER_TYPE_VULKAN_EXT, | ||||
FNA3D_RENDERER_TYPE_D3D11_EXT, | ||||
FNA3D_RENDERER_TYPE_METAL_EXT /* REMOVED, DO NOT USE */ | ||||
} FNA3D_SysRendererTypeEXT; | ||||
typedef struct FNA3D_SysRendererEXT | ||||
{ | ||||
uint32_t version; | ||||
FNA3D_SysRendererTypeEXT rendererType; | ||||
union | ||||
{ | ||||
#if FNA3D_DRIVER_D3D11 | ||||
struct | ||||
{ | ||||
void *device; /* ID3D11Device */ | ||||
void *context; /* ID3D11DeviceContext */ | ||||
} d3d11; | ||||
#endif /* FNA3D_DRIVER_D3D11 */ | ||||
#if FNA3D_DRIVER_METAL | ||||
struct | ||||
{ | ||||
void *device; /* MTLDevice */ | ||||
void *view; /* SDL_MetalView */ | ||||
} metal; | ||||
#endif /* FNA3D_DRIVER_METAL */ | ||||
#if FNA3D_DRIVER_OPENGL | ||||
struct | ||||
{ | ||||
void *context; /* SDL_GLContext */ | ||||
} opengl; | ||||
#endif /* FNA3D_DRIVER_OPENGL */ | ||||
#if FNA3D_DRIVER_VULKAN | ||||
struct | ||||
{ | ||||
VkInstance instance; | ||||
VkPhysicalDevice physicalDevice; | ||||
VkDevice logicalDevice; | ||||
uint32_t queueFamilyIndex; | ||||
} vulkan; | ||||
#endif /* FNA3D_DRIVER_VULKAN */ | ||||
uint8_t filler[64]; | ||||
} renderer; | ||||
} FNA3D_SysRendererEXT; | ||||
typedef struct FNA3D_SysTextureEXT | ||||
{ | ||||
uint32_t version; | ||||
FNA3D_SysRendererTypeEXT rendererType; | ||||
union | ||||
{ | ||||
#if FNA3D_DRIVER_D3D11 | ||||
struct | ||||
{ | ||||
void *handle; /* ID3D11Resource* */ | ||||
void *shaderView; /* ID3D11ShaderResourceView* */ | ||||
} d3d11; | ||||
#endif /* FNA3D_DRIVER_D3D11 */ | ||||
#if FNA3D_DRIVER_METAL | ||||
struct | ||||
{ | ||||
void *handle; /* MTLTexture */ | ||||
} metal; | ||||
#endif /* FNA3D_DRIVER_METAL */ | ||||
#if FNA3D_DRIVER_OPENGL | ||||
struct | ||||
{ | ||||
uint32_t handle; | ||||
uint32_t target; /* GLenum */ | ||||
} opengl; | ||||
#endif /* FNA3D_DRIVER_OPENGL */ | ||||
#if FNA3D_DRIVER_VULKAN | ||||
#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) | ||||
#define FNA3D_VULKAN_HANDLE_TYPE void* | ||||
#else | ||||
#define FNA3D_VULKAN_HANDLE_TYPE uint64_t | ||||
#endif | ||||
struct | ||||
{ | ||||
FNA3D_VULKAN_HANDLE_TYPE image; /* VkImage */ | ||||
FNA3D_VULKAN_HANDLE_TYPE view; /* VkImageView */ | ||||
} vulkan; | ||||
#endif /* FNA3D_DRIVER_VULKAN */ | ||||
uint8_t filler[64]; | ||||
} texture; | ||||
} FNA3D_SysTextureEXT; | ||||
/* Export the internal rendering context. */ | ||||
FNA3DAPI void FNA3D_GetSysRendererEXT( | ||||
FNA3D_Device *device, | ||||
FNA3D_SysRendererEXT *sysrenderer | ||||
); | ||||
/* Import a texture reference that is marked as internal */ | ||||
FNA3DAPI FNA3D_Texture* FNA3D_CreateSysTextureEXT( | ||||
FNA3D_Device *device, | ||||
FNA3D_SysTextureEXT *systexture | ||||
); | ||||
#ifdef __cplusplus | ||||
} | ||||
#endif /* __cplusplus */ | ||||
#endif /* FNA3D_SYSRENDERER_H */ | ||||
/* vim: set noexpandtab shiftwidth=8 tabstop=8: */ | ||||