citro3d/source/internal.h

101 lines
2.0 KiB
C
Raw Normal View History

2014-12-20 21:34:19 +01:00
#pragma once
#include <c3d/attribs.h>
#include <c3d/buffers.h>
#include <c3d/light.h>
#include <c3d/renderbuffer.h>
2017-02-09 04:30:25 +01:00
#include <c3d/texenv.h>
#define C3D_UNUSED __attribute__((unused))
2014-12-20 21:34:19 +01:00
typedef struct
{
u32 fragOpMode;
2017-02-09 19:59:46 +01:00
u32 fragOpShadow;
2015-03-07 17:02:38 +01:00
u32 zScale, zOffset;
2014-12-20 21:34:19 +01:00
GPU_CULLMODE cullMode;
bool zBuffer;
2014-12-20 21:34:19 +01:00
u32 alphaTest;
u32 stencilMode, stencilOp;
u32 depthTest;
u32 blendClr;
u32 alphaBlend;
GPU_LOGICOP clrLogicOp;
2014-12-20 21:34:19 +01:00
} C3D_Effect;
typedef struct
{
2016-01-05 17:30:05 +01:00
u32* cmdBuf;
2014-12-20 21:34:19 +01:00
size_t cmdBufSize;
2016-01-19 22:32:55 +01:00
float cmdBufUsage;
2014-12-20 21:34:19 +01:00
u32 flags;
shaderProgram_s* program;
2014-12-20 21:34:19 +01:00
C3D_AttrInfo attrInfo;
C3D_BufInfo bufInfo;
2014-12-20 21:34:19 +01:00
C3D_Effect effect;
C3D_LightEnv* lightEnv;
2014-12-20 21:34:19 +01:00
C3D_Tex* tex[3];
C3D_TexEnv texEnv[6];
2015-09-10 13:47:16 +02:00
u32 texEnvBuf, texEnvBufClr;
C3D_RenderBuf* rb;
u32 viewport[5];
u32 scissor[3];
u16 fixedAttribDirty, fixedAttribEverDirty;
C3D_FVec fixedAttribs[12];
2016-01-22 00:06:15 +01:00
void (* renderQueueWaitDone)(void);
2016-01-05 17:30:05 +01:00
void (* renderQueueExit)(void);
2014-12-20 21:34:19 +01:00
} C3D_Context;
enum
{
C3DiF_Active = BIT(0),
2015-09-20 14:04:50 +02:00
C3DiF_DrawUsed = BIT(1),
C3DiF_AttrInfo = BIT(2),
C3DiF_BufInfo = BIT(3),
C3DiF_Effect = BIT(4),
C3DiF_RenderBuf = BIT(5),
C3DiF_Viewport = BIT(6),
C3DiF_Scissor = BIT(7),
C3DiF_Program = BIT(8),
2015-09-10 13:47:16 +02:00
C3DiF_TexEnvBuf = BIT(9),
C3DiF_LightEnv = BIT(10),
C3DiF_VshCode = BIT(11),
C3DiF_GshCode = BIT(12),
2016-01-05 17:30:05 +01:00
C3DiF_CmdBuffer = BIT(13),
2014-12-20 21:34:19 +01:00
#define C3DiF_Tex(n) BIT(23+(n))
C3DiF_TexAll = 7 << 23,
#define C3DiF_TexEnv(n) BIT(26+(n))
C3DiF_TexEnvAll = 0x3F << 26,
};
static inline C3D_Context* C3Di_GetContext(void)
{
extern C3D_Context __C3D_Context;
return &__C3D_Context;
}
void C3Di_UpdateContext(void);
void C3Di_AttrInfoBind(C3D_AttrInfo* info);
void C3Di_BufInfoBind(C3D_BufInfo* info);
2014-12-20 21:34:19 +01:00
void C3Di_TexEnvBind(int id, C3D_TexEnv* env);
void C3Di_EffectBind(C3D_Effect* effect);
void C3Di_RenderBufBind(C3D_RenderBuf* rb);
void C3Di_LightMtlBlend(C3D_Light* light);
void C3Di_DirtyUniforms(GPU_SHADER_TYPE type);
void C3Di_LoadShaderUniforms(shaderInstance_s* si);
void C3Di_ClearShaderUniforms(GPU_SHADER_TYPE type);
2016-01-05 17:30:05 +01:00
void C3Di_FinalizeFrame(u32** pBuf, u32* pSize);