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(); } }