6#ifndef WUT_VERTEX_SHADER_H_
7#define WUT_VERTEX_SHADER_H_
24 ,
vertexShader(static_cast<GX2VertexShader *>(memalign(0x40, sizeof(GX2VertexShader))))
42 for(uint32_t i = 0; i <
vertexShader->uniformVarCount; i++)
43 free(
const_cast<char *
>(
vertexShader->uniformVars[i].name));
47 for(uint32_t i = 0; i <
vertexShader->attribVarCount; i++)
48 free(
const_cast<char *
>(
vertexShader->attribVars[i].name));
61 void setProgram(
const uint32_t * program, uint32_t programSize,
const uint32_t * regs, uint32_t regsSize)
85 GX2UniformVar * newVar =
static_cast<GX2UniformVar *
>(malloc((idx + 1) *
sizeof(GX2UniformVar)));
91 memcpy(newVar,
vertexShader->uniformVars, idx *
sizeof(GX2UniformVar));
95 memcpy(
vertexShader->uniformVars + idx, &var,
sizeof(GX2UniformVar));
107 GX2AttribVar * newVar =
static_cast<GX2AttribVar *
>(malloc((idx + 1) *
sizeof(GX2AttribVar)));
113 memcpy(newVar,
vertexShader->attribVars, idx *
sizeof(GX2AttribVar));
117 memcpy(
vertexShader->attribVars + idx, &var,
sizeof(GX2AttribVar));
127 static inline void setAttributeBuffer(uint32_t bufferIdx, uint32_t bufferSize, uint32_t stride,
const void * buffer)
129 GX2SetAttribBuffer(bufferIdx, bufferSize, stride, buffer);
153 static void setUniformReg(uint32_t location, uint32_t size,
const void * reg)
155 GX2SetVertexUniformReg(location, size, reg);
Owns a GX2VertexShader's compiled program and uniform/attribute metadata.
uint32_t attributesCount
Number of attribute streams.
void addUniformVar(const GX2UniformVar &var)
Registers a uniform variable so it can be set by location.
void addAttribVar(const GX2AttribVar &var)
Registers an input attribute variable.
void setShader() const
Binds this vertex shader for subsequent draws.
GX2VertexShader * vertexShader
The GX2 vertex shader object.
VertexShader(uint32_t numAttr)
static void setUniformReg(uint32_t location, uint32_t size, const void *reg)
Writes uniform registers for the bound vertex shader.
static void setAttributeBuffer(uint32_t bufferIdx, uint32_t bufferSize, uint32_t stride, const void *buffer)
Binds a vertex data buffer to an attribute buffer slot.
uint32_t getAttributesCount() const
GX2AttribStream * attributes
Attribute stream descriptions handed to the fetch shader.
void setProgram(const uint32_t *program, uint32_t programSize, const uint32_t *regs, uint32_t regsSize)
Uploads the compiled shader program.
GX2AttribStream * getAttributeBuffer(uint32_t idx=0) const