forked from MoonsideGames/Refresh
initial commit
commit
715950f44a
|
@ -0,0 +1,15 @@
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
*.dll
|
||||||
|
*.dylib
|
||||||
|
.vs/
|
||||||
|
.vscode/
|
||||||
|
obj/
|
||||||
|
Debug/
|
||||||
|
Release/
|
||||||
|
*.vcxproj.user
|
||||||
|
*.suo
|
||||||
|
.DS_Store
|
||||||
|
xcuserdata/
|
||||||
|
*.xcworkspace/
|
||||||
|
build/
|
|
@ -0,0 +1,101 @@
|
||||||
|
# CMake Project for Refresh
|
||||||
|
# Written by @thatcosmonaut
|
||||||
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
|
project(Refresh C)
|
||||||
|
|
||||||
|
# Options
|
||||||
|
option(BUILD_SHARED_LIBS "Build shared library" ON)
|
||||||
|
|
||||||
|
# Version
|
||||||
|
SET(LIB_MAJOR_VERSION "0")
|
||||||
|
SET(LIB_MINOR_VERSION "1")
|
||||||
|
SET(LIB_REVISION "0")
|
||||||
|
SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}")
|
||||||
|
|
||||||
|
# Build Type
|
||||||
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
|
# By default, we use Release
|
||||||
|
message(STATUS "Setting build type to 'Release' as none was specified.")
|
||||||
|
set(CMAKE_BUILD_TYPE "Release" CACHE
|
||||||
|
STRING "Choose the type of build." FORCE
|
||||||
|
)
|
||||||
|
|
||||||
|
# Set the possible values of build type for cmake-gui
|
||||||
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
|
||||||
|
STRINGS "Debug" "Release" "RelWithDebInfo"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Platform Flags
|
||||||
|
if(APPLE)
|
||||||
|
set(CMAKE_MACOSX_RPATH ON)
|
||||||
|
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9)
|
||||||
|
set(LOBJC "objc")
|
||||||
|
elseif(WIN32)
|
||||||
|
# "Refresh.dll", not "libRefresh.dll"
|
||||||
|
set(CMAKE_SHARED_LIBRARY_PREFIX "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Defines
|
||||||
|
add_definitions(
|
||||||
|
-DREFRESH_DRIVER_VULKAN
|
||||||
|
)
|
||||||
|
|
||||||
|
# Source lists
|
||||||
|
add_library(Refresh
|
||||||
|
# Public Headers
|
||||||
|
include/Refresh.h
|
||||||
|
# Internal Headers
|
||||||
|
src/Refresh_Driver.h
|
||||||
|
src/Refresh_Driver_Vulkan_vkfuncs.h
|
||||||
|
# Source Files
|
||||||
|
src/Refresh.c
|
||||||
|
src/Refresh_Driver_Vulkan.c
|
||||||
|
)
|
||||||
|
|
||||||
|
# Build flags
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_property(TARGET Refresh PROPERTY COMPILE_FLAGS "-std=gnu99 -Wall -Wno-strict-aliasing -pedantic")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(FNA3D)
|
||||||
|
|
||||||
|
# Refresh folders as includes, for other targets to consume
|
||||||
|
target_include_directories(Refresh PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Vulkan-Headers/include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# MinGW builds should statically link libgcc
|
||||||
|
if(MINGW)
|
||||||
|
target_link_libraries(Refresh PRIVATE -static-libgcc)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Soname
|
||||||
|
set_target_properties(Refresh PROPERTIES OUTPUT_NAME "Refresh"
|
||||||
|
VERSION ${LIB_VERSION}
|
||||||
|
SOVERSION ${LIB_MAJOR_VERSION}
|
||||||
|
)
|
||||||
|
|
||||||
|
# SDL2 Dependency
|
||||||
|
if (DEFINED SDL2_INCLUDE_DIRS AND DEFINED SDL2_LIBRARIES)
|
||||||
|
message(STATUS "using pre-defined SDL2 variables SDL2_INCLUDE_DIRS and SDL2_LIBRARIES")
|
||||||
|
target_include_directories(Refresh PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
|
||||||
|
target_include_directories(mojoshader PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
|
||||||
|
target_link_libraries(Refresh PUBLIC ${SDL2_LIBRARIES})
|
||||||
|
else()
|
||||||
|
# Only try to autodetect if both SDL2 variables aren't explicitly set
|
||||||
|
find_package(SDL2 CONFIG)
|
||||||
|
if (TARGET SDL2::SDL2)
|
||||||
|
message(STATUS "using TARGET SDL2::SDL2")
|
||||||
|
target_link_libraries(Refresh PUBLIC SDL2::SDL2)
|
||||||
|
elseif (TARGET SDL2)
|
||||||
|
message(STATUS "using TARGET SDL2")
|
||||||
|
target_link_libraries(Refresh PUBLIC SDL2)
|
||||||
|
else()
|
||||||
|
message(STATUS "no TARGET SDL2::SDL2, or SDL2, using variables")
|
||||||
|
target_include_directories(Refresh PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
|
||||||
|
target_link_libraries(Refresh PUBLIC ${SDL2_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
endif()
|
|
@ -0,0 +1,25 @@
|
||||||
|
/* Refresh - XNA-inspired 3D Graphics Library with modern capabilities
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Evan Hemsley
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Evan "cosmonaut" Hemsley <evan@moonside.games>
|
||||||
|
*
|
||||||
|
*/
|
|
@ -0,0 +1,34 @@
|
||||||
|
This is Refresh, an XNA-inspired 3D graphics library with modern capabilities.
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
Refresh is licensed under the zlib license. See LICENSE for details.
|
||||||
|
|
||||||
|
About Refresh
|
||||||
|
-------------
|
||||||
|
Refresh is directly inspired by FNA3D and intended to be a replacement for XNA's Graphics namespace.
|
||||||
|
XNA 4.0 is a powerful API, but its shader system is outdated and certain restrictions are awkward to handle in a modern context.
|
||||||
|
Refresh intends to provide an ergonomic high-level API that maps nicely to modern graphics pipelines.
|
||||||
|
Refresh will have a Vulkan runtime implementation. Support for other APIs like DX12 may come later.
|
||||||
|
For shaders, we plan to consume SPIR-V bytecode.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
Refresh depends solely on SDL2. Refresh never explicitly uses the C runtime.
|
||||||
|
|
||||||
|
Building Refresh
|
||||||
|
----------------
|
||||||
|
For *nix platforms, use CMake:
|
||||||
|
|
||||||
|
$ mkdir build/
|
||||||
|
$ cd build/
|
||||||
|
$ cmake ../
|
||||||
|
$ make
|
||||||
|
|
||||||
|
Other platforms coming soon.
|
||||||
|
|
||||||
|
Want to contribute?
|
||||||
|
-------------------
|
||||||
|
Issues and pathces can be reported via Github:
|
||||||
|
|
||||||
|
*Put link here*
|
|
@ -0,0 +1,446 @@
|
||||||
|
/* Refresh - XNA-inspired 3D Graphics Library with modern capabilities
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Evan Hemsley
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* Evan "cosmonaut" Hemsley <evan@moonside.games>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <FNA3D.h>
|
||||||
|
|
||||||
|
#ifndef REFRESH_H
|
||||||
|
#define REFRESH_H
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define REFRESHAPI __declspec(dllexport)
|
||||||
|
#define REFRESHCALL __cdecl
|
||||||
|
#else
|
||||||
|
#define REFRESHAPI
|
||||||
|
#define REFRESHCALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -Wpedantic nameless union/struct silencing */
|
||||||
|
#ifndef REFRESHNAMELESS
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define REFRESHNAMELESS __extension__
|
||||||
|
#else
|
||||||
|
#define REFRESHNAMELESS
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
#endif /* REFRESHNAMELESS */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/* Type Declarations */
|
||||||
|
|
||||||
|
typedef struct REFRESH_Device REFRESH_Device;
|
||||||
|
typedef struct REFRESH_Texture REFRESH_Texture;
|
||||||
|
typedef struct REFRESH_Buffer REFRESH_Buffer;
|
||||||
|
typedef struct REFRESH_Renderbuffer REFRESH_Renderbuffer;
|
||||||
|
|
||||||
|
typedef enum REFRESH_PresentMode
|
||||||
|
{
|
||||||
|
REFRESH_PRESENTMODE_IMMEDIATE,
|
||||||
|
REFRESH_PRESENTMODE_MAILBOX,
|
||||||
|
REFRESH_PRESENTMODE_FIFO,
|
||||||
|
REFRESH_PRESENTMODE_FIFO_RELAXED
|
||||||
|
} REFRESH_PresentMode;
|
||||||
|
|
||||||
|
typedef enum REFRESH_ClearOptions
|
||||||
|
{
|
||||||
|
REFRESH_CLEAROPTIONS_TARGET = 1,
|
||||||
|
REFRESH_CLEAROPTIONS_DEPTH = 2,
|
||||||
|
REFRESH_CLEAROPTIONS_STENCIL = 4,
|
||||||
|
} REFRESH_ClearOptions;
|
||||||
|
|
||||||
|
typedef enum REFRESH_PrimitiveType
|
||||||
|
{
|
||||||
|
REFRESH_PRIMITIVETYPE_POINTLIST,
|
||||||
|
REFRESH_PRIMITIVETYPE_LINELIST,
|
||||||
|
REFRESH_PRIMITIVETYPE_LINESTRIP,
|
||||||
|
REFRESH_PRIMITIVETYPE_TRIANGLELIST,
|
||||||
|
REFRESH_PRIMITIVETYPE_TRIANGLESTRIP
|
||||||
|
} REFRESH_PrimitiveType;
|
||||||
|
|
||||||
|
typedef enum REFRESH_IndexElementSize
|
||||||
|
{
|
||||||
|
REFRESH_INDEXELEMENTSIZE_16BIT,
|
||||||
|
REFRESH_INDEXELEMENTSIZE_32BIT
|
||||||
|
} REFRESH_IndexElementSize;
|
||||||
|
|
||||||
|
typedef enum REFRESH_SurfaceFormat
|
||||||
|
{
|
||||||
|
REFRESH_SURFACEFORMAT_R8G8B8A8,
|
||||||
|
REFRESH_SURFACEFORMAT_R5G6B5,
|
||||||
|
REFRESH_SURFACEFORMAT_A1R5G5B5,
|
||||||
|
REFRESH_SURFACEFORMAT_B4G4R4A4,
|
||||||
|
REFRESH_SURFACEFORMAT_BC1,
|
||||||
|
REFRESH_SURFACEFORMAT_BC2,
|
||||||
|
REFRESH_SURFACEFORMAT_BC3,
|
||||||
|
REFRESH_SURFACEFORMAT_R8G8_SNORM,
|
||||||
|
REFRESH_SURFACEFORMAT_R8G8B8A8_SNORM,
|
||||||
|
REFRESH_SURFACEFORMAT_A2R10G10B10,
|
||||||
|
REFRESH_SURFACEFORMAT_R16G16,
|
||||||
|
REFRESH_SURFACEFORMAT_R16G16B16A16,
|
||||||
|
REFRESH_SURFACEFORMAT_R8,
|
||||||
|
REFRESH_SURFACEFORMAT_R32_SFLOAT,
|
||||||
|
REFRESH_SURFACEFORMAT_R32G32_SFLOAT,
|
||||||
|
REFRESH_SURFACEFORMAT_R32G32B32A32_SFLOAT,
|
||||||
|
REFRESH_SURFACEFORMAT_R16_SFLOAT,
|
||||||
|
REFRESH_SURFACEFORMAT_R16G16_SFLOAT,
|
||||||
|
REFRESH_SURFACEFORMAT_R16G16B16A16_SFLOAT
|
||||||
|
} REFRESH_SurfaceFormat;
|
||||||
|
|
||||||
|
typedef enum REFRESH_DepthFormat
|
||||||
|
{
|
||||||
|
REFRESH_DEPTHFORMAT_D16_UNORM_S8_UINT,
|
||||||
|
REFRESH_DEPTHFORMAT_D24_UNORM_S8_UINT,
|
||||||
|
REFRESH_DEPTHFORMAT_D32_SFLOAT_S8_UINT
|
||||||
|
} REFRESH_DepthFormat;
|
||||||
|
|
||||||
|
typedef enum REFRESH_CubeMapFace
|
||||||
|
{
|
||||||
|
REFRESH_CUBEMAPFACE_POSITIVEX,
|
||||||
|
REFRESH_CUBEMAPFACE_NEGATIVEX,
|
||||||
|
REFRESH_CUBEMAPFACE_POSITIVEY,
|
||||||
|
REFRESH_CUBEMAPFACE_NEGATIVEY,
|
||||||
|
REFRESH_CUBEMAPFACE_POSITIVEZ,
|
||||||
|
REFRESH_CUBEMAPFACE_NEGATIVEZ
|
||||||
|
} REFRESH_CubeMapFace;
|
||||||
|
|
||||||
|
typedef enum REFRESH_BufferUsage
|
||||||
|
{
|
||||||
|
REFRESH_BUFFERUSAGE_STATIC,
|
||||||
|
REFRESH_BUFFERUSAGE_DYNAMIC
|
||||||
|
} REFRESH_BufferUsage;
|
||||||
|
|
||||||
|
typedef enum REFRESH_Blend
|
||||||
|
{
|
||||||
|
REFRESH_BLEND_ONE,
|
||||||
|
REFRESH_BLEND_ZERO,
|
||||||
|
REFRESH_BLEND_SOURCECOLOR,
|
||||||
|
REFRESH_BLEND_INVERSESOURCECOLOR,
|
||||||
|
REFRESH_BLEND_SOURCEALPHA,
|
||||||
|
REFRESH_BLEND_INVERSESOURCEALPHA,
|
||||||
|
REFRESH_BLEND_DESTINATIONCOLOR,
|
||||||
|
REFRESH_BLEND_INVERSEDESTINATIONCOLOR,
|
||||||
|
REFRESH_BLEND_DESTINATIONALPHA,
|
||||||
|
REFRESH_BLEND_INVERSEDESTINATIONALPHA,
|
||||||
|
REFRESH_BLEND_BLENDFACTOR,
|
||||||
|
REFRESH_BLEND_INVERSEBLENDFACTOR,
|
||||||
|
REFRESH_BLEND_SOURCEALPHASATURATION
|
||||||
|
} REFRESH_Blend;
|
||||||
|
|
||||||
|
typedef enum REFRESH_BlendFunction
|
||||||
|
{
|
||||||
|
REFRESH_BLENDFUNCTION_ADD,
|
||||||
|
REFRESH_BLENDFUNCTION_SUBTRACT,
|
||||||
|
REFRESH_BLENDFUNCTION_REVERSESUBTRACT,
|
||||||
|
REFRESH_BLENDFUNCTION_MAX,
|
||||||
|
REFRESH_BLENDFUNCTION_MIN
|
||||||
|
} REFRESH_BlendFunction;
|
||||||
|
|
||||||
|
typedef enum REFRESH_ColorWriteChannels
|
||||||
|
{
|
||||||
|
REFRESH_COLORWRITECHANNELS_NONE = 0,
|
||||||
|
REFRESH_COLORWRITECHANNELS_RED = 1,
|
||||||
|
REFRESH_COLORWRITECHANNELS_GREEN = 2,
|
||||||
|
REFRESH_COLORWRITECHANNELS_BLUE = 4,
|
||||||
|
REFRESH_COLORWRITECHANNELS_ALPHA = 8,
|
||||||
|
REFRESH_COLORWRITECHANNELS_ALL = 15
|
||||||
|
} REFRESH_ColorWriteChannels;
|
||||||
|
|
||||||
|
typedef enum REFRESH_StencilOperation
|
||||||
|
{
|
||||||
|
REFRESH_STENCILOPERATION_KEEP,
|
||||||
|
REFRESH_STENCILOPERATION_ZERO,
|
||||||
|
REFRESH_STENCILOPERATION_REPLACE,
|
||||||
|
REFRESH_STENCILOPERATION_INCREMENT,
|
||||||
|
REFRESH_STENCILOPERATION_DECREMENT,
|
||||||
|
REFRESH_STENCILOPERATION_INCREMENTSATURATION,
|
||||||
|
REFRESH_STENCILOPERATION_DECREMENTSATURATION,
|
||||||
|
REFRESH_STENCILOPERATION_INVERT
|
||||||
|
} REFRESH_StencilOperation;
|
||||||
|
|
||||||
|
typedef enum REFRESH_CompareFunction
|
||||||
|
{
|
||||||
|
REFRESH_COMPAREFUNCTION_ALWAYS,
|
||||||
|
REFRESH_COMPAREFUNCTION_NEVER,
|
||||||
|
REFRESH_COMPAREFUNCTION_LESS,
|
||||||
|
REFRESH_COMPAREFUNCTION_LESSEQUAL,
|
||||||
|
REFRESH_COMPAREFUNCTION_EQUAL,
|
||||||
|
REFRESH_COMPAREFUNCTION_GREATEREQUAL,
|
||||||
|
REFRESH_COMPAREFUNCTION_GREATER,
|
||||||
|
REFRESH_COMPAREFUNCTION_NOTEQUAL
|
||||||
|
} REFRESH_CompareFunction;
|
||||||
|
|
||||||
|
typedef enum REFRESH_CullMode
|
||||||
|
{
|
||||||
|
REFRESH_CULLMODE_NONE,
|
||||||
|
REFRESH_CULLMODE_CULLCLOCKWISEFACE,
|
||||||
|
REFRESH_CULLMODE_CULLCOUNTERCLOCKWISEFACE
|
||||||
|
} REFRESH_CullMode;
|
||||||
|
|
||||||
|
typedef enum REFRESH_FillMode
|
||||||
|
{
|
||||||
|
REFRESH_FILLMODE_SOLID,
|
||||||
|
REFRESH_FILLMODE_WIREFRAME
|
||||||
|
} REFRESH_FillMode;
|
||||||
|
|
||||||
|
typedef enum REFRESH_TextureAddressMode
|
||||||
|
{
|
||||||
|
REFRESH_TEXTUREADDRESSMODE_WRAP,
|
||||||
|
REFRESH_TEXTUREADDRESSMODE_CLAMP,
|
||||||
|
REFRESH_TEXTUREADDRESSMODE_MIRROR
|
||||||
|
} REFRESH_TextureAddressMode;
|
||||||
|
|
||||||
|
typedef enum REFRESH_TextureFilter
|
||||||
|
{
|
||||||
|
REFRESH_TEXTUREFILTER_LINEAR,
|
||||||
|
REFRESH_TEXTUREFILTER_POINT,
|
||||||
|
REFRESH_TEXTUREFILTER_ANISOTROPIC,
|
||||||
|
REFRESH_TEXTUREFILTER_LINEAR_MIPPOINT,
|
||||||
|
REFRESH_TEXTUREFILTER_POINT_MIPLINEAR,
|
||||||
|
REFRESH_TEXTUREFILTER_MINLINEAR_MAGPOINT_MIPLINEAR,
|
||||||
|
REFRESH_TEXTUREFILTER_MINLINEAR_MAGPOINT_MIPPOINT,
|
||||||
|
REFRESH_TEXTUREFILTER_MINPOINT_MAGLINEAR_MIPLINEAR,
|
||||||
|
REFRESH_TEXTUREFILTER_MINPOINT_MAGLINEAR_MIPPOINT
|
||||||
|
} REFRESH_TextureFilter;
|
||||||
|
|
||||||
|
typedef enum REFRESH_VertexElementFormat
|
||||||
|
{
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_SINGLE,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_VECTOR2,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_VECTOR3,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_VECTOR4,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_COLOR,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_BYTE4,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_SHORT2,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_SHORT4,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_NORMALIZEDSHORT2,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_NORMALIZEDSHORT4,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_HALFVECTOR2,
|
||||||
|
REFRESH_VERTEXELEMENTFORMAT_HALFVECTOR4
|
||||||
|
} REFRESH_VertexElementFormat;
|
||||||
|
|
||||||
|
/* Structures, should match XNA 4.0 */
|
||||||
|
|
||||||
|
typedef struct REFRESH_Color
|
||||||
|
{
|
||||||
|
uint8_t r;
|
||||||
|
uint8_t g;
|
||||||
|
uint8_t b;
|
||||||
|
uint8_t a;
|
||||||
|
} REFRESH_Color;
|
||||||
|
|
||||||
|
typedef struct REFRESH_Rect
|
||||||
|
{
|
||||||
|
int32_t x;
|
||||||
|
int32_t y;
|
||||||
|
int32_t w;
|
||||||
|
int32_t h;
|
||||||
|
} REFRESH_Rect;
|
||||||
|
|
||||||
|
typedef struct REFRESH_Vec4
|
||||||
|
{
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
float z;
|
||||||
|
float w;
|
||||||
|
} REFRESH_Vec4;
|
||||||
|
|
||||||
|
typedef struct REFRESH_Viewport
|
||||||
|
{
|
||||||
|
int32_t x;
|
||||||
|
int32_t y;
|
||||||
|
int32_t w;
|
||||||
|
int32_t h;
|
||||||
|
float minDepth;
|
||||||
|
float maxDepth;
|
||||||
|
} REFRESH_Viewport;
|
||||||
|
|
||||||
|
typedef struct REFRESH_PresentationParameters
|
||||||
|
{
|
||||||
|
uint32_t backBufferWidth;
|
||||||
|
uint32_t backBufferHeight;
|
||||||
|
void* deviceWindowHandle;
|
||||||
|
REFRESH_PresentMode presentMode;
|
||||||
|
} REFRESH_PresentationParameters;
|
||||||
|
|
||||||
|
typedef struct REFRESH_BlendState
|
||||||
|
{
|
||||||
|
REFRESH_Blend colorSourceBlend;
|
||||||
|
REFRESH_Blend colorDestinationBlend;
|
||||||
|
REFRESH_BlendFunction colorBlendFunction;
|
||||||
|
REFRESH_Blend alphaSourceBlend;
|
||||||
|
REFRESH_Blend alphaDestinationBlend;
|
||||||
|
REFRESH_BlendFunction alphaBlendFunction;
|
||||||
|
REFRESH_ColorWriteChannels colorWriteEnable;
|
||||||
|
REFRESH_ColorWriteChannels colorWriteEnable1;
|
||||||
|
REFRESH_ColorWriteChannels colorWriteEnable2;
|
||||||
|
REFRESH_ColorWriteChannels colorWriteEnable3;
|
||||||
|
REFRESH_Color blendFactor;
|
||||||
|
int32_t multiSampleMask;
|
||||||
|
} REFRESH_BlendState;
|
||||||
|
|
||||||
|
typedef struct REFRESH_DepthStencilState
|
||||||
|
{
|
||||||
|
uint8_t depthBufferEnable;
|
||||||
|
uint8_t depthBufferWriteEnable;
|
||||||
|
REFRESH_CompareFunction depthBufferFunction;
|
||||||
|
uint8_t stencilEnable;
|
||||||
|
int32_t stencilMask;
|
||||||
|
int32_t stencilWriteMask;
|
||||||
|
uint8_t twoSidedStencilMode;
|
||||||
|
REFRESH_StencilOperation stencilFail;
|
||||||
|
REFRESH_StencilOperation stencilDepthBufferFail;
|
||||||
|
REFRESH_StencilOperation stencilPass;
|
||||||
|
REFRESH_CompareFunction stencilFunction;
|
||||||
|
REFRESH_StencilOperation ccwStencilFail;
|
||||||
|
REFRESH_StencilOperation ccwStencilDepthBufferFail;
|
||||||
|
REFRESH_StencilOperation ccwStencilPass;
|
||||||
|
REFRESH_CompareFunction ccwStencilFunction;
|
||||||
|
int32_t referenceStencil;
|
||||||
|
} REFRESH_DepthStencilState;
|
||||||
|
|
||||||
|
typedef struct REFRESH_RasterizerState
|
||||||
|
{
|
||||||
|
REFRESH_FillMode fillMode;
|
||||||
|
REFRESH_CullMode cullMode;
|
||||||
|
float depthBias;
|
||||||
|
float slopeScaleDepthBias;
|
||||||
|
uint8_t scissorTestEnable;
|
||||||
|
uint8_t multiSampleAntiAlias;
|
||||||
|
} REFRESH_RasterizerState;
|
||||||
|
|
||||||
|
typedef struct REFRESH_SamplerState
|
||||||
|
{
|
||||||
|
REFRESH_TextureFilter filter;
|
||||||
|
REFRESH_TextureAddressMode addressU;
|
||||||
|
REFRESH_TextureAddressMode addressV;
|
||||||
|
REFRESH_TextureAddressMode addressW;
|
||||||
|
float mipMapLevelOfDetailBias;
|
||||||
|
int32_t maxAnisotropy;
|
||||||
|
int32_t maxMipLevel;
|
||||||
|
} REFRESH_SamplerState;
|
||||||
|
|
||||||
|
typedef struct REFRESH_VertexElement
|
||||||
|
{
|
||||||
|
int32_t offset;
|
||||||
|
REFRESH_VertexElementFormat vertexElementFormat;
|
||||||
|
int32_t usageIndex;
|
||||||
|
} REFRESH_VertexElement;
|
||||||
|
|
||||||
|
typedef struct REFRESH_VertexDeclaration
|
||||||
|
{
|
||||||
|
int32_t vertexStride;
|
||||||
|
int32_t elementCount;
|
||||||
|
REFRESH_VertexElement *elements;
|
||||||
|
} REFRESH_VertexDeclaration;
|
||||||
|
|
||||||
|
typedef struct REFRESH_VertexBufferBinding
|
||||||
|
{
|
||||||
|
REFRESH_Buffer *vertexBuffer;
|
||||||
|
REFRESH_VertexDeclaration vertexDeclaration;
|
||||||
|
int32_t vertexOffset;
|
||||||
|
int32_t instanceFrequency;
|
||||||
|
} REFRESH_VertexBufferBinding;
|
||||||
|
|
||||||
|
/* FIXME: can we deviate from FNA3D in a nice way user-side here? */
|
||||||
|
typedef struct REFRESH_RenderTargetBinding
|
||||||
|
{
|
||||||
|
/* Basic target information */
|
||||||
|
#define REFRESH_RENDERTARGET_TYPE_2D 0
|
||||||
|
#define REFRESH_RENDERTARGET_TYPE_CUBE 1
|
||||||
|
uint8_t type;
|
||||||
|
REFRESHNAMELESS union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
int32_t width;
|
||||||
|
int32_t height;
|
||||||
|
} twod;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
int32_t size;
|
||||||
|
REFRESH_CubeMapFace face;
|
||||||
|
} cube;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* If this is >1, you MUST call ResolveTarget after rendering! */
|
||||||
|
int32_t levelCount;
|
||||||
|
|
||||||
|
/* If this is >1, colorBuffer MUST be non-NULL! */
|
||||||
|
int32_t multiSampleCount;
|
||||||
|
|
||||||
|
/* Destination texture. This MUST be non-NULL! */
|
||||||
|
REFRESH_Texture *texture;
|
||||||
|
|
||||||
|
/* If this is non-NULL, you MUST call ResolveTarget after rendering! */
|
||||||
|
REFRESH_Renderbuffer *colorBuffer;
|
||||||
|
} FNA3D_RenderTargetBinding;
|
||||||
|
|
||||||
|
/* Version API */
|
||||||
|
|
||||||
|
#define REFRESH_ABI_VERSION 0
|
||||||
|
#define REFRESH_MAJOR_VERSION 0
|
||||||
|
#define REFRESH_MINOR_VERSION 1
|
||||||
|
#define REFRESH_PATCH_VERSION 0
|
||||||
|
|
||||||
|
#define REFRESH_COMPILED_VERSION ( \
|
||||||
|
(REFRESH_ABI_VERSION * 100 * 100 * 100) + \
|
||||||
|
(REFRESH_MAJOR_VERSION * 100 * 100) + \
|
||||||
|
(REFRESH_MINOR_VERSION * 100) + \
|
||||||
|
(REFRESH_PATCH_VERSION) \
|
||||||
|
)
|
||||||
|
|
||||||
|
REFRESHAPI uint32_t REFRESH_LinkedVersion(void);
|
||||||
|
|
||||||
|
/* Functions */
|
||||||
|
|
||||||
|
/* Logging */
|
||||||
|
|
||||||
|
typedef void (REFRESHCALL * REFRESH_LogFunc)(const char *msg);
|
||||||
|
|
||||||
|
/* Reroutes Refresh's logging to custom logging functions.
|
||||||
|
*
|
||||||
|
* info: Basic logs that might be useful to have stored for support.
|
||||||
|
* warn: Something went wrong, but it's really just annoying, not fatal.
|
||||||
|
* error: You better have this stored somewhere because it's crashing now!
|
||||||
|
*/
|
||||||
|
REFRESHAPI void REFRESH_HookLogFunctions(
|
||||||
|
REFRESH_LogFunc info,
|
||||||
|
REFRESH_LogFunc warn,
|
||||||
|
REFRESH_LogFunc error
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* REFRESH_H */
|
||||||
|
|
||||||
|
/* vim: set noexpandtab shiftwidth=8 tabstop=8: */
|
Loading…
Reference in New Issue