citro3d/include/c3d/uniforms.h

79 lines
1.9 KiB
C
Raw Normal View History

2014-12-20 21:34:19 +01:00
#pragma once
2017-02-09 04:30:25 +01:00
#include "maths.h"
2014-12-20 21:34:19 +01:00
#define C3D_FVUNIF_COUNT 96
#define C3D_IVUNIF_COUNT 4
2015-03-05 23:05:14 +01:00
extern C3D_FVec C3D_FVUnif[2][C3D_FVUNIF_COUNT];
extern C3D_IVec C3D_IVUnif[2][C3D_IVUNIF_COUNT];
extern u16 C3D_BoolUnifs[2];
2014-12-20 21:34:19 +01:00
2015-03-05 23:05:14 +01:00
extern bool C3D_FVUnifDirty[2][C3D_FVUNIF_COUNT];
extern bool C3D_IVUnifDirty[2][C3D_IVUNIF_COUNT];
extern bool C3D_BoolUnifsDirty[2];
2014-12-20 21:34:19 +01:00
2015-03-05 23:05:14 +01:00
static inline C3D_FVec* C3D_FVUnifWritePtr(GPU_SHADER_TYPE type, int id, int size)
2014-12-20 21:34:19 +01:00
{
int i;
for (i = 0; i < size; i ++)
2015-03-05 23:05:14 +01:00
C3D_FVUnifDirty[type][id+i] = true;
return &C3D_FVUnif[type][id];
2014-12-20 21:34:19 +01:00
}
2015-03-05 23:05:14 +01:00
static inline C3D_IVec* C3D_IVUnifWritePtr(GPU_SHADER_TYPE type, int id)
2014-12-20 21:34:19 +01:00
{
2016-01-24 01:45:39 +01:00
id -= 0x60;
2015-03-05 23:05:14 +01:00
C3D_IVUnifDirty[type][id] = true;
return &C3D_IVUnif[type][id];
2014-12-20 21:34:19 +01:00
}
2016-05-23 19:43:48 +02:00
static inline void C3D_FVUnifMtxNx4(GPU_SHADER_TYPE type, int id, const C3D_Mtx* mtx, int num)
2015-09-09 17:21:40 +02:00
{
int i;
C3D_FVec* ptr = C3D_FVUnifWritePtr(type, id, num);
for (i = 0; i < num; i ++)
ptr[i] = mtx->r[i]; // Struct copy.
}
2016-05-23 19:43:48 +02:00
static inline void C3D_FVUnifMtx4x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx* mtx)
{
C3D_FVUnifMtxNx4(type, id, mtx, 4);
}
2016-05-23 19:43:48 +02:00
static inline void C3D_FVUnifMtx3x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx* mtx)
{
C3D_FVUnifMtxNx4(type, id, mtx, 3);
}
2016-05-23 19:43:48 +02:00
static inline void C3D_FVUnifMtx2x4(GPU_SHADER_TYPE type, int id, const C3D_Mtx* mtx)
{
C3D_FVUnifMtxNx4(type, id, mtx, 2);
2015-09-09 17:21:40 +02:00
}
2015-03-05 23:05:14 +01:00
static inline void C3D_FVUnifSet(GPU_SHADER_TYPE type, int id, float x, float y, float z, float w)
2014-12-20 21:34:19 +01:00
{
2015-03-05 23:05:14 +01:00
C3D_FVec* ptr = C3D_FVUnifWritePtr(type, id, 1);
2014-12-20 21:34:19 +01:00
ptr->x = x;
ptr->y = y;
ptr->z = z;
ptr->w = w;
}
2015-03-05 23:05:14 +01:00
static inline void C3D_IVUnifSet(GPU_SHADER_TYPE type, int id, int x, int y, int z, int w)
2014-12-20 21:34:19 +01:00
{
2015-03-05 23:05:14 +01:00
C3D_IVec* ptr = C3D_IVUnifWritePtr(type, id);
2014-12-20 21:34:19 +01:00
*ptr = IVec_Pack(x, y, z, w);
}
static inline void C3D_BoolUnifSet(GPU_SHADER_TYPE type, int id, bool value)
{
2016-01-24 01:45:39 +01:00
id -= 0x68;
C3D_BoolUnifsDirty[type] = true;
if (value)
C3D_BoolUnifs[type] |= BIT(id);
else
C3D_BoolUnifs[type] &= ~BIT(id);
}
2015-03-05 23:05:14 +01:00
void C3D_UpdateUniforms(GPU_SHADER_TYPE type);