mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-04-25 15:49:02 -05:00
Identify + document render_view
This commit is contained in:
parent
6ae0808081
commit
cc98efb825
17
include/render_view.h
Normal file
17
include/render_view.h
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef POKEPLATINUM_RENDER_VIEW_H
|
||||
#define POKEPLATINUM_RENDER_VIEW_H
|
||||
|
||||
#include <nnsys.h>
|
||||
|
||||
void InitRenderer(NNSG2dRendererInstance *renderer, fx32 spriteZOffset);
|
||||
void InitRenderSurface(NNSG2dRenderSurface *surface,
|
||||
NNSG2dViewRect *viewRect,
|
||||
NNSG2dOamRegisterFunction oamRegisterFunc,
|
||||
NNSG2dAffineRegisterFunction oamAffineRegisterFunc,
|
||||
NNSG2dRndCellCullingFunction visibilityCullingFunc,
|
||||
NNSG2dSurfaceType surfaceType,
|
||||
NNSG2dRendererInstance *renderer);
|
||||
void SetRenderSurfaceViewRect(NNSG2dRenderSurface *surface, NNSG2dViewRect *viewRect);
|
||||
BOOL IsObjectInView(const NNSG2dCellData *cellData, const MtxFx32 *objectCoords, const NNSG2dViewRect *viewRect);
|
||||
|
||||
#endif // POKEPLATINUM_RENDER_VIEW_H
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
#ifndef POKEPLATINUM_UNK_0202309C_H
|
||||
#define POKEPLATINUM_UNK_0202309C_H
|
||||
|
||||
#include <nnsys.h>
|
||||
|
||||
void sub_0202309C(NNSG2dRendererInstance *param0, fx32 param1);
|
||||
void sub_020230AC(NNSG2dRenderSurface *param0, NNSG2dViewRect *param1, NNSG2dOamRegisterFunction param2, NNSG2dAffineRegisterFunction param3, NNSG2dRndCellCullingFunction param4, NNSG2dSurfaceType param5, NNSG2dRendererInstance *param6);
|
||||
void sub_020230E0(NNSG2dRenderSurface *param0, NNSG2dViewRect *param1);
|
||||
BOOL sub_020230F0(const NNSG2dCellData *param0, const MtxFx32 *param1, const NNSG2dViewRect *param2);
|
||||
|
||||
#endif // POKEPLATINUM_UNK_0202309C_H
|
||||
|
|
@ -93,7 +93,7 @@ Static main
|
|||
Object main.nef.p/src_unk_02022844.c.o
|
||||
Object main.nef.p/src_error_handling.c.o
|
||||
Object main.nef.p/src_resource_collection.c.o
|
||||
Object main.nef.p/src_unk_0202309C.c.o
|
||||
Object main.nef.p/src_render_view.c.o
|
||||
Object main.nef.p/src_font_manager.c.o
|
||||
Object main.nef.p/src_strbuf.c.o
|
||||
Object main.nef.p/src_unk_02023FCC.c.o
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ pokeplatinum_c = files(
|
|||
'touch_screen.c',
|
||||
'unk_02022844.c',
|
||||
'resource_collection.c',
|
||||
'unk_0202309C.c',
|
||||
'render_view.c',
|
||||
'font_manager.c',
|
||||
'unk_02023FCC.c',
|
||||
'unk_0202414C.c',
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
#include "heap.h"
|
||||
#include "math.h"
|
||||
#include "narc.h"
|
||||
#include "render_view.h"
|
||||
#include "sprite_resource.h"
|
||||
#include "sprite_transfer.h"
|
||||
#include "sprite_util.h"
|
||||
|
|
@ -27,7 +28,6 @@
|
|||
#include "sys_task_manager.h"
|
||||
#include "unk_02005474.h"
|
||||
#include "unk_0200A784.h"
|
||||
#include "unk_0202309C.h"
|
||||
|
||||
typedef struct UnkStruct_ov5_021D5EF8_t {
|
||||
UnkStruct_ov5_021D6594 *unk_00;
|
||||
|
|
@ -768,7 +768,7 @@ static void ov5_021D61D0(UnkStruct_ov5_021D61D0 *param0)
|
|||
int v1;
|
||||
int v2;
|
||||
|
||||
sub_0202309C(¶m0->unk_14, -FX32_ONE);
|
||||
InitRenderer(¶m0->unk_14, -FX32_ONE);
|
||||
|
||||
v0.posTopLeft.x = 0;
|
||||
v0.posTopLeft.y = 0;
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
#include "unk_0200F174.h"
|
||||
#include "unk_020131EC.h"
|
||||
#include "unk_02017728.h"
|
||||
#include "unk_0202309C.h"
|
||||
#include "render_view.h"
|
||||
#include "unk_0202ACE0.h"
|
||||
#include "unk_0203061C.h"
|
||||
#include "unk_0203909C.h"
|
||||
|
|
@ -2333,7 +2333,7 @@ static BOOL ov64_0222F948 (UnkStruct_ov64_0222F0C4 * param0, UnkStruct_ov64_0222
|
|||
Bg_ScheduleScroll(param2->unk_00, Unk_ov64_02232258[3], 0, 0);
|
||||
|
||||
v2 = Unk_ov64_02232460;
|
||||
sub_020230E0(¶m2->unk_08, &v2);
|
||||
SetRenderSurfaceViewRect(¶m2->unk_08, &v2);
|
||||
|
||||
if (param0->unk_AC == 2) {
|
||||
v0 = 2;
|
||||
|
|
@ -2359,7 +2359,7 @@ static BOOL ov64_0222F948 (UnkStruct_ov64_0222F0C4 * param0, UnkStruct_ov64_0222
|
|||
v2 = Unk_ov64_02232460;
|
||||
v2.posTopLeft.x += v1 << FX32_SHIFT;
|
||||
|
||||
sub_020230E0(¶m2->unk_08, &v2);
|
||||
SetRenderSurfaceViewRect(¶m2->unk_08, &v2);
|
||||
|
||||
if (param0->unk_AA % (12 / 4)) {
|
||||
v3 = param0->unk_AA / (12 / 4);
|
||||
|
|
|
|||
72
src/render_view.c
Normal file
72
src/render_view.c
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
#include "render_view.h"
|
||||
|
||||
#include <nnsys.h>
|
||||
|
||||
void InitRenderer(NNSG2dRendererInstance *renderer, fx32 spriteZOffset)
|
||||
{
|
||||
NNS_G2dInitRenderer(renderer);
|
||||
NNS_G2dSetRendererSpriteZoffset(renderer, spriteZOffset);
|
||||
}
|
||||
|
||||
void InitRenderSurface(NNSG2dRenderSurface *surface, NNSG2dViewRect *viewRect, NNSG2dOamRegisterFunction oamRegisterFunc, NNSG2dAffineRegisterFunction oamAffineRegisterFunc, NNSG2dRndCellCullingFunction visibilityCullingFunc, NNSG2dSurfaceType surfaceType, NNSG2dRendererInstance *renderer)
|
||||
{
|
||||
NNS_G2dInitRenderSurface(surface);
|
||||
|
||||
surface->viewRect = *viewRect;
|
||||
surface->pFuncOamRegister = oamRegisterFunc;
|
||||
surface->pFuncOamAffineRegister = oamAffineRegisterFunc;
|
||||
surface->pFuncVisibilityCulling = visibilityCullingFunc;
|
||||
surface->type = surfaceType;
|
||||
|
||||
if (renderer) {
|
||||
NNS_G2dAddRendererTargetSurface(renderer, surface);
|
||||
}
|
||||
}
|
||||
|
||||
void SetRenderSurfaceViewRect(NNSG2dRenderSurface *surface, NNSG2dViewRect *viewRect)
|
||||
{
|
||||
surface->viewRect = *viewRect;
|
||||
}
|
||||
|
||||
BOOL IsObjectInView(const NNSG2dCellData *cellData, const MtxFx32 *objectCoords, const NNSG2dViewRect *viewRect)
|
||||
{
|
||||
const NNSG2dCellBoundingRectS16 *boundingRect = NNS_G2dGetCellBoundingRect(cellData);
|
||||
const fx32 boundingRadius = NNS_G2dGetCellBoundingSphereR(cellData);
|
||||
const fx32 originX = objectCoords->_20 - viewRect->posTopLeft.x;
|
||||
const fx32 originY = objectCoords->_21 - viewRect->posTopLeft.y;
|
||||
|
||||
fx32 minY, maxY;
|
||||
fx32 minX, maxX;
|
||||
fx32 tmp;
|
||||
|
||||
if (NNS_G2dCellHasBR(cellData) == 1) {
|
||||
minY = boundingRect->minY << FX32_SHIFT;
|
||||
maxY = boundingRect->maxY << FX32_SHIFT;
|
||||
minX = boundingRect->minX << FX32_SHIFT;
|
||||
maxX = boundingRect->maxX << FX32_SHIFT;
|
||||
} else {
|
||||
minY = -boundingRadius << FX32_SHIFT;
|
||||
maxY = boundingRadius << FX32_SHIFT;
|
||||
minX = -boundingRadius << FX32_SHIFT;
|
||||
maxX = boundingRadius << FX32_SHIFT;
|
||||
}
|
||||
|
||||
minY = FX_Mul(minY, objectCoords->_01) + FX_Mul(minY, objectCoords->_11) + originY;
|
||||
maxY = FX_Mul(maxY, objectCoords->_01) + FX_Mul(maxY, objectCoords->_11) + originY;
|
||||
minX = FX_Mul(minX, objectCoords->_00) + FX_Mul(minX, objectCoords->_10) + originX;
|
||||
maxX = FX_Mul(maxX, objectCoords->_00) + FX_Mul(maxX, objectCoords->_10) + originX;
|
||||
|
||||
if (maxY < minY) {
|
||||
tmp = maxY;
|
||||
maxY = minY;
|
||||
minY = tmp;
|
||||
}
|
||||
|
||||
if (maxX < minX) {
|
||||
tmp = maxX;
|
||||
maxX = minX;
|
||||
minX = tmp;
|
||||
}
|
||||
|
||||
return maxY > 0 && minY < viewRect->sizeView.y && maxX > 0 && minX < viewRect->sizeView.x;
|
||||
}
|
||||
|
|
@ -7,11 +7,11 @@
|
|||
#include "char_transfer.h"
|
||||
#include "heap.h"
|
||||
#include "pltt_transfer.h"
|
||||
#include "render_view.h"
|
||||
#include "sprite_resource.h"
|
||||
#include "sprite_transfer.h"
|
||||
#include "sprite_util.h"
|
||||
#include "unk_0200A784.h"
|
||||
#include "unk_0202309C.h"
|
||||
|
||||
void sub_020093B4(CellActorResourceData *param0, int param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8, SpriteResourceCollection *param9, SpriteResourceCollection *param10, SpriteResourceCollection *param11, SpriteResourceCollection *param12, SpriteResourceCollection *param13, SpriteResourceCollection *param14)
|
||||
{
|
||||
|
|
@ -134,7 +134,7 @@ CellActorCollection *sub_020095C4(int param0, G2dRenderer *param1, int param2)
|
|||
CellActorCollectionParams v0;
|
||||
NNSG2dViewRect v1;
|
||||
|
||||
sub_0202309C(¶m1->renderer, -FX32_ONE);
|
||||
InitRenderer(¶m1->renderer, -FX32_ONE);
|
||||
|
||||
v1.posTopLeft.x = 0;
|
||||
v1.posTopLeft.y = 0;
|
||||
|
|
@ -166,7 +166,7 @@ void sub_0200962C(G2dRenderer *param0, fx32 param1, fx32 param2)
|
|||
v0.sizeView.x = (255 << FX32_SHIFT);
|
||||
v0.sizeView.y = (192 << FX32_SHIFT);
|
||||
|
||||
sub_020230E0(¶m0->mainScreen, &v0);
|
||||
SetRenderSurfaceViewRect(¶m0->mainScreen, &v0);
|
||||
}
|
||||
|
||||
void sub_0200964C(G2dRenderer *param0, fx32 param1, fx32 param2)
|
||||
|
|
@ -178,7 +178,7 @@ void sub_0200964C(G2dRenderer *param0, fx32 param1, fx32 param2)
|
|||
v0.sizeView.x = (255 << FX32_SHIFT);
|
||||
v0.sizeView.y = (192 << FX32_SHIFT);
|
||||
|
||||
sub_020230E0(¶m0->subScreen, &v0);
|
||||
SetRenderSurfaceViewRect(¶m0->subScreen, &v0);
|
||||
}
|
||||
|
||||
void sub_0200966C(u32 param0, GXOBJVRamModeChar param1)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#include "cell_actor.h"
|
||||
#include "heap.h"
|
||||
#include "unk_0202309C.h"
|
||||
#include "render_view.h"
|
||||
|
||||
typedef struct {
|
||||
NNSG2dOamManagerInstance unk_00;
|
||||
|
|
@ -98,9 +98,9 @@ void sub_0200A8B0(NNSG2dRenderSurface *param0, NNSG2dViewRect *param1, NNSG2dSur
|
|||
GF_ASSERT(Unk_021BF430);
|
||||
|
||||
if (param2 == NNS_G2D_SURFACETYPE_MAIN2D) {
|
||||
sub_020230AC(param0, param1, sub_0200A94C, sub_0200A990, sub_020230F0, param2, param3);
|
||||
InitRenderSurface(param0, param1, sub_0200A94C, sub_0200A990, IsObjectInView, param2, param3);
|
||||
} else {
|
||||
sub_020230AC(param0, param1, sub_0200A96C, sub_0200A9B4, sub_020230F0, param2, param3);
|
||||
InitRenderSurface(param0, param1, sub_0200A96C, sub_0200A9B4, IsObjectInView, param2, param3);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,80 +0,0 @@
|
|||
#include "unk_0202309C.h"
|
||||
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
void sub_0202309C(NNSG2dRendererInstance *param0, fx32 param1)
|
||||
{
|
||||
NNS_G2dInitRenderer(param0);
|
||||
NNS_G2dSetRendererSpriteZoffset(param0, param1);
|
||||
}
|
||||
|
||||
void sub_020230AC(NNSG2dRenderSurface *param0, NNSG2dViewRect *param1, NNSG2dOamRegisterFunction param2, NNSG2dAffineRegisterFunction param3, NNSG2dRndCellCullingFunction param4, NNSG2dSurfaceType param5, NNSG2dRendererInstance *param6)
|
||||
{
|
||||
NNS_G2dInitRenderSurface(param0);
|
||||
|
||||
param0->viewRect = *param1;
|
||||
param0->pFuncOamRegister = param2;
|
||||
param0->pFuncOamAffineRegister = param3;
|
||||
param0->pFuncVisibilityCulling = param4;
|
||||
param0->type = param5;
|
||||
|
||||
if (param6) {
|
||||
NNS_G2dAddRendererTargetSurface(param6, param0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_020230E0(NNSG2dRenderSurface *param0, NNSG2dViewRect *param1)
|
||||
{
|
||||
param0->viewRect = *param1;
|
||||
}
|
||||
|
||||
BOOL sub_020230F0(const NNSG2dCellData *param0, const MtxFx32 *param1, const NNSG2dViewRect *param2)
|
||||
{
|
||||
const NNSG2dCellBoundingRectS16 *v0 = NNS_G2dGetCellBoundingRect(param0);
|
||||
const fx32 v1 = NNS_G2dGetCellBoundingSphereR(param0);
|
||||
const fx32 v2 = param1->_20 - param2->posTopLeft.x;
|
||||
const fx32 v3 = param1->_21 - param2->posTopLeft.y;
|
||||
fx32 v4;
|
||||
fx32 v5;
|
||||
fx32 v6;
|
||||
fx32 v7;
|
||||
fx32 v8;
|
||||
|
||||
if (NNS_G2dCellHasBR(param0) == 1) {
|
||||
v4 = v0->minY << FX32_SHIFT;
|
||||
v5 = v0->maxY << FX32_SHIFT;
|
||||
v6 = v0->minX << FX32_SHIFT;
|
||||
v7 = v0->maxX << FX32_SHIFT;
|
||||
} else {
|
||||
v4 = -v1 << FX32_SHIFT;
|
||||
v5 = v1 << FX32_SHIFT;
|
||||
v6 = -v1 << FX32_SHIFT;
|
||||
v7 = v1 << FX32_SHIFT;
|
||||
}
|
||||
|
||||
v4 = FX_Mul(v4, param1->_01) + FX_Mul(v4, param1->_11) + v3;
|
||||
v5 = FX_Mul(v5, param1->_01) + FX_Mul(v5, param1->_11) + v3;
|
||||
v6 = FX_Mul(v6, param1->_00) + FX_Mul(v6, param1->_10) + v2;
|
||||
v7 = FX_Mul(v7, param1->_00) + FX_Mul(v7, param1->_10) + v2;
|
||||
|
||||
if (v5 < v4) {
|
||||
v8 = v5;
|
||||
v5 = v4;
|
||||
v4 = v8;
|
||||
}
|
||||
|
||||
if (v7 < v6) {
|
||||
v8 = v7;
|
||||
v7 = v6;
|
||||
v6 = v8;
|
||||
}
|
||||
|
||||
if ((v5 > 0) && (v4 < param2->sizeView.y)) {
|
||||
if ((v7 > 0) && (v6 < param2->sizeView.x)) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user