lod, prim refactor
This commit is contained in:
@@ -15,13 +15,37 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
DynPipCore::DynPipCore() {}
|
||||
DynPipCore::DynPipCore() {
|
||||
setPrim();
|
||||
setLod();
|
||||
}
|
||||
|
||||
DynPipCore::~DynPipCore() {}
|
||||
|
||||
void DynPipCore::init(RendererCore* t_core) {
|
||||
rendererCore = t_core;
|
||||
qbufferRenderer.init(t_core, &repository);
|
||||
qbufferRenderer.init(t_core, &repository, &prim, &lod);
|
||||
}
|
||||
|
||||
void DynPipCore::setPrim() {
|
||||
prim.type = PRIM_TRIANGLE;
|
||||
prim.shading = PRIM_SHADE_GOURAUD;
|
||||
prim.mapping = DRAW_ENABLE;
|
||||
prim.fogging = DRAW_DISABLE;
|
||||
prim.blending = DRAW_ENABLE;
|
||||
prim.antialiasing = DRAW_DISABLE;
|
||||
prim.mapping_type = PRIM_MAP_ST;
|
||||
prim.colorfix = PRIM_UNFIXED;
|
||||
}
|
||||
|
||||
void DynPipCore::setLod() {
|
||||
lod.calculation = LOD_USE_K;
|
||||
lod.max_level = 0;
|
||||
lod.mag_filter = LOD_MAG_NEAREST;
|
||||
lod.min_filter = LOD_MIN_NEAREST;
|
||||
lod.mipmap_select = LOD_MIPMAP_REGISTER;
|
||||
lod.l = 0;
|
||||
lod.k = 0.0F;
|
||||
}
|
||||
|
||||
void DynPipCore::reinitVU1Programs() { qbufferRenderer.reinitVU1(); }
|
||||
|
||||
@@ -45,8 +45,11 @@ void DynPipRenderer::deallocateOnUse() {
|
||||
}
|
||||
|
||||
void DynPipRenderer::init(RendererCore* t_core,
|
||||
DynPipProgramsRepository* t_programRepo) {
|
||||
DynPipProgramsRepository* t_programRepo,
|
||||
prim_t* t_prim, lod_t* t_lod) {
|
||||
path1 = t_core->getPath1();
|
||||
prim = t_prim;
|
||||
lod = t_lod;
|
||||
rendererCore = t_core;
|
||||
programsRepo = t_programRepo;
|
||||
|
||||
@@ -122,7 +125,7 @@ void DynPipRenderer::sendObjectData(
|
||||
packet2_add_u32(objectDataPacket, 0); // not used, padding
|
||||
packet2_add_u32(objectDataPacket, 0); // not used, padding
|
||||
|
||||
packet2_utils_gs_add_lod(objectDataPacket, &rendererCore->gs.lod);
|
||||
packet2_utils_gs_add_lod(objectDataPacket, lod);
|
||||
|
||||
if (texBuffers != nullptr) {
|
||||
rendererCore->texture.updateClutBuffer(texBuffers->clut);
|
||||
@@ -154,8 +157,7 @@ void DynPipRenderer::addBufferDataToPacket(DynPipVU1Program* program,
|
||||
for (u32 i = 0; i < count; i++) {
|
||||
if (bags[i]->count <= 0) continue;
|
||||
|
||||
program->addBufferDataToPacket(currentPacket, bags[i],
|
||||
&rendererCore->gs.prim);
|
||||
program->addBufferDataToPacket(currentPacket, bags[i], prim);
|
||||
|
||||
if (lastProgramName != program->getName()) {
|
||||
packet2_utils_vu_add_start_program(currentPacket,
|
||||
|
||||
@@ -18,6 +18,8 @@ MinecraftPipeline::MinecraftPipeline() {
|
||||
latestMode = UndefinedMcpipProgram;
|
||||
spamBuffersCount = 4;
|
||||
spammerIndex = 0;
|
||||
setPrim();
|
||||
setLod();
|
||||
}
|
||||
|
||||
MinecraftPipeline::~MinecraftPipeline() {
|
||||
@@ -29,11 +31,32 @@ MinecraftPipeline::~MinecraftPipeline() {
|
||||
|
||||
void MinecraftPipeline::setRenderer(RendererCore* core) {
|
||||
rendererCore = core;
|
||||
manager.init(core);
|
||||
manager.init(core, &prim, &lod);
|
||||
|
||||
initBBox();
|
||||
}
|
||||
|
||||
void MinecraftPipeline::setPrim() {
|
||||
prim.type = PRIM_TRIANGLE;
|
||||
prim.shading = PRIM_SHADE_FLAT;
|
||||
prim.mapping = DRAW_ENABLE;
|
||||
prim.fogging = DRAW_DISABLE;
|
||||
prim.blending = DRAW_ENABLE;
|
||||
prim.antialiasing = DRAW_DISABLE;
|
||||
prim.mapping_type = PRIM_MAP_ST;
|
||||
prim.colorfix = PRIM_UNFIXED;
|
||||
}
|
||||
|
||||
void MinecraftPipeline::setLod() {
|
||||
lod.calculation = LOD_USE_K;
|
||||
lod.max_level = 0;
|
||||
lod.mag_filter = LOD_MAG_NEAREST;
|
||||
lod.min_filter = LOD_MIN_NEAREST;
|
||||
lod.mipmap_select = LOD_MIPMAP_REGISTER;
|
||||
lod.l = 0;
|
||||
lod.k = 0.0F;
|
||||
}
|
||||
|
||||
void MinecraftPipeline::onUse() {
|
||||
spamBuffers = new McpipBlock**[spamBuffersCount];
|
||||
spamCounts = new u32[spamBuffersCount];
|
||||
@@ -59,7 +82,6 @@ void MinecraftPipeline::render(McpipBlock* blocks, const u32& count,
|
||||
Texture* t_tex, const bool& isMulti,
|
||||
const bool& fullClipChecks) {
|
||||
auto texBuffers = rendererCore->texture.useTexture(t_tex);
|
||||
rendererCore->gs.prim.mapping = 1;
|
||||
|
||||
manager.clearLastProgram();
|
||||
std::vector<u32> cullIndexes;
|
||||
|
||||
@@ -22,7 +22,10 @@ McpipClip::McpipClip() {
|
||||
McpipClip::~McpipClip() { packet2_free(staticPacket); }
|
||||
|
||||
void McpipClip::init(RendererCore* core, McpipBlockData* t_singleBlockData,
|
||||
McpipBlockData* t_multiBlockData) {
|
||||
McpipBlockData* t_multiBlockData, prim_t* t_prim,
|
||||
lod_t* t_lod) {
|
||||
prim = t_prim;
|
||||
lod = t_lod;
|
||||
singleBlockData = t_singleBlockData;
|
||||
multiBlockData = t_multiBlockData;
|
||||
rendererCore = core;
|
||||
@@ -46,7 +49,7 @@ void McpipClip::configureVU1AndSendStaticData() {
|
||||
void McpipClip::initStaticPacket() {
|
||||
packet2_utils_vu_open_unpack(staticPacket, VU1_MCPIP_AS_IS_STATIC_LOD, false);
|
||||
{
|
||||
packet2_utils_gs_add_lod(staticPacket, &rendererCore->gs.lod);
|
||||
packet2_utils_gs_add_lod(staticPacket, lod);
|
||||
packet2_utils_gif_add_set(staticPacket, 1);
|
||||
}
|
||||
packet2_utils_vu_close_unpack(staticPacket);
|
||||
@@ -120,7 +123,7 @@ void McpipClip::addDataToPacket(packet2_t* packet, const u8& context,
|
||||
static_cast<float>(0xFFFFFF) / 32.0F); // scale
|
||||
packet2_add_s32(packet, count); // vertex count
|
||||
|
||||
packet2_utils_gs_add_prim_giftag(packet, &rendererCore->gs.prim, count,
|
||||
packet2_utils_gs_add_prim_giftag(packet, prim, count,
|
||||
((u64)GIF_REG_ST) << 0 |
|
||||
((u64)GIF_REG_RGBAQ) << 4 |
|
||||
((u64)GIF_REG_XYZ2) << 8,
|
||||
|
||||
@@ -18,7 +18,10 @@ McpipCull::McpipCull() {
|
||||
|
||||
McpipCull::~McpipCull() { packet2_free(staticPacket); }
|
||||
|
||||
void McpipCull::init(RendererCore* core, McpipBlockData* t_blockData) {
|
||||
void McpipCull::init(RendererCore* core, McpipBlockData* t_blockData,
|
||||
prim_t* t_prim, lod_t* t_lod) {
|
||||
prim = t_prim;
|
||||
lod = t_lod;
|
||||
blockData = t_blockData;
|
||||
rendererCore = core;
|
||||
initStaticPacket();
|
||||
@@ -79,9 +82,9 @@ u32 McpipCull::getMaxBlocksCountPerQBuffer() const {
|
||||
void McpipCull::initStaticPacket() {
|
||||
packet2_utils_vu_open_unpack(staticPacket, VU1_MCPIP_CULL_STATIC_LOD, false);
|
||||
{
|
||||
packet2_utils_gs_add_lod(staticPacket, &rendererCore->gs.lod);
|
||||
packet2_utils_gs_add_lod(staticPacket, lod);
|
||||
|
||||
packet2_utils_gs_add_prim_giftag(staticPacket, &rendererCore->gs.prim, 36,
|
||||
packet2_utils_gs_add_prim_giftag(staticPacket, prim, 36,
|
||||
((u64)GIF_REG_ST) << 0 |
|
||||
((u64)GIF_REG_RGBAQ) << 4 |
|
||||
((u64)GIF_REG_XYZ2) << 8,
|
||||
|
||||
@@ -36,10 +36,11 @@ BlockizerProgramsManager::~BlockizerProgramsManager() {
|
||||
packet2_free(programsPacket);
|
||||
}
|
||||
|
||||
void BlockizerProgramsManager::init(RendererCore* core) {
|
||||
void BlockizerProgramsManager::init(RendererCore* core, prim_t* prim,
|
||||
lod_t* lod) {
|
||||
rendererCore = core;
|
||||
culler.init(core, &singleTexBlockData);
|
||||
clipper.init(core, &singleTexBlockData, &multiTexBlockData);
|
||||
culler.init(core, &singleTexBlockData, prim, lod);
|
||||
clipper.init(core, &singleTexBlockData, &multiTexBlockData, prim, lod);
|
||||
}
|
||||
|
||||
void BlockizerProgramsManager::setProgramsCache() {
|
||||
|
||||
@@ -22,16 +22,41 @@
|
||||
|
||||
namespace Tyra {
|
||||
|
||||
StaPipCore::StaPipCore() { maxVertCount = 0; }
|
||||
StaPipCore::StaPipCore() {
|
||||
maxVertCount = 0;
|
||||
setPrim();
|
||||
setLod();
|
||||
}
|
||||
|
||||
StaPipCore::~StaPipCore() {}
|
||||
|
||||
void StaPipCore::init(RendererCore* t_core) {
|
||||
rendererCore = t_core;
|
||||
qbufferRenderer.init(t_core);
|
||||
qbufferRenderer.init(t_core, &prim, &lod);
|
||||
packager.init(&rendererCore->renderer3D.frustumPlanes);
|
||||
}
|
||||
|
||||
void StaPipCore::setPrim() {
|
||||
prim.type = PRIM_TRIANGLE;
|
||||
prim.shading = PRIM_SHADE_GOURAUD;
|
||||
prim.mapping = DRAW_ENABLE;
|
||||
prim.fogging = DRAW_DISABLE;
|
||||
prim.blending = DRAW_ENABLE;
|
||||
prim.antialiasing = DRAW_DISABLE;
|
||||
prim.mapping_type = PRIM_MAP_ST;
|
||||
prim.colorfix = PRIM_UNFIXED;
|
||||
}
|
||||
|
||||
void StaPipCore::setLod() {
|
||||
lod.calculation = LOD_USE_K;
|
||||
lod.max_level = 0;
|
||||
lod.mag_filter = LOD_MAG_NEAREST;
|
||||
lod.min_filter = LOD_MIN_NEAREST;
|
||||
lod.mipmap_select = LOD_MIPMAP_REGISTER;
|
||||
lod.l = 0;
|
||||
lod.k = 0.0F;
|
||||
}
|
||||
|
||||
void StaPipCore::reinitVU1Programs() { qbufferRenderer.reinitVU1(); }
|
||||
|
||||
u32 StaPipCore::getMaxVertCountByBag(const StaPipBag* bag) {
|
||||
|
||||
@@ -82,10 +82,13 @@ StaPipQBufferRenderer::~StaPipQBufferRenderer() {
|
||||
if (programsPacket) packet2_free(programsPacket);
|
||||
}
|
||||
|
||||
void StaPipQBufferRenderer::init(RendererCore* t_core) {
|
||||
void StaPipQBufferRenderer::init(RendererCore* t_core, prim_t* t_prim,
|
||||
lod_t* t_lod) {
|
||||
path1 = t_core->getPath1();
|
||||
clipper.init(t_core->getSettings());
|
||||
rendererCore = t_core;
|
||||
prim = t_prim;
|
||||
lod = t_lod;
|
||||
|
||||
dma_channel_initialize(DMA_CHANNEL_VIF1, NULL, 0);
|
||||
dma_channel_fast_waits(DMA_CHANNEL_VIF1);
|
||||
@@ -136,7 +139,7 @@ void StaPipQBufferRenderer::sendObjectData(
|
||||
packet2_add_u32(objectDataPacket, 0); // not used, padding
|
||||
packet2_add_u32(objectDataPacket, 0); // not used, padding
|
||||
|
||||
packet2_utils_gs_add_lod(objectDataPacket, &rendererCore->gs.lod);
|
||||
packet2_utils_gs_add_lod(objectDataPacket, lod);
|
||||
|
||||
if (texBuffers != nullptr) {
|
||||
rendererCore->texture.updateClutBuffer(texBuffers->clut);
|
||||
@@ -153,9 +156,9 @@ void StaPipQBufferRenderer::sendObjectData(
|
||||
}
|
||||
|
||||
void StaPipQBufferRenderer::setInfo(PipelineInfoBag* bag) {
|
||||
rendererCore->gs.prim.antialiasing = bag->antiAliasingEnabled;
|
||||
rendererCore->gs.prim.blending = bag->blendingEnabled;
|
||||
rendererCore->gs.prim.shading = bag->shadingType;
|
||||
prim->antialiasing = bag->antiAliasingEnabled;
|
||||
prim->blending = bag->blendingEnabled;
|
||||
prim->shading = bag->shadingType;
|
||||
}
|
||||
|
||||
void StaPipQBufferRenderer::sendStaticData() const {
|
||||
@@ -286,8 +289,7 @@ void StaPipQBufferRenderer::addBufferDataToPacket(StaPipQBuffer** buffers,
|
||||
for (u32 i = 0; i < count; i++) {
|
||||
if (!buffers[i]->any()) continue;
|
||||
|
||||
dBufferPrograms[i]->addBufferDataToPacket(currentPacket, buffers[i],
|
||||
&rendererCore->gs.prim);
|
||||
dBufferPrograms[i]->addBufferDataToPacket(currentPacket, buffers[i], prim);
|
||||
|
||||
if (lastProgramName != dBufferPrograms[i]->getName()) {
|
||||
packet2_utils_vu_add_start_program(
|
||||
|
||||
Reference in New Issue
Block a user