srp
software rendering pipeline
Loading...
Searching...
No Matches
buffer.c File Reference
#include <stdio.h>
#include <string.h>
#include "buffer_p.h"
#include "message_callback_p.h"
#include "triangle.h"
#include "type.h"
#include "utils.h"
#include "defines.h"
#include "vertex.h"
Include dependency graph for buffer.c:

Functions

SRPVertexBuffersrpNewVertexBuffer ()
 
void srpVertexBufferCopyData (SRPVertexBuffer *this, size_t nBytesPerVertex, size_t nBytesData, const void *data)
 
void srpFreeVertexBuffer (SRPVertexBuffer *this)
 
void srpDrawVertexBuffer (const SRPVertexBuffer *this, const SRPFramebuffer *fb, const SRPShaderProgram *sp, SRPPrimitive primitive, size_t startIndex, size_t count)
 
SRPIndexBuffersrpNewIndexBuffer ()
 
void srpIndexBufferCopyData (SRPIndexBuffer *this, SRPType indicesType, size_t nBytesData, const void *data)
 
void srpFreeIndexBuffer (SRPIndexBuffer *this)
 
void srpDrawIndexBuffer (const SRPIndexBuffer *this, const SRPVertexBuffer *vb, const SRPFramebuffer *fb, const SRPShaderProgram *sp, SRPPrimitive primitive, size_t startIndex, size_t count)
 
static void drawBuffer (const SRPIndexBuffer *ib, const SRPVertexBuffer *vb, const SRPFramebuffer *fb, const SRPShaderProgram *sp, SRPPrimitive primitive, size_t startIndex, size_t count)
 
static uint64_t indexIndexBuffer (const SRPIndexBuffer *this, size_t ibIndex)
 
static SRPVertexindexVertexBuffer (const SRPVertexBuffer *this, size_t index)
 

Detailed Description

Buffer implementation

Function Documentation

◆ srpDrawIndexBuffer()

void srpDrawIndexBuffer ( const SRPIndexBuffer this,
const SRPVertexBuffer vb,
const SRPFramebuffer fb,
const SRPShaderProgram sp,
SRPPrimitive  primitive,
size_t  startIndex,
size_t  count 
)

Draw vertices using both vertex and index buffers

Parameters
[in]thisThe index buffer to read the indices from
[in]vbThe vertex buffer to read the vertex data from
[in]fbThe framebuffer to draw to
[in]spThe shader program to use
[in]primitiveSpecifies the primitive to draw
[in]startIndexSpecifies from what index buffer's index to start drawing
[in]countSpecifies how many indices to draw
Examples
03_spinning_textured_cube/main.c.

◆ srpDrawVertexBuffer()

void srpDrawVertexBuffer ( const SRPVertexBuffer this,
const SRPFramebuffer fb,
const SRPShaderProgram sp,
SRPPrimitive  primitive,
size_t  startIndex,
size_t  count 
)

Draw vertices from vertex buffer

Parameters
[in]thisThe pointer to vertex buffer to read the vertex data from
[in]fbThe framebuffer to draw to
[in]spThe shader program to use
[in]primitiveSpecifies the primitive to draw
[in]startIndexSpecifies from what index to start drawing
[in]countSpecifies how many vertices to draw
Examples
01_colored_triangle/main.c, and 02_spinning_triangle/main.c.

◆ srpFreeIndexBuffer()

void srpFreeIndexBuffer ( SRPIndexBuffer this)

Free the index buffer

Parameters
[in]thisThe pointer to index buffer, as returned from srpNewIndexBuffer()
Examples
03_spinning_textured_cube/main.c.

◆ srpFreeVertexBuffer()

void srpFreeVertexBuffer ( SRPVertexBuffer this)

Free the vertex buffer

Parameters
[in]thisThe pointer to vertex buffer, as returned from srpNewVertexBuffer()
Examples
01_colored_triangle/main.c, 02_spinning_triangle/main.c, and 03_spinning_textured_cube/main.c.

◆ srpIndexBufferCopyData()

void srpIndexBufferCopyData ( SRPIndexBuffer this,
SRPType  indicesType,
size_t  nBytesData,
const void *  data 
)

Copy the vertex data over to vertex buffer

Parameters
[in]thisThe pointer to index buffer
[in]indicesTypeThe type of indices passed by data. Must be one of TYPE_UINT8, TYPE_UINT16, TYPE_UINT32, TYPE_UIN64
[in]nBytesDataThe size of index data
[in]dataThe pointer to an array of indices of type indicesType
Examples
03_spinning_textured_cube/main.c.

◆ srpNewIndexBuffer()

SRPIndexBuffer * srpNewIndexBuffer ( )

Construct the index buffer

Returns
A pointer to constructed index buffer
Examples
03_spinning_textured_cube/main.c.

◆ srpNewVertexBuffer()

SRPVertexBuffer * srpNewVertexBuffer ( )

Construct the vertex buffer.

See also
srpVertexBufferCopyData()
Returns
A pointer to constructed vertex buffer
Examples
01_colored_triangle/main.c, 02_spinning_triangle/main.c, and 03_spinning_textured_cube/main.c.

◆ srpVertexBufferCopyData()

void srpVertexBufferCopyData ( SRPVertexBuffer this,
size_t  nBytesPerVertex,
size_t  nBytesData,
const void *  data 
)

Copy the vertex data over to vertex buffer

Parameters
[in]thisThe pointer to vertex buffer
[in]nBytesPerVertexThe size of one vertex, in bytes
[in]nBytesDataThe size of vertex data, in bytes
[in]dataThe pointer to vertex data
Examples
01_colored_triangle/main.c, 02_spinning_triangle/main.c, and 03_spinning_textured_cube/main.c.