don't reinit attrinfo for every quad

This commit is contained in:
zetaPRIME 2017-12-25 00:09:25 -05:00
parent 296826a927
commit 3c9fc00ac8

View File

@ -42,6 +42,9 @@ namespace { // internals
shaderProgram_s shader;
int sLocProjection = -1;
C3D_AttrInfo* attrInfo = nullptr;
C3D_BufInfo* bufInfo = nullptr;
void ResetBuffer() { bufferInd = 0; }
void* AllocBuffer(size_t size, size_t align = 1) {
@ -95,10 +98,20 @@ void RenderCore::Open() {
gfxSet3D(true);
C3D_Init(0x80000*8);
// allocate and init VBO
bufferSize = 0x80000;
bufferStart = linearAlloc(bufferSize);
bufferInd = 0;
bufInfo = C3D_GetBufInfo();
BufInfo_Init(bufInfo);
// set up shader attribute passing
attrInfo = C3D_GetAttrInfo();
AttrInfo_Init(attrInfo);
AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3);
AttrInfo_AddLoader(attrInfo, 1, GPU_FLOAT, 2);
// set up screen targets
targetTopLeft = std::make_unique<CRenderTarget>(240, 400, true);
targetTopRight = std::make_unique<CRenderTarget>(240, 400, true);
@ -214,12 +227,7 @@ void RenderCore::DrawQuad(const VRect& rect, const VRect& src, bool noSnap) {
setXYZUV(verts[2], rl, rb, 0, srl, srb);
setXYZUV(verts[3], rr, rb, 0, srr, srb);
C3D_AttrInfo* attrInfo = C3D_GetAttrInfo();
AttrInfo_Init(attrInfo);
AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3);
AttrInfo_AddLoader(attrInfo, 1, GPU_FLOAT, 2);
C3D_BufInfo* bufInfo = C3D_GetBufInfo();
bufInfo = C3D_GetBufInfo();
BufInfo_Init(bufInfo);
BufInfo_Add(bufInfo, verts, sizeof(vbo_xyzuv), 2, 0x10);
@ -234,12 +242,7 @@ void RenderCore::DrawQuad(const VRect& rect, const Vector2& anchor, float angle,
setXYZUV(verts[2], rect.BottomLeft().RotateAround(anchor, angle), src.BottomLeft());
setXYZUV(verts[3], rect.BottomRight().RotateAround(anchor, angle), src.BottomRight());
C3D_AttrInfo* attrInfo = C3D_GetAttrInfo();
AttrInfo_Init(attrInfo);
AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3);
AttrInfo_AddLoader(attrInfo, 1, GPU_FLOAT, 2);
C3D_BufInfo* bufInfo = C3D_GetBufInfo();
bufInfo = C3D_GetBufInfo();
BufInfo_Init(bufInfo);
BufInfo_Add(bufInfo, verts, sizeof(vbo_xyzuv), 2, 0x10);