interlacing mode
This commit is contained in:
@@ -33,6 +33,11 @@ class RendererSettings {
|
|||||||
const float& getProjectionScale() const { return projectionScale; }
|
const float& getProjectionScale() const { return projectionScale; }
|
||||||
const float& getAspectRatio() const { return aspectRatio; }
|
const float& getAspectRatio() const { return aspectRatio; }
|
||||||
|
|
||||||
|
float getInterlacedHeightF() const { return getHeight() / 2; }
|
||||||
|
unsigned int getInterlacedHeightUI() const {
|
||||||
|
return static_cast<unsigned int>(getInterlacedHeightF());
|
||||||
|
}
|
||||||
|
|
||||||
static void copy(RendererSettings* out, const RendererSettings* in);
|
static void copy(RendererSettings* out, const RendererSettings* in);
|
||||||
void set(const RendererSettings& v);
|
void set(const RendererSettings& v);
|
||||||
|
|
||||||
|
|||||||
@@ -88,10 +88,11 @@ void RendererCore2D::render(Sprite* sprite,
|
|||||||
packet2_utils_gs_add_texbuff_clut(packet, texBuffers.core, clutBuffer);
|
packet2_utils_gs_add_texbuff_clut(packet, texBuffers.core, clutBuffer);
|
||||||
draw_enable_blending();
|
draw_enable_blending();
|
||||||
packet2_update(packet, draw_rect_textured(packet->next, 0, rect));
|
packet2_update(packet, draw_rect_textured(packet->next, 0, rect));
|
||||||
packet2_update(packet, draw_primitive_xyoffset(
|
packet2_update(
|
||||||
packet->next, 0,
|
packet,
|
||||||
SCREEN_CENTER - (settings->getWidth() / 2.0F),
|
draw_primitive_xyoffset(
|
||||||
SCREEN_CENTER - (settings->getHeight() / 2.0F)));
|
packet->next, 0, SCREEN_CENTER - (settings->getWidth() / 2.0F),
|
||||||
|
SCREEN_CENTER - (settings->getInterlacedHeightF() / 2.0F)));
|
||||||
draw_disable_blending();
|
draw_disable_blending();
|
||||||
packet2_update(packet, draw_finish(packet->next));
|
packet2_update(packet, draw_finish(packet->next));
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ void RendererCore3D::setFov(const float& t_fov) {
|
|||||||
|
|
||||||
void RendererCore3D::setProjection() {
|
void RendererCore3D::setProjection() {
|
||||||
projection = M4x4::perspective(
|
projection = M4x4::perspective(
|
||||||
fov, settings->getWidth(), settings->getHeight(),
|
fov, settings->getWidth(), settings->getInterlacedHeightF(),
|
||||||
settings->getProjectionScale(), settings->getAspectRatio(),
|
settings->getProjectionScale(), settings->getAspectRatio(),
|
||||||
settings->getNear(), settings->getFar());
|
settings->getNear(), settings->getFar());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,12 +52,12 @@ void RendererCoreGS::initChannels() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RendererCoreGS::allocateBuffers() {
|
void RendererCoreGS::allocateBuffers() {
|
||||||
const u16 psm = 24;
|
const u16 psm = 32;
|
||||||
|
|
||||||
frameBuffers[0].width = static_cast<unsigned int>(settings->getWidth());
|
frameBuffers[0].width = static_cast<unsigned int>(settings->getWidth());
|
||||||
frameBuffers[0].height = static_cast<unsigned int>(settings->getHeight());
|
frameBuffers[0].height = settings->getInterlacedHeightUI();
|
||||||
frameBuffers[0].mask = 0;
|
frameBuffers[0].mask = 0;
|
||||||
frameBuffers[0].psm = GS_PSM_24;
|
frameBuffers[0].psm = GS_PSM_32;
|
||||||
frameBuffers[0].address =
|
frameBuffers[0].address =
|
||||||
graph_vram_allocate(frameBuffers[0].width, frameBuffers[0].height,
|
graph_vram_allocate(frameBuffers[0].width, frameBuffers[0].height,
|
||||||
frameBuffers[0].psm, GRAPH_ALIGN_PAGE);
|
frameBuffers[0].psm, GRAPH_ALIGN_PAGE);
|
||||||
@@ -73,15 +73,20 @@ void RendererCoreGS::allocateBuffers() {
|
|||||||
zBuffer.enable = DRAW_ENABLE;
|
zBuffer.enable = DRAW_ENABLE;
|
||||||
zBuffer.mask = 0;
|
zBuffer.mask = 0;
|
||||||
zBuffer.method = ZTEST_METHOD_GREATER_EQUAL;
|
zBuffer.method = ZTEST_METHOD_GREATER_EQUAL;
|
||||||
zBuffer.zsm = GS_ZBUF_24;
|
zBuffer.zsm = GS_ZBUF_32;
|
||||||
zBuffer.address =
|
zBuffer.address =
|
||||||
graph_vram_allocate(frameBuffers[0].width, frameBuffers[0].height,
|
graph_vram_allocate(frameBuffers[0].width, frameBuffers[0].height,
|
||||||
zBuffer.zsm, GRAPH_ALIGN_PAGE);
|
zBuffer.zsm, GRAPH_ALIGN_PAGE);
|
||||||
TYRA_LOG("Framebuffers, zBuffer set and allocated!");
|
TYRA_LOG("Framebuffers, zBuffer set and allocated!");
|
||||||
|
|
||||||
// Initialize the screen and tie the first framebuffer to the read circuits.
|
graph_set_mode(GRAPH_MODE_INTERLACED, GRAPH_MODE_NTSC, GRAPH_MODE_FRAME,
|
||||||
graph_initialize(frameBuffers[1].address, frameBuffers[1].width,
|
GRAPH_ENABLE);
|
||||||
frameBuffers[1].height, frameBuffers[1].psm, 0, 0);
|
graph_set_screen(0, 0, static_cast<int>(settings->getWidth()),
|
||||||
|
static_cast<int>(settings->getHeight()));
|
||||||
|
graph_set_bgcolor(0, 0, 0);
|
||||||
|
graph_set_framebuffer_filtered(frameBuffers[1].address, frameBuffers[1].width,
|
||||||
|
frameBuffers[1].psm, 0, 0);
|
||||||
|
graph_enable_output();
|
||||||
|
|
||||||
spaceOccupiedByFrameBuffers =
|
spaceOccupiedByFrameBuffers =
|
||||||
((frameBuffers[0].width / 100.0F) * (frameBuffers[0].height / 100.0F) *
|
((frameBuffers[0].width / 100.0F) * (frameBuffers[0].height / 100.0F) *
|
||||||
@@ -96,10 +101,11 @@ void RendererCoreGS::initDrawingEnvironment() {
|
|||||||
packet2_t* packet2 = packet2_create(20, P2_TYPE_NORMAL, P2_MODE_NORMAL, 0);
|
packet2_t* packet2 = packet2_create(20, P2_TYPE_NORMAL, P2_MODE_NORMAL, 0);
|
||||||
packet2_update(packet2, draw_setup_environment(packet2->base, 0, frameBuffers,
|
packet2_update(packet2, draw_setup_environment(packet2->base, 0, frameBuffers,
|
||||||
&zBuffer));
|
&zBuffer));
|
||||||
packet2_update(packet2, draw_primitive_xyoffset(
|
packet2_update(
|
||||||
packet2->next, 0,
|
packet2,
|
||||||
screenCenter - (settings->getWidth() / 2.0F),
|
draw_primitive_xyoffset(
|
||||||
screenCenter - (settings->getHeight() / 2.0F)));
|
packet2->next, 0, screenCenter - (settings->getWidth() / 2.0F),
|
||||||
|
screenCenter - (settings->getInterlacedHeightF() / 2.0F)));
|
||||||
packet2_update(packet2, draw_finish(packet2->next));
|
packet2_update(packet2, draw_finish(packet2->next));
|
||||||
dma_channel_send_packet2(packet2, DMA_CHANNEL_GIF, true);
|
dma_channel_send_packet2(packet2, DMA_CHANNEL_GIF, true);
|
||||||
dma_channel_wait(DMA_CHANNEL_GIF, 0);
|
dma_channel_wait(DMA_CHANNEL_GIF, 0);
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ void H4570::init() {
|
|||||||
blocks[i].color = Color(128.0F, 128.0F, 128.0F, 128.0F);
|
blocks[i].color = Color(128.0F, 128.0F, 128.0F, 128.0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
engine->audio.playSong();
|
// engine->audio.playSong();
|
||||||
engine->renderer.setFrameLimit(false);
|
engine->renderer.setFrameLimit(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user