6#ifndef WUT_PIXEL_SHADER_H_
7#define WUT_PIXEL_SHADER_H_
16class PixelShader :
public Shader
20 :
pixelShader(
static_cast<GX2PixelShader *
>(memalign(0x40,
sizeof(GX2PixelShader))))
25 pixelShader->mode = GX2_SHADER_MODE_UNIFORM_REGISTER;
29 virtual ~PixelShader()
36 for(uint32_t i = 0; i <
pixelShader->uniformVarCount; i++)
37 free(
const_cast<char *
>(
pixelShader->uniformVars[i].name));
41 for(uint32_t i = 0; i <
pixelShader->samplerVarCount; i++)
42 free(
const_cast<char *
>(
pixelShader->samplerVars[i].name));
55 void setProgram(
const uint32_t * program, uint32_t programSize,
const uint32_t * regs, uint32_t regsSize)
78 GX2UniformVar * newVar =
static_cast<GX2UniformVar *
>(malloc((idx + 1) *
sizeof(GX2UniformVar)));
84 memcpy(newVar,
pixelShader->uniformVars, idx *
sizeof(GX2UniformVar));
88 memcpy(
pixelShader->uniformVars + idx, &var,
sizeof(GX2UniformVar));
89 pixelShader->uniformVars[idx].name = strdup(var.name);
100 GX2SamplerVar * newVar =
static_cast<GX2SamplerVar *
>(malloc((idx + 1) *
sizeof(GX2SamplerVar)));
106 memcpy(newVar,
pixelShader->samplerVars, idx *
sizeof(GX2SamplerVar));
110 memcpy(
pixelShader->samplerVars + idx, &var,
sizeof(GX2SamplerVar));
111 pixelShader->samplerVars[idx].name = strdup(var.name);
128 static inline void setUniformReg(uint32_t location, uint32_t size,
const void * reg)
130 GX2SetPixelUniformReg(location, size, reg);
void addUniformVar(const GX2UniformVar &var)
Registers a uniform variable so it can be set by location.
void setProgram(const uint32_t *program, uint32_t programSize, const uint32_t *regs, uint32_t regsSize)
Uploads the compiled shader program.
void setShader() const
Binds this pixel shader for subsequent draws.
GX2PixelShader * getPixelShader() const
GX2PixelShader * pixelShader
The GX2 pixel shader object.
void addSamplerVar(const GX2SamplerVar &var)
Registers a texture sampler variable.
static void setUniformReg(uint32_t location, uint32_t size, const void *reg)
Writes uniform registers for the bound pixel shader.