using System.Numerics;
using System.Runtime.InteropServices;
using System.Security;
namespace Raylib_cs
{
[SuppressUnmanagedCodeSecurity]
public static unsafe partial class Rlgl
{
///
/// Used by DllImport to load the native library
///
public const string NativeLibName = "raylib";
public const int DEFAULT_BATCH_BUFFER_ELEMENTS = 8192;
public const int DEFAULT_BATCH_BUFFERS = 1;
public const int DEFAULT_BATCH_DRAWCALLS = 256;
public const int MAX_BATCH_ACTIVE_TEXTURES = 4;
public const int MAX_MATRIX_STACK_SIZE = 32;
public const float RL_CULL_DISTANCE_NEAR = 0.01f;
public const float RL_CULL_DISTANCE_FAR = 1000.0f;
// Texture parameters (equivalent to OpenGL defines)
public const int RL_TEXTURE_WRAP_S = 0x2802;
public const int RL_TEXTURE_WRAP_T = 0x2803;
public const int RL_TEXTURE_MAG_FILTER = 0x2800;
public const int RL_TEXTURE_MIN_FILTER = 0x2801;
public const int RL_TEXTURE_FILTER_NEAREST = 0x2600;
public const int RL_TEXTURE_FILTER_LINEAR = 0x2601;
public const int RL_TEXTURE_FILTER_MIP_NEAREST = 0x2700;
public const int RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR = 0x2702;
public const int RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST = 0x2701;
public const int RL_TEXTURE_FILTER_MIP_LINEAR = 0x2703;
public const int RL_TEXTURE_FILTER_ANISOTROPIC = 0x3000;
public const int RL_TEXTURE_MIPMAP_BIAS_RATIO = 0x4000;
public const int RL_TEXTURE_WRAP_REPEAT = 0x2901;
public const int RL_TEXTURE_WRAP_CLAMP = 0x812F;
public const int RL_TEXTURE_WRAP_MIRROR_REPEAT = 0x8370;
public const int RL_TEXTURE_WRAP_MIRROR_CLAMP = 0x8742;
// GL equivalent data types
public const int RL_UNSIGNED_BYTE = 0x1401;
public const int RL_FLOAT = 0x1406;
// Buffer usage hint
public const int RL_STREAM_DRAW = 0x88E0;
public const int RL_STREAM_READ = 0x88E1;
public const int RL_STREAM_COPY = 0x88E2;
public const int RL_STATIC_DRAW = 0x88E4;
public const int RL_STATIC_READ = 0x88E5;
public const int RL_STATIC_COPY = 0x88E6;
public const int RL_DYNAMIC_DRAW = 0x88E8;
public const int RL_DYNAMIC_READ = 0x88E9;
public const int RL_DYNAMIC_COPY = 0x88EA;
// GL blending factors
public const int RL_ZERO = 0;
public const int RL_ONE = 1;
public const int RL_SRC_COLOR = 0x0300;
public const int RL_ONE_MINUS_SRC_COLOR = 0x0301;
public const int RL_SRC_ALPHA = 0x0302;
public const int RL_ONE_MINUS_SRC_ALPHA = 0x0303;
public const int RL_DST_ALPHA = 0x0304;
public const int RL_ONE_MINUS_DST_ALPHA = 0x0305;
public const int RL_DST_COLOR = 0x0306;
public const int RL_ONE_MINUS_DST_COLOR = 0x0307;
public const int RL_SRC_ALPHA_SATURATE = 0x0308;
public const int RL_CONSTANT_COLOR = 0x8001;
public const int RL_ONE_MINUS_CONSTANT_COLOR = 0x8002;
public const int RL_CONSTANT_ALPHA = 0x8003;
public const int RL_ONE_MINUS_CONSTANT_ALPHA = 0x8004;
// GL blending functions/equations
public const int RL_FUNC_ADD = 0x8006;
public const int RL_MIN = 0x8007;
public const int RL_MAX = 0x8008;
public const int RL_FUNC_SUBTRACT = 0x800A;
public const int RL_FUNC_REVERSE_SUBTRACT = 0x800B;
public const int RL_BLEND_EQUATION = 0x8009;
public const int RL_BLEND_EQUATION_RGB = 0x8009;
public const int RL_BLEND_EQUATION_ALPHA = 0x883D;
public const int RL_BLEND_DST_RGB = 0x80C8;
public const int RL_BLEND_SRC_RGB = 0x80C9;
public const int RL_BLEND_DST_ALPHA = 0x80CA;
public const int RL_BLEND_SRC_ALPHA = 0x80CB;
public const int RL_BLEND_COLOR = 0x8005;
// ------------------------------------------------------------------------------------
// Functions Declaration - Matrix operations
// ------------------------------------------------------------------------------------
/// Choose the current matrix to be transformed
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlMatrixMode(int mode);
///
public static void RlMatrixMode(MatrixMode mode)
{
RlMatrixMode((int)mode);
}
/// Push the current matrix to stack
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlPushMatrix();
/// Pop lattest inserted matrix from stack
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlPopMatrix();
/// Reset current matrix to identity matrix
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlLoadIdentity();
/// Multiply the current matrix by a translation matrix
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlTranslatef(float x, float y, float z);
/// Multiply the current matrix by a rotation matrix
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlRotatef(float angle, float x, float y, float z);
/// Multiply the current matrix by a scaling matrix
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlScalef(float x, float y, float z);
///
/// Multiply the current matrix by another matrix
/// Current Matrix can be set via
///
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlMultMatrixf(float* matf);
///
public static void RlMultMatrixf(Matrix4x4 matf)
{
Float16 f = Raymath.MatrixToFloatV(matf);
RlMultMatrixf(f.v);
}
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlFrustum(
double left,
double right,
double bottom,
double top,
double znear,
double zfar
);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlOrtho(
double left,
double right,
double bottom,
double top,
double znear,
double zfar
);
/// Set the viewport area
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlViewport(int x, int y, int width, int height);
// ------------------------------------------------------------------------------------
// Functions Declaration - Vertex level operations
// ------------------------------------------------------------------------------------
/// Initialize drawing mode (how to organize vertex)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlBegin(int mode);
public static void RlBegin(DrawMode mode)
{
RlBegin((int)mode);
}
/// Finish vertex providing
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnd();
/// Define one vertex (position) - 2 int
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlVertex2i(int x, int y);
/// Define one vertex (position) - 2 float
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlVertex2f(float x, float y);
/// Define one vertex (position) - 3 float
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlVertex3f(float x, float y, float z);
/// Define one vertex (texture coordinate) - 2 float
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlTexCoord2f(float x, float y);
/// Define one vertex (normal) - 3 float
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlNormal3f(float x, float y, float z);
/// Define one vertex (color) - 4 byte
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlColor4ub(byte r, byte g, byte b, byte a);
/// Define one vertex (color) - 3 float
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlColor3f(float x, float y, float z);
/// Define one vertex (color) - 4 float
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlColor4f(float x, float y, float z, float w);
// ------------------------------------------------------------------------------------
// Functions Declaration - OpenGL equivalent functions (common to 1.1, 3.3+, ES2)
// NOTE: This functions are used to completely abstract raylib code from OpenGL layer
// ------------------------------------------------------------------------------------
/// Vertex buffers state
/// Enable vertex array (VAO, if supported)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern CBool RlEnableVertexArray(uint vaoId);
/// Disable vertex array (VAO, if supported)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableVertexArray();
/// Enable vertex buffer (VBO)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableVertexBuffer(uint id);
/// Disable vertex buffer (VBO)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableVertexBuffer();
/// Enable vertex buffer element (VBO element)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableVertexBufferElement(uint id);
/// Disable vertex buffer element (VBO element)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableVertexBufferElement();
/// Enable vertex attribute index
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableVertexAttribute(uint index);
/// Disable vertex attribute index
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableVertexAttribute(uint index);
/// Enable attribute state pointer
/// NOTE: Only available for GRAPHICS_API_OPENGL_11
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableStatePointer(int vertexAttribType, void* buffer);
/// Disable attribute state pointer
/// NOTE: Only available for GRAPHICS_API_OPENGL_11
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableStatePointer(int vertexAttribType);
// Textures state
/// Select and active a texture slot
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlActiveTextureSlot(int slot);
/// Enable texture
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableTexture(uint id);
/// Disable texture
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableTexture();
/// Enable texture cubemap
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableTextureCubemap(uint id);
/// Disable texture cubemap
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableTextureCubemap();
/// Set texture parameters (filter, wrap)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlTextureParameters(uint id, int param, int value);
/// Set cubemap parameters (filter, wrap)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlCubemapParameters(uint id, int param, int value);
// Shader state
/// Enable shader program
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableShader(uint id);
/// Disable shader program
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableShader();
// Framebuffer state
/// Enable render texture (fbo)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableFramebuffer(uint id);
/// Disable render texture (fbo), return to default framebuffer
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableFramebuffer();
/// Activate multiple draw color buffers
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlActiveDrawBuffers(int count);
// General render state
/// Enable color blending
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableColorBlend();
/// Disable color blending
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableColorBlend();
/// Enable depth test
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableDepthTest();
/// Disable depth test
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableDepthTest();
/// Enable depth write
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableDepthMask();
/// Disable depth write
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableDepthMask();
/// Enable backface culling
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableBackfaceCulling();
/// Disable backface culling
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableBackfaceCulling();
/// Set face culling mode
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetCullFace(int mode);
/// Enable scissor test
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableScissorTest();
/// Disable scissor test
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableScissorTest();
/// Scissor test
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlScissor(int x, int y, int width, int height);
/// Enable wire mode
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableWireMode();
/// Disable wire mode
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableWireMode();
/// Set the line drawing width
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetLineWidth(float width);
/// Get the line drawing width
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern float RlGetLineWidth();
/// Enable line aliasing
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableSmoothLines();
/// Disable line aliasing
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableSmoothLines();
/// Enable stereo rendering
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlEnableStereoRender();
/// Disable stereo rendering
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDisableStereoRender();
/// Check if stereo render is enabled
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern CBool RlIsStereoRenderEnabled();
/// Clear color buffer with color
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlClearColor(byte r, byte g, byte b, byte a);
/// Clear used screen buffers (color and depth)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlClearScreenBuffers();
/// Check and log OpenGL error codes
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlCheckErrors();
/// Set blending mode
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetBlendMode(BlendMode mode);
/// Set blending mode factor and equation (using OpenGL factors)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation);
/// Set blending mode factors and equations separately (using OpenGL factors)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetBlendFactorsSeparate(
int glSrcRGB,
int glDstRGB,
int glSrcAlpha,
int glDstAlpha,
int glEqRGB,
int glEqAlpha
);
// ------------------------------------------------------------------------------------
// Functions Declaration - rlgl functionality
// ------------------------------------------------------------------------------------
/// Initialize rlgl (buffers, shaders, textures, states)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlGlInit(int width, int height);
/// De-inititialize rlgl (buffers, shaders, textures)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlGlClose();
/// Load OpenGL extensions
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlLoadExtensions(void* loader);
/// Get current OpenGL version
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern GlVersion RlGetVersion();
/// Get default framebuffer width
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern int RlGetFramebufferWidth();
/// Get default framebuffer height
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern int RlGetFramebufferHeight();
/// Get default texture
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlGetTextureIdDefault();
/// Get default shader
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlGetShaderIdDefault();
/// Get default shader locations
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern int* RlGetShaderLocsDefault();
// Render batch management
/// Load a render batch system
/// NOTE: rlgl provides a default render batch to behave like OpenGL 1.1 immediate mode
/// but this render batch API is exposed in case custom batches are required
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern RenderBatch RlLoadRenderBatch(int numBuffers, int bufferElements);
/// Unload render batch system
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUnloadRenderBatch(RenderBatch batch);
/// Draw render batch data (Update->Draw->Reset)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDrawRenderBatch(RenderBatch* batch);
/// Set the active render batch for rlgl (NULL for default internal)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetRenderBatchActive(RenderBatch* batch);
/// Update and draw internal render batch
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDrawRenderBatchActive();
/// Check internal buffer overflow for a given number of vertex
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern CBool RlCheckRenderBatchLimit(int vCount);
/// Set current texture for render batch and check buffers limits
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetTexture(uint id);
// Vertex buffers management
/// Load vertex array (vao) if supported
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadVertexArray();
/// Load a vertex buffer attribute
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadVertexBuffer(void* buffer, int size, CBool dynamic);
/// Load a new attributes element buffer
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadVertexBufferElement(void* buffer, int size, CBool dynamic);
/// Update GPU buffer with new data
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUpdateVertexBuffer(uint bufferId, void* data, int dataSize, int offset);
/// Update vertex buffer elements with new data
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUpdateVertexBufferElements(uint id, void* data, int dataSize, int offset);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUnloadVertexArray(uint vaoId);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUnloadVertexBuffer(uint vboId);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetVertexAttribute(
uint index,
int compSize,
int type,
CBool normalized,
int stride,
void* pointer
);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetVertexAttributeDivisor(uint index, int divisor);
/// Set vertex attribute default value
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetVertexAttributeDefault(int locIndex, void* value, int attribType, int count);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDrawVertexArray(int offset, int count);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDrawVertexArrayElements(int offset, int count, void* buffer);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDrawVertexArrayInstanced(int offset, int count, int instances);
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlDrawVertexArrayElementsInstanced(
int offset,
int count,
void* buffer,
int instances
);
// Textures data management
/// Load texture in GPU
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadTexture(void* data, int width, int height, PixelFormat format, int mipmapCount);
/// Load depth texture/renderbuffer (to be attached to fbo)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadTextureDepth(int width, int height, CBool useRenderBuffer);
/// Load texture cubemap
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadTextureCubemap(void* data, int size, PixelFormat format);
/// Update GPU texture with new data
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUpdateTexture(
uint id,
int offsetX,
int offsetY,
int width,
int height,
PixelFormat format,
void* data
);
/// Get OpenGL internal formats
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlGetGlTextureFormats(
PixelFormat format,
int* glInternalFormat,
int* glFormat,
int* glType
);
/// Get OpenGL internal formats
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern sbyte* RlGetPixelFormatName(PixelFormat format);
/// Unload texture from GPU memory
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUnloadTexture(uint id);
/// Generate mipmap data for selected texture
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlGenTextureMipmaps(uint id, int width, int height, PixelFormat format, int* mipmaps);
/// Read texture pixel data
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void* RlReadTexturePixels(uint id, int width, int height, PixelFormat format);
/// Read screen pixel data (color buffer)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern byte* RlReadScreenPixels(int width, int height);
// Framebuffer management (fbo)
/// Load an empty framebuffer
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadFramebuffer(int width, int height);
/// Attach texture/renderbuffer to a framebuffer
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlFramebufferAttach(
uint fboId,
uint texId,
FramebufferAttachType attachType,
FramebufferAttachTextureType texType,
int mipLevel
);
/// Verify framebuffer is complete
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern CBool RlFramebufferComplete(uint id);
/// Delete framebuffer from GPU
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUnloadFramebuffer(uint id);
// Shaders management
/// Load shader from code strings
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadShaderCode(sbyte* vsCode, sbyte* fsCode);
/// Compile custom shader and return shader id
/// (type: RL_VERTEX_SHADER, RL_FRAGMENT_SHADER, RL_COMPUTE_SHADER)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlCompileShader(sbyte* shaderCode, int type);
/// Load custom shader program
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadShaderProgram(uint vShaderId, uint fShaderId);
/// Unload shader program
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUnloadShaderProgram(uint id);
/// Get shader location uniform
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern int RlGetLocationUniform(uint shaderId, sbyte* uniformName);
/// Get shader location attribute
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern int RlGetLocationAttrib(uint shaderId, sbyte* attribName);
/// Set shader value uniform
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetUniform(int locIndex, void* value, int uniformType, int count);
/// Set shader value matrix
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetUniformMatrix(int locIndex, Matrix4x4 mat);
/// Set shader value sampler
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetUniformSampler(int locIndex, uint textureId);
/// Set shader currently active (id and locations)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetShader(uint id, int* locs);
// Compute shader management
/// Load compute shader program
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadComputeShaderProgram(uint shaderId);
/// Dispatch compute shader (equivalent to *draw* for graphics pilepine)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlComputeShaderDispatch(uint groupX, uint groupY, uint groupZ);
// Shader buffer storage object management (ssbo)
/// Load shader storage buffer object (SSBO)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlLoadShaderBuffer(uint size, void* data, int usageHint);
/// Unload shader storage buffer object (SSBO)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUnloadShaderBuffer(uint ssboId);
/// Update SSBO buffer data
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlUpdateShaderBuffer(uint id, void* data, uint dataSize, uint offset);
/// Bind SSBO buffer data
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlBindShaderBuffer(uint id, uint index);
/// Read SSBO buffer data (GPU->CPU)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlReadShaderBuffer(uint id, void* dest, uint count, uint offset);
/// Copy SSBO data between buffers
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlCopyShaderBuffer(
uint destId,
uint srcId,
uint destOffset,
uint srcOffset,
uint count
);
/// Get SSBO buffer size
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern uint RlGetShaderBufferSize(uint id);
// Buffer management
/// Bind image texture
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlBindImageTexture(uint id, uint index, int format, CBool readOnly);
// Matrix state management
/// Get internal modelview matrix
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern Matrix4x4 RlGetMatrixModelView();
/// Get internal projection matrix
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern Matrix4x4 RlGetMatrixProjection();
/// Get internal accumulated transform matrix
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern Matrix4x4 RlGetMatrixTransform();
/// Get internal projection matrix for stereo render (selected eye)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern Matrix4x4 RlGetMatrixProjectionStereo(int eye);
/// Get internal view offset matrix for stereo render (selected eye)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern Matrix4x4 RlGetMatrixViewOffsetStereo(int eye);
/// Set a custom projection matrix (replaces internal projection matrix)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetMatrixProjection(Matrix4x4 view);
/// Set a custom modelview matrix (replaces internal modelview matrix)
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetMatrixModelView(Matrix4x4 proj);
/// Set eyes projection matrices for stereo rendering
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetMatrixProjectionStereo(Matrix4x4 left, Matrix4x4 right);
/// Set eyes view offsets matrices for stereo rendering
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlSetMatrixViewOffsetStereo(Matrix4x4 left, Matrix4x4 right);
// Quick and dirty cube/quad buffers load->draw->unload
/// Load and draw a cube
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlLoadDrawCube();
/// Load and draw a quad
[DllImport(NativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern void RlLoadDrawQuad();
}
}