#ifndef DMSDK_GRAPHICS_H
#define DMSDK_GRAPHICS_H
#include <stdint.h>
namespace dmGraphics
{
typedef struct Context* HContext;
typedef struct Texture* HTexture;
typedef struct RenderTarget* HRenderTarget;
typedef uintptr_t HVertexProgram;
typedef uintptr_t HFragmentProgram;
typedef uintptr_t HProgram;
typedef uintptr_t HVertexBuffer;
typedef uintptr_t HIndexBuffer;
typedef struct VertexDeclaration* HVertexDeclaration;
enum HandleResult
{
HANDLE_RESULT_OK = 0,
HANDLE_RESULT_NOT_AVAILABLE = -1,
HANDLE_RESULT_ERROR = -2
};
enum RenderTargetAttachment
{
ATTACHMENT_COLOR = 0,
ATTACHMENT_DEPTH = 1,
ATTACHMENT_STENCIL = 2,
MAX_ATTACHMENT_COUNT = 3
};
enum TextureFormat
{
TEXTURE_FORMAT_LUMINANCE = 0,
TEXTURE_FORMAT_LUMINANCE_ALPHA = 1,
TEXTURE_FORMAT_RGB = 2,
TEXTURE_FORMAT_RGBA = 3,
TEXTURE_FORMAT_RGB_16BPP = 4,
TEXTURE_FORMAT_RGBA_16BPP = 5,
TEXTURE_FORMAT_DEPTH = 6,
TEXTURE_FORMAT_STENCIL = 7,
TEXTURE_FORMAT_RGB_PVRTC_2BPPV1 = 8,
TEXTURE_FORMAT_RGB_PVRTC_4BPPV1 = 9,
TEXTURE_FORMAT_RGBA_PVRTC_2BPPV1 = 10,
TEXTURE_FORMAT_RGBA_PVRTC_4BPPV1 = 11,
TEXTURE_FORMAT_RGB_ETC1 = 12,
TEXTURE_FORMAT_R_ETC2 = 13,
TEXTURE_FORMAT_RG_ETC2 = 14,
TEXTURE_FORMAT_RGBA_ETC2 = 15,
TEXTURE_FORMAT_RGBA_ASTC_4x4 = 16,
TEXTURE_FORMAT_RGB_BC1 = 17,
TEXTURE_FORMAT_RGBA_BC3 = 18,
TEXTURE_FORMAT_R_BC4 = 19,
TEXTURE_FORMAT_RG_BC5 = 20,
TEXTURE_FORMAT_RGBA_BC7 = 21,
TEXTURE_FORMAT_RGB16F = 22,
TEXTURE_FORMAT_RGB32F = 23,
TEXTURE_FORMAT_RGBA16F = 24,
TEXTURE_FORMAT_RGBA32F = 25,
TEXTURE_FORMAT_R16F = 26,
TEXTURE_FORMAT_RG16F = 27,
TEXTURE_FORMAT_R32F = 28,
TEXTURE_FORMAT_RG32F = 29,
TEXTURE_FORMAT_COUNT
};
HTexture GetRenderTargetAttachment(HRenderTarget render_target, RenderTargetAttachment attachment_type);
HandleResult GetTextureHandle(HTexture texture, void** out_handle);
enum CompareFunc
{
COMPARE_FUNC_NEVER = 0,
COMPARE_FUNC_LESS = 1,
COMPARE_FUNC_LEQUAL = 2,
COMPARE_FUNC_GREATER = 3,
COMPARE_FUNC_GEQUAL = 4,
COMPARE_FUNC_EQUAL = 5,
COMPARE_FUNC_NOTEQUAL = 6,
COMPARE_FUNC_ALWAYS = 7,
};
enum FaceWinding
{
FACE_WINDING_CCW = 0,
FACE_WINDING_CW = 1,
};
enum StencilOp
{
STENCIL_OP_KEEP = 0,
STENCIL_OP_ZERO = 1,
STENCIL_OP_REPLACE = 2,
STENCIL_OP_INCR = 3,
STENCIL_OP_INCR_WRAP = 4,
STENCIL_OP_DECR = 5,
STENCIL_OP_DECR_WRAP = 6,
STENCIL_OP_INVERT = 7,
};
enum BufferUsage
{
BUFFER_USAGE_STREAM_DRAW = 0,
BUFFER_USAGE_DYNAMIC_DRAW = 1,
BUFFER_USAGE_STATIC_DRAW = 2,
};
enum BufferAccess
{
BUFFER_ACCESS_READ_ONLY = 0,
BUFFER_ACCESS_WRITE_ONLY = 1,
BUFFER_ACCESS_READ_WRITE = 2,
};
enum IndexBufferFormat
{
INDEXBUFFER_FORMAT_16 = 0,
INDEXBUFFER_FORMAT_32 = 1,
};
enum PrimitiveType
{
PRIMITIVE_LINES = 0,
PRIMITIVE_TRIANGLES = 1,
PRIMITIVE_TRIANGLE_STRIP = 2,
};
enum Type
{
TYPE_BYTE = 0,
TYPE_UNSIGNED_BYTE = 1,
TYPE_SHORT = 2,
TYPE_UNSIGNED_SHORT = 3,
TYPE_INT = 4,
TYPE_UNSIGNED_INT = 5,
TYPE_FLOAT = 6,
TYPE_FLOAT_VEC4 = 7,
TYPE_FLOAT_MAT4 = 8,
TYPE_SAMPLER_2D = 9,
TYPE_SAMPLER_CUBE = 10,
};
enum BlendFactor
{
BLEND_FACTOR_ZERO = 0,
BLEND_FACTOR_ONE = 1,
BLEND_FACTOR_SRC_COLOR = 2,
BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
BLEND_FACTOR_DST_COLOR = 4,
BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
BLEND_FACTOR_SRC_ALPHA = 6,
BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
BLEND_FACTOR_DST_ALPHA = 8,
BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
BLEND_FACTOR_SRC_ALPHA_SATURATE = 10,
BLEND_FACTOR_CONSTANT_COLOR = 11,
BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 12,
BLEND_FACTOR_CONSTANT_ALPHA = 13,
BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 14,
};
struct VertexElement
{
const char* m_Name;
uint32_t m_Stream;
uint32_t m_Size;
Type m_Type;
bool m_Normalize;
};
HVertexDeclaration NewVertexDeclaration(HContext context, VertexElement* element, uint32_t count);
HVertexDeclaration NewVertexDeclaration(HContext context, VertexElement* element, uint32_t count, uint32_t stride);
void DeleteVertexDeclaration(HVertexDeclaration vertex_declaration);
HVertexBuffer NewVertexBuffer(HContext context, uint32_t size, const void* data, BufferUsage buffer_usage);
void DeleteVertexBuffer(HVertexBuffer buffer);
void SetVertexBufferData(HVertexBuffer buffer, uint32_t size, const void* data, BufferUsage buffer_usage);
void SetVertexBufferSubData(HVertexBuffer buffer, uint32_t offset, uint32_t size, const void* data);
uint32_t GetMaxElementsVertices(HContext context);
HIndexBuffer NewIndexBuffer(HContext context, uint32_t size, const void* data, BufferUsage buffer_usage);
void DeleteIndexBuffer(HIndexBuffer buffer);
void SetIndexBufferData(HIndexBuffer buffer, uint32_t size, const void* data, BufferUsage buffer_usage);
void SetIndexBufferSubData(HIndexBuffer buffer, uint32_t offset, uint32_t size, const void* data);
bool IsIndexBufferFormatSupported(HContext context, IndexBufferFormat format);
uint32_t GetMaxElementsIndices(HContext context);
bool IsExtensionSupported(HContext context, const char* extension);
bool IsTextureFormatSupported(HContext context, TextureFormat format);
uint32_t GetNumSupportedExtensions(HContext context);
const char* GetSupportedExtension(HContext context, uint32_t index);
}
#endif