mcpip changes

This commit is contained in:
h4570
2022-08-03 18:35:00 +02:00
parent 0a024e745f
commit 82e5e87822
8 changed files with 51 additions and 38 deletions
@@ -78,8 +78,8 @@ void MinecraftPipeline::initBBox() {
bbox = new RenderBBox(block.vertices, block.count);
}
void MinecraftPipeline::render(McpipBlock* blocks, const u32& count,
Texture* t_tex, const bool& isMulti,
void MinecraftPipeline::render(std::vector<McpipBlock*> blocks, Texture* t_tex,
const bool& isMulti,
const bool& fullClipChecks) {
auto texBuffers = rendererCore->texture.useTexture(t_tex);
@@ -87,7 +87,7 @@ void MinecraftPipeline::render(McpipBlock* blocks, const u32& count,
std::vector<u32> cullIndexes;
if (!fullClipChecks) {
for (u32 i = 0; i < count; i++) cullIndexes.push_back(i);
for (u32 i = 0; i < blocks.size(); i++) cullIndexes.push_back(i);
cull(blocks, cullIndexes, &texBuffers, true, isMulti);
return;
}
@@ -95,8 +95,8 @@ void MinecraftPipeline::render(McpipBlock* blocks, const u32& count,
u32 culled = 0, clipped = 0;
std::vector<u32> clipIndexes;
for (u32 i = 0; i < count; i++) {
auto frustum = isInFrustum(blocks[i]);
for (u32 i = 0; i < blocks.size(); i++) {
auto frustum = isInFrustum(*blocks[i]);
if (frustum == CoreBBoxFrustum::IN_FRUSTUM) {
cullIndexes.push_back(i);
culled++;
@@ -112,10 +112,10 @@ void MinecraftPipeline::render(McpipBlock* blocks, const u32& count,
CoreBBoxFrustum MinecraftPipeline::isInFrustum(const McpipBlock& block) const {
const auto* frustumPlanes = rendererCore->renderer3D.frustumPlanes.getAll();
return bbox->clipIsInFrustum(frustumPlanes, block.model);
return bbox->clipIsInFrustum(frustumPlanes, *block.model);
}
void MinecraftPipeline::cull(McpipBlock* blocks,
void MinecraftPipeline::cull(std::vector<McpipBlock*> blocks,
const std::vector<u32>& indexes,
RendererCoreTextureBuffers* texBuffers,
const bool& isCullOnly, const bool& isMulti) {
@@ -134,7 +134,7 @@ void MinecraftPipeline::cull(McpipBlock* blocks,
u32 blockPointerArrayCount = 0;
for (u32 j = 0; j < subArraySize; j++) {
blockPointerArray[blockPointerArrayCount++] =
&blocks[indexes[i * maxBlocksPerQBuffer + j]];
blocks[indexes[i * maxBlocksPerQBuffer + j]];
}
if (isCullOnly) {
@@ -158,14 +158,14 @@ void MinecraftPipeline::cull(McpipBlock* blocks,
// -- 1st qbuff: 500 - 221 = 279
// Tags: 279 - for example 20 = 259
// Vert + ST from EE = 259 / 2 = 129 verts | OK!
void MinecraftPipeline::clip(McpipBlock* blocks,
void MinecraftPipeline::clip(std::vector<McpipBlock*> blocks,
const std::vector<u32>& indexes,
RendererCoreTextureBuffers* texBuffers,
const bool& isMulti) {
changeMode(McPipAsIs, false);
for (u32 i = 0; i < indexes.size(); i++) {
manager.clip(&blocks[indexes[i]], texBuffers, isMulti);
manager.clip(blocks[indexes[i]], texBuffers, isMulti);
}
}
@@ -61,7 +61,7 @@ void McpipClip::addData(McpipBlock* block, const bool& isMulti,
RendererCoreTextureBuffers* texBuffers,
packet2_t* packet, const u8& context) {
std::vector<EEClipVertex> clippedVertices;
auto mvp = rendererCore->renderer3D.getViewProj() * block->model;
auto mvp = rendererCore->renderer3D.getViewProj() * (*block->model);
const auto* blockData = isMulti ? multiBlockData : singleBlockData;
@@ -96,7 +96,7 @@ void McpipClip::addCorrections(std::vector<EEClipVertex>* vertices,
McpipBlock* block) {
for (u32 i = 0; i < vertices->size(); i++) {
(*vertices)[i].position /= (*vertices)[i].position.w; // Perspective divide
(*vertices)[i].st += block->textureOffset; // Texture offset
(*vertices)[i].st += *block->textureOffset; // Texture offset
}
}
@@ -132,7 +132,7 @@ void McpipClip::addDataToPacket(packet2_t* packet, const u8& context,
packet2_utils_gs_add_texbuff_clut(packet, texBuffers->core,
&rendererCore->texture.clut);
Packet2TyraUtils::addColor(packet, block->color);
Packet2TyraUtils::addColor(packet, *block->color);
}
packet2_utils_vu_close_unpack(packet);
@@ -131,9 +131,15 @@ void McpipCull::addData(packet2_t* packet, McpipBlock** blockPointerArray,
u32 addr = VU1_MCPIP_CULL_DYNAMIC_BLOCKS_DATA;
for (u32 i = 0; i < blockPointerArrayCount; i++) {
packet2_utils_vu_add_unpack_data(packet, addr, blockPointerArray[i],
VU1_MCPIP_CULL_QWORDS_PER_BLOCK, true);
addr += VU1_MCPIP_CULL_QWORDS_PER_BLOCK;
packet2_utils_vu_add_unpack_data(packet, addr, blockPointerArray[i]->model,
4, true);
addr += 4;
packet2_utils_vu_add_unpack_data(packet, addr, blockPointerArray[i]->color,
1, true);
addr += 1;
packet2_utils_vu_add_unpack_data(
packet, addr, blockPointerArray[i]->textureOffset, 1, true);
addr += 1;
}
}
@@ -21,8 +21,8 @@ BlockizerProgramsManager::BlockizerProgramsManager() {
}
void BlockizerProgramsManager::allocateOnUse() {
dynamicPackets[0] = packet2_create(300, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
dynamicPackets[1] = packet2_create(300, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
dynamicPackets[0] = packet2_create(800, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
dynamicPackets[1] = packet2_create(800, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
staticPacket = packet2_create(2, P2_TYPE_NORMAL, P2_MODE_CHAIN, true);
}